Nếu bạn sử dụng cơ sở dữ liệu (CSDL) là MongoDB thì Bạn nên xem bài viết này: Cấu hình để truy cập CSDL MongoDB từ xa trên Linux Server

Đối với CSDL MySQL, theo mặc định chỉ cho phép truy cập cục bộ tại máy cài đặt, đôi khi do quá trình quản lý hoặc ở những hệ thống vừa và lớn, Bạn cần cấu hình để cho phép truy cập từ xa. Trong bài viết này mình sẽ hướng dẫn các bạn giải quyết vấn đề này.

Giả sử như mô hình dưới đây chúng ta có:
– Mạng LAN 192.168.1.0/24 với máy CSDL MySQL được cài đặt ở IP 192.168.1.10 và máy chạy ứng dụng (APP) có IP 192.168.1.20
– IP WAN của mạng LAN là 100.100.100.100
– Một máy truy cập từ xa có IP LAN 10.0.0.10

Bây giờ chúng ta cần cấu hình để cho máy APP và các máy bên ngoài có thể truy cập được vào CSDL có IP 192.168.1.10

1. Cấu hình Bind IP trên MySQL

Tùy theo việc bạn cài đặt MySQL trên các máy chủ Linux Server khác nhau (Ubuntu, CentOS,…) mà file cấu hình của MySQL có đôi chút khác nhau về tên biến, đường dẫn file cấu hình,..

  • Nếu bạn sử dụng Debian/Ubuntu Linux thì file cấu hình đặt tại /etc/mysql/my.cnf.
  • Nếu bạn sử dụng Red Hat Linux/Fedora/Centos Linux file cấu hình đặt tại /etc/my.cnf.
  • Nếu bạn sử dụng FreeBSD file cấu hình đặt tại /var/db/mysql/my.cnf.

Trong bài hướng dẫn này, mình sẽ cấu hình trên máy chủ Ubuntu Server. Bạn mở file cấu hình được lưu tại /etc/mysql/my.cnf và chú ý đoạn sau:

# 
# Instead of skip-networking the default is now to listen only on 
# localhost which is more compatible and is not less secure. 
bind-address = 127.0.0.1 
#

Măc định chỉ có địa chỉ local 127.0.0.1 là được MySQL cho phép truy cập và đồng nghĩa với việc sẽ block các kết nối khác đến CSDL.

Nếu bạn không đề cao vấn đề bảo mật, bạn có thể cấu hình giá trị bind-address là 0.0.0.0 và khi đó CSDL của bạn sẽ chấp nhận mọi kết nối đến, tuy nhiên thực tế điều này không an toàn và không được khuyên sử dụng.

1.1. Cho phép truy cập từ địa chỉ LAN

Để cho phép các IP trong cùng mạng LAN truy cập vào máy chủ CSDL, bạn tùy chỉnh cấu hình như sau:

bind-address = 192.168.1.10

Trong đó, 192.168.1.10 là địa chỉ IP của máy CSDL MySQL, chứ không phải bất kỳ địa chỉ IP LAN nào khác.

1.2. Cho phép truy cập từ địa chỉ bên ngoài LAN

Để cho phép các truy cập từ xa (như mô hình là IP 10.0.0.10) vào máy chủ CSDL, bạn cần cho phép bindIp từ IP WAN

bind-address = 100.100.100.100

Để các thay đổi này có hiệu lực, bạn cần restart lại dịch vụ:

systemctl restart mysql 
hoặc 
/etc/init.d/mysql restart

Nếu bạn sử dụng RHEL / CentOS / Fedora / Scientific Linux, sử dụng câu lệnh sau để restart:

/etc/init.d/mysqld restart 
hoặc 
systemctl restart mysqld

Nếu bạn sử dụng FreeBSD, sử dụng câu lệnh sau để restart:

/usr/local/etc/rc.d/mysql-server restart 
hoặc 
service mysql-server restart

Khi restart thành công, bạn đã có thể truy cập CSDL qua mạng LAN mà không phải làm thêm cấu hình nào khác. Đối với việc truy cập từ xa, bạn có 2 cách phổ biến để kết nối:
– Tạo kết nối VPN từ xa vào mạng LAN và có thể truy cập giống như trong LAN
– Mở port trên firewall có IP WAN 100.100.100.100 để cho phép kết nối đến máy chủ CSDL bên trong mạng LAN

=> Cách kết nối VPN luôn được đảm bảo an toàn nhất và được khuyên dùng, nếu bạn sử dụng cách mở port bạn cần xem mục số 2 dưới đây.

2. Cấu hình Firewall cho phép truy cập ngoài mạng LAN

Khi bạn có firewall bảo vệ mạng LAN, việc bạn cần làm là mở kết nối trên port 3306 (đây là port mặc định của MySQL)

Tùy theo các firewall được cài đặt mà có các cấu hình khác nhau, giả sử ở đây mình sử dụng ipTables để mở cổng thì mình sẽ tạo ra rule như sau:

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

hoặc tùy chỉnh cụ thể theo địa chỉ IP như sau:

iptables -A INPUT -s 10.0.0.10 -p tcp --destination-port 3306 -m state --state NEW,ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -d 10.0.0.10 -p tcp --source-port 3306 -m state --state ESTABLISHED -j ACCEPT

Sau cùng, bạn cần lưu lại cấu hình và restart lại cấu hình firewall.

Chúc các bạn thành công.

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây