Computer >> Hướng Dẫn Máy Tính >  >> Điện Thoại Thông Minh >> Linux

Cách truy cập MySQL từ xa an toàn qua SSH Tunnel

Hướng dẫn phương pháp an toàn nhất để truy cập MySQL server từ xa: SSH Tunnel (Port Forwarding) – không mở cổng 3306 ra Internet.

Tại sao không mở cổng 3306 công khai?

  • MySQL truyền dữ liệu plaintext (mặc định không TLS) – dễ nghe lén.
  • Tấn công brute-force, exploit lỗ hổng MySQL.
  • Vi phạm nguyên tắc least privilege (ít đặc quyền nhất).

Tạo SSH Tunnel

Trên máy khách (local), chạy:

ssh -L 6666:localhost:3306 user@remoteserver.net
  • -L 6666:localhost:3306: Forward cổng local 6666 → localhost:3306 trên server (localhost ở đây nghĩa là trên server).
  • user@remoteserver.net: User SSH và địa chỉ server.
  • Port 6666 tuỳ chọn (tránh xung đột, >1024 không cần root).

Nhập mật khẩu SSH → tunnel thiết lập. Giữ terminal này mở.

Kết nối MySQL Client

Cấu hình client (DBeaver, MySQL Workbench, TablePlus, HeidiSQL, cli...):

  • Host: 127.0.0.1 (KHÔNG dùng localhost – một số client dùng socket file thay vì TCP).
  • Port: 6666 (cổng local đã forward).
  • User/Password: Tài khoản MySQL trên server từ xa.

Tùy chọn SSH hữu ích

Tùy chọnChức năng
-NKhông mở shell, chỉ forward port (gọn cho script/background)
-fChạy background sau khi xác thực
-CNén dữ liệu (hữu ích mạng chậm)
-o ServerAliveInterval=60Gửi keepalive 60s – tránh timeout firewall/NAT
-o ExitOnForwardFailure=yesThoát nếu không forward được port

Chạy nền (background) vĩnh viễn – systemd service

Tạo /etc/systemd/system/mysql-tunnel@.service:

[Unit]
Description=MySQL SSH Tunnel to %i
After=network.target

[Service]
User=youruser
ExecStart=/usr/bin/ssh -N -L 6666:localhost:3306 -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes user@%i
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Kích hoạt: systemctl enable --now mysql-tunnel@remoteserver.net

Bảo mật bổ sung

  • Dùng SSH Key thay mật khẩu (ssh-keygen, ssh-copy-id).
  • Giới hạn user SSH chỉ cho forwarding: Tạo user chỉ có shell /bin/false, thêm no-pty,no-X11-forwarding,permitopen="localhost:3306" trong ~/.ssh/authorized_keys.
  • Bật MySQL TLS/SSL (REQUIRE SSL cho user) – lớp bảo vệ thứ 2.
  • Firewall server: Chỉ cho SSH từ IP tin cậy, chặn 3306 từ ngoài.