SSH Port Forwarding
Bài viết giới thiệu 3 loại SSH Port Forwarding: Local, Remote và Dynamic, giúp chuyển tiếp kết nối qua SSH server đến đích một cách an toàn. Nội dung bao gồm cú pháp, ví dụ thực tế như MySQL tunneling, SSH ngược, SOCKS proxy, và cách thiết lập để tối ưu hóa kết nối từ xa.
Các loại SSH Port Forwarding
SSH port forwarding là một kỹ thuật quan trọng để chuyển tiếp kết nối qua một máy chủ trung gian. Có 3 loại chính:
- Local Port Forwarding: Kết nối từ SSH client được chuyển tiếp qua SSH server, sau đó đến máy chủ hoặc dịch vụ đích.
- Remote Port Forwarding: Kết nối từ SSH server được chuyển tiếp qua SSH client, rồi đến đích.
- Dynamic Port Forwarding: Tương tự Local Port Forwarding, nhưng đích đến có thể thay đổi linh hoạt mà không cần định trước.
1. Local Port Forwarding
Local Port Forwarding cho phép chuyển tiếp kết nối từ máy tính của bạn (SSH client) qua SSH server đến đích cụ thể. Cú pháp:
ssh -L [local_port]:[remote_host]:[remote_port] username@[ssh_server]
- local_port: Cổng mở tại SSH client.
- remote_host:remote_port: Đích đến từ góc nhìn của SSH server.
Ví dụ:
- Máy A (SSH client):
192.168.1.101
- Máy B (SSH server):
172.16.0.111
- Máy X (Đích):
1.1.1.1
(chỉ cho phép kết nối từ máy B).
Thay vì kết nối thủ công qua từng bước, bạn có thể mở một socket tại máy A để truy cập trực tiếp máy X:
ssh -L 2222:1.1.1.1:22 [email protected]
Sau khi kết nối, một socket tại 127.0.0.1:2222
sẽ được mở trên máy A. Bạn có thể SSH đến máy X từ A qua socket này:
ssh [email protected] -p 2222
Ứng dụng thường gặp: MySQL Tunneling
Nếu máy B chạy MySQL trên cổng 3306
(chỉ chấp nhận kết nối nội bộ), bạn có thể dùng lệnh:
ssh -L 3307:localhost:3306 [email protected]
Sau đó, kết nối từ A đến MySQL trên B qua socket:
mysql -h 127.0.0.1 -P 3307 -uroot -p
Nếu muốn các máy khác trong cùng mạng LAN kết nối được MySQL qua máy A, thêm tùy chọn -g
:
ssh -L 3307:localhost:3306 -g [email protected]
Bây giờ, từ một máy khác trong LAN (IP: 192.168.1.102
), bạn có thể kết nối:
mysql -h 192.168.1.101 -P 3307 -uroot -p
2. Remote Port Forwarding
Remote Port Forwarding cho phép mở một cổng tại SSH server để chuyển tiếp kết nối từ server đó qua SSH client đến đích. Cú pháp:
ssh -R [remote_port]:[local_host]:[local_port] username@[ssh_server]
- remote_port: Cổng mở tại SSH server.
- local_host:local_port: Đích từ góc nhìn của SSH client.
Ví dụ:
- Máy A (SSH client):
192.168.1.101
(không thể kết nối trực tiếp từ máy B). - Máy B (SSH server):
172.16.0.111
- Máy B2:
172.16.0.112
(cùng mạng với máy B).
Mục tiêu: Cho phép máy B hoặc B2 kết nối ngược lại máy A. Thực hiện bằng cách mở kết nối SSH từ A lên B với tùy chọn -R
:
ssh -R 2222:localhost:22 [email protected]
Trên máy B, một socket sẽ được mở tại 0.0.0.0:2222
. Máy B có thể SSH ngược về máy A:
ssh root@localhost -p 2222
Để B2 cũng có thể kết nối, sửa tệp cấu hình /etc/ssh/sshd_config
của B:
GatewayPorts yes
Khởi động lại dịch vụ SSH trên B và kết nối lại từ A. Sau đó, từ B2, bạn có thể kết nối ngược về máy A:
ssh [email protected] -p 2222
3. Dynamic Port Forwarding
Dynamic Port Forwarding hoạt động như một SOCKS proxy. Kết nối SSH client qua SSH server để ra Internet hoặc đến các đích khác mà không cần định trước. Cú pháp:
ssh -D [local_port] username@[ssh_server]
Ví dụ:
ssh -D 2222 [email protected]
Sau khi kết nối, bạn có thể sử dụng proxy SOCKS để duyệt web an toàn. Ví dụ, cấu hình proxy trong trình duyệt Firefox để sử dụng cổng 127.0.0.1:2222
.
Để kiểm tra, truy cập www.ip2location.com để xác minh IP khi ra Internet.
Kết luận
SSH Port Forwarding là một công cụ mạnh mẽ và linh hoạt, cho phép bạn kết nối đến các dịch vụ từ xa một cách an toàn và thuận tiện. Việc sử dụng đúng loại forwarding tùy thuộc vào yêu cầu cụ thể của từng tình huống.
Comments ()