Hướng dẫn cấu hình kết nối từ xa và bảo mật cho MySQL trên Ubuntu 16.04

Hướng dẫn cấu hình kết nối từ xa và bảo mật cho MySQL trên Ubuntu 16.04

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.

Author Image
Hoàng Tùng

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *