Trước khi đi đến phần cấu hình chúng ta tìm hiểu một chút về cơ chế kết nối của MariaDB. Mặc định MariaDB gắn với địa chỉ 127.0.0.1 (IP loopback) bằng tùy chọn bind-address trong file cấu hình, điều này giúp hệ thống bảo mật hơn do không thể kết nối trực tiếp đến MariaDB server từ remote host thông qua cổng TCP. Kể cả cùng 1 máy chủ nhưng khác cổng loopback thì cũng không thể nào kết nối được. Một số phiên bản MariaDB cũ còn khóa luôn kết nối TCP/IP bằng tùy chọn skip-networking.
Thêm nữa MariaDB/ MySQL cũng quy định “localhost” (unix socket) khác so với “127.0.0.1” (tcp socket) nên bạn có thể đặt mật khẩu cho TCP mà không thể đặt cho Unix socket
Kiểm tra cấu hình MariaDB bằng câu lệnh
user@server:~$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Bạn sẽ thấy tùy chọn
bind-address = 127.0.0.1
Cấu hình MariaDB nghe kết nối từ remote host
Rất đơn giản bạn chỉ cần chuyển dòng tùy chọn #bind-address = 127.0.0.1 thành comment, ấn Ctrl+O và Ctrl_X để thoát. Khởi động lại máy chủ MariaDB bằng lệnh
user@server:~$ sudo systemctl restart mariadb
Xem lại cấu hình của MariaDB bằng lệnh
user@server:~$ mysqld --print-defaults mysqld would have been started with the following arguments: --user=mysql --pid-file=/run/mysqld/mysqld.pid --socket=/run/mysqld/mysqld.sock --port=3306 --basedir=/usr --datadir=/var/lib/mysql --tmpdir=/tmp --lc-messages-dir=/usr/share/mysql --query_cache_size=16M --log_error=/var/log/mysql/error.log --expire_logs_days=10 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --lower_case_table_names=1
Cấp quyền cho user kết nối bằng remote host
Đăng nhập vào MariaDB bằng câu lệnh
user@server:~$ sudo mysql -u root
Sử dụng lệnh sau để xem các user và host được phép kết nối
MariaDB [(none)]> SELECT User, Host, Plugin FROM mysql.user; +-------+-------------+-------------+ | User | Host | Plugin | +-------+-------------+-------------+ | jessy | 26.52.152.3 | | | jessy | localhost | | | root | localhost | unix_socket | +-------+-------------+-------------+
Như hình trên ta có thể thấy tài khoản root sử dụng unix_socket có thể đăng nhập trực tiếp từ tài khoản root ubuntu mà không cần mật khẩu
user@server:~$ sudo mysql -u root
Tài khoản jessy được phép kết nối trong localhost và từ địa chỉ 26.52.152.3 bây giờ ta muốn thêm địa chỉ để kết nối đến tài khoản jessy bằng lệnh
MariaDB [(none)]> GRANT ALL PRIVILEGES ON dev_test.* TO 'jessy'@'192.168.0.%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES;
Câu lệnh trên giúp tài khoản jessy sử dụng cơ sở dữ liệu dev_test được phép truy cập từ mạng LAN có địa chỉ 192.168.0.0/24 với mật khẩu là “my-new-password”
Kiểm tra lại ta sẽ thấy:
MariaDB [(none)]> SELECT User, Host, Plugin FROM mysql.user; +-------+-------------+-------------+ | User | Host | Plugin | +-------+-------------+-------------+ | jessy | 192.168.0.% | | | jessy | 61.38.140.3 | | | jessy | localhost | | | root | localhost | unix_socket | +-------+-------------+-------------+
Cấu hình tường lửa để cho phép cổng kết nối MariaDB
Nếu bạn đã kích hoạt tường lửa ufw trên Ubuntu thì cần cấu hình để cho phép cổng 3306 của MariaDB, nếu bạn đã đổi cổng khác thì lưu ý nhập vào cổng tương ứng nhé
user@server:~$ sudo ufw allow 3306/tcp hoặc an toàn hơn thì ta cho 1 IP nhất định user@server:~$ sudo ufw deny from 211.200.186.156 to any port 3306 proto tcp Kiểm tra các rule của tường lửa bằng lệnh user@server:~$ sudo ufw status
Nếu vẫn không được, hãy thử kiểm tra log của tường lửa xem nó có block các gói tin đến cổng 3306 không nhé, mình bị và loay hoay mãi cuối cùng mới tìm ra
user@server:~$ sudo grep -hnr "DPT=3306" /var/log/ufw.log > output.txt
Rõ ràng là khi kiểm tra tường lửa đã cho phép cổng 3306 với IP 211.200.186.156 vậy mà nó vẫn chặn
To Action From -- ------ ---- 80 ALLOW Anywhere 3306/tcp ALLOW 211.200.186.156 80 (v6) ALLOW Anywhere (v6)
Nếu nó chặn, các bạn sử dụng lệnh sau xóa rule đi và tạo lại
user@server:~$ ufw delete allow from 211.200.186.156 to any port 3306 user@server:~$ ufw allow from 211.200.186.156 to any port 3306 proto tcp
Bài viết sử dụng Ubuntu 20.04 và MariaDB 10.3. Mong được các bạn đóng góp ý kiến để website ngày càng phát triển.