Trong bài này, chúng tôi sẽ chỉ cho bạn cách cấu hình các kết nối từ xa một cách an toàn cho MySQL trên Ubuntu 16.04 VPS. Nếu bạn đang sử dụng một kết nối không được mã hóa để kết nối với máy chủ MariaDB / MySQL từ xa thì mọi người có quyền truy cập vào mạng có thể giám sát và phân tích dữ liệu đang được gửi hoặc nhận giữa máy khách và máy chủ. Hướng dẫn này cũng nên hoạt động trên các hệ thống Linux VPS khác nhưng đã được thử nghiệm và viết cho VPS Ubuntu 16.04 .
1. Đăng nhập vào VPS của bạn thông qua SSH
ssh my_sudo_user@my_server
Các bước trong hướng dẫn này chỉ đáp ứng khi bạn đã cài đặt MySQL 5,7 với cấu hình mặc định.
Kích hoạt kết nối SSL:
2. Tạo một chứng nhận local mới
Chúng tôi sẽ sử dụng cơ quan cấp giấy chứng nhận địa phương làm chứng chỉ tự ký gốc mà chúng tôi sẽ sử dụng để ký cả chứng chỉ máy chủ và chứng chỉ ứng dụng khách. Để tạo một tệp thẩm quyền chứng chỉ cục bộ mới chạy các lệnh sau:
sudo openssl genrsa -out /etc/mysql/ca-key.pem 2048 sudo chmod 600 /etc/mysql/ca-key.pem sudo openssl req -new -key /etc/mysql/ca-key.pem -out /etc/mysql/ca-csr.pem -subj /CN=mysql-CA/ sudo openssl x509 -req -in /etc/mysql/ca-csr.pem -out /etc/mysql/cacert.pem -signkey /etc/mysql/ca-key.pem -days 3650 sudo echo 01 > /etc/mysql/cacert.srl
3. Tạo Chứng chỉ Máy chủ và Khóa
Để tạo ra chứng chỉ máy chủ sử dụng lệnh sau:
sudo openssl genrsa -out /etc/mysql/server-key.pem 2048 sudo chmod 600 /etc/mysql/server-key.pem sudo openssl req -new -key /etc/mysql/server-key.pem -out /etc/mysql/server-csr.pem -subj / CN = mysql / sudo openssl x509 -req -in /etc/mysql/server-csr.pem -out /etc/mysql/server-cert.pem -CA /etc/mysql/cacert.pem-key / etc / mysql / ca-key. pem -days 365
4. Tạo Chứng chỉ Khách hàng và Khóa
Tiếp theo, chúng ta cần phải tạo ra chứng chỉ khách hàng. Chạy các lệnh sau để tạo chứng chỉ và khóa khách hàng:
sudo openssl genrsa -out /etc/mysql/client-key.pem 2048 sudo chmod 600 /etc/mysql/client-key.pem sudo openssl req -new -key /etc/mysql/client-key.pem -out /etc/mysql/client-csr.pem -subj / CN = mysql / sudo openssl x509 -req -in /etc/mysql/client-csr.pem -out /etc/mysql/client-cert.pem -CA /etc/mysql/cacert.pem-key / etc / mysql / ca-key. pem -days 365
Nếu bạn muốn có chứng chỉ SSL đã ký CA, bạn có thể mua chứng chỉ SSL đáng tin cậy ở đây .
5. Kích hoạt kết nối SSL Server SSL
Mở tệp tin cấu hình MySQL với trình soạn thảo văn bản của bạn:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
và bỏ ghi chú các dòng sau:
ssl-ca = / etc / mysql / cacert.pem ssl-cert = / etc / mysql / server-cert.pem ssl-key = / etc / mysql / server-key.pem
Lưu tập tin và khởi động lại dịch vụ MySQL:
sudo systemctl restart mysql
Để xác minh rằng SSL được kích hoạt, đăng nhập vào máy chủ MySQL
mysql -uroot -p
và chạy lệnh sau:
mysql> show variables LIKE '%ssl%';
Đầu ra phải tương tự như sau:
+---------------+----------------------------+ | Variable_name | Value | +---------------+----------------------------+ | have_openssl | YES | | have_ssl | YES | | ssl_ca | /etc/mysql/cacert.pem | | ssl_capath | | | ssl_cert | /etc/mysql/server-cert.pem | | ssl_cipher | | | ssl_crl | | | ssl_crlpath | | | ssl_key | /etc/mysql/server-key.pem | +---------------+----------------------------+ 9 rows in set (0.15 sec)
6. Cho phép kết nối từ xa thông qua SSL
Theo mặc định, MySQL chỉ nghe các kết nối trên localhost. Để kích hoạt kết nối từ xa bạn cần phải cấu hình lại MySQL trên máy chủ của bạn để lắng nghe trên tất cả các giao diện, để làm điều đó mở tệp cấu hình MySQL:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
và thay đổi
bind-address = 127.0.0.1
đến
bind-address = 0.0.0.0
Để các thay đổi có hiệu lực, khởi động lại máy chủ MySQL với lệnh sau:
sudo systemctl restart mysql
Xác minh rằng máy chủ MySQL của bạn lắng nghe trên tất cả các giao diện:
sudo netstat -anp | grep 3306
đầu ra nên được tương tự như sau:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 938/mysqld
Để cho phép máy khách MySQL của bạn kết nối đến máy chủ MySQL, bạn cần phải cho phép người dùng cơ sở dữ liệu truy cập vào cơ sở dữ liệu trên máy chủ từ xa.
Ví dụ nếu bạn muốn cấp quyền truy cập cho người dùng dbuser
vào cơ sở dữ liệu database_name
và bắt buộc SSL, đăng nhập vào cơ sở dữ liệu MySQL bằng tài khoản root và chạy lệnh sau:
GRANT ALL ON database_name.* TO dbuser@192.168.1.10 IDENTIFIED BY 'dbuserpassword' REQUIRE SSL;
192.168.1.10
là địa chỉ IP máy khách MySQL của bạn
Tiếp theo, bạn cần phải cấu hình máy khách MySQL của bạn để sử dụng chứng chỉ SSL được tạo ra trước đó. Sao chép các tệp sau đây từ máy chủ MySQL của bạn đến máy khách MySQL của bạn:
/etc/mysql/cacert.pem /etc/mysql/client-cert.pem /etc/mysql/client-key.pem
7. Cấu hình máy khách MySQL
Mở cấu hình máy khách MySQL của bạn và thêm các dòng sau:
[client] ssl-ca=/etc/mysql/cacert.pem ssl-cert=/etc/mysql/client-cert.pem ssl-key=/etc/mysql/client-key.pem
8. Kiểm tra kết nối của bạn
Bây giờ bạn có thể kiểm tra kết nối từ máy khách tới máy chủ cơ sở dữ liệu MySQL:
mysql -udbuser -dbuserpassword -h 192.168.1.5
192.168.1.5
địa chỉ IP máy chủ cơ sở dữ liệu MySQL của bạn
Và bạn đã cấu hình thành công các kết nối từ xa và an toàn cho MySQL trên Ubuntu 16.04 VPS. Để biết thêm thông tin về các kết nối an toàn của MySQL, hãy tham khảo tài liệu chính thức của MySQL.
PS . Nếu bạn thích bài đăng này về cách cấu hình các kết nối từ xa và an toàn cho MySQL trên Ubuntu 16.04, hãy chia sẻ nó với bạn bè của bạn trên các mạng xã hội bằng cách sử dụng các nút ở bên trái hoặc chỉ để lại một trả lời dưới đây. Cảm ơn.