SSH Tunneling: Truy Cập Dịch Vụ Nội Mạng Bằng Cổng Local

SSH Tunneling là một kỹ thuật chuyển tiếp cổng an toàn qua kênh SSH mã hóa. Nó cho phép bạn truy cập các dịch vụ mạng nội bộ một cách an toàn, ngay cả khi máy chủ của bạn có IP công cộng thay đổi hoặc các cổng cụ thể (như 9090) không được mở ra Internet. Đây là giải pháp lý tưởng khi bạn muốn truy cập một dịch vụ trên máy chủ (ví dụ: cổng 9090) mà không cần mở cổng đó ra ngoài. **Tình huống của bạn:** - Máy chủ VPS của bạn chỉ mở cổng 22 (SSH), còn cổng 9090 chứa dịch vụ API không được phép truy cập từ bên ngoài. - Bạn muốn truy cập dịch vụ này từ trình duyệt web trên máy tính cá nhân của mình tại `http://localhost:9090/docs`. **SSH Tunneling là giải pháp hoàn hảo! Không cần thay đổi cấu hình tường lửa, không cần mở cổng 9090 ra Internet.** **Ba loại SSH Tunnel (bạn chỉ cần loại đầu tiên)**
Loại Cú pháp lệnh Mục đích
Chuyển tiếp cổng local (Local Port Forwarding) ssh -L [cổng local]:[máy chủ đích]:[cổng đích] user@server Tình huống của bạn: Truy cập dịch vụ nội mạng từ máy tính cá nhân
Chuyển tiếp cổng remote (Remote) ssh -R ... Máy chủ truy cập dịch vụ trên máy tính của bạn (hướng ngược)
Chuyển tiếp cổng động (SOCKS proxy) ssh -D ... Proxy toàn cục (ví dụ: trình duyệt sử dụng SSH)
**Hướng dẫn chi tiết (Chuyển tiếp cổng local)**

1. Thực thi lệnh SSH Tunnel trên máy tính cá nhân

ssh -L 9090:localhost:9090 user@203.0.113.10

Giải thích:

  • -L 9090:localhost:9090: Chuyển tiếp cổng 9090 trên máy tính của bạn đến localhost:9090 trên máy chủ.
  • user@203.0.113.10: Địa chỉ IP công cộng của máy chủ của bạn (hãy thay thế bằng IP thực tế của bạn).
  • Bạn cũng có thể sử dụng tên miền hoặc IP nội bộ nếu truy cập qua một máy trung gian.

Sau khi thực thi, bạn sẽ đăng nhập vào shell của máy chủ. Hãy giữ terminal này mở để duy trì kết nối tunnel.

2. Truy cập dịch vụ từ trình duyệt web

Mở trình duyệt web và truy cập:

http://localhost:9090/docs

Đường đi của dữ liệu:

Trình duyệt web (local) → Cổng 9090 (local) → SSH Tunnel → Máy chủ (localhost:9090) → Ứng dụng Spring Boot

Tất cả dữ liệu được mã hóa qua SSH, vì vậy bạn có thể truy cập an toàn ngay cả khi cổng 9090 không được mở ra Internet!

Tips nâng cao

1. Chạy ở chế độ nền (không chiếm terminal)

ssh -fNL 9090:localhost:9090 user@203.0.113.10
  • -f: Chạy lệnh ở chế độ nền.
  • -N: Không thực thi lệnh từ xa, chỉ dùng để chuyển tiếp.
  • -L: Chỉ định chuyển tiếp cổng local.

2. Sử dụng khóa SSH (để không cần nhập mật khẩu)

ssh -i ~/.ssh/my_key.pem -L 9090:localhost:9090 user@203.0.113.10

Lệnh này sử dụng tệp khóa riêng (`my_key.pem`) để xác thực thay vì mật khẩu.

3. Chuyển tiếp đến các dịch vụ khác trên máy chủ

Ví dụ, để truy cập PostgreSQL trên máy chủ (cổng 5432):

ssh -L 5432:localhost:5432 user@203.0.113.10

Sau đó, bạn có thể kết nối đến cơ sở dữ liệu bằng địa chỉ `localhost:5432` từ máy tính của mình.

Lợi ích về bảo mật

  • Không cần mở cổng 9090: Cấu hình tường lửa chỉ cần cho phép cổng 22.
  • Giao tiếp được mã hóa: Ngăn chặn việc nghe trộm dữ liệu.
  • IP không cần cố định: Chỉ cần có thể SSH vào máy chủ, bạn đã có thể truy cập.

Lưu ý quan trọng

  • Dịch vụ trên máy chủ phải lắng nghe trên 127.0.0.1 hoặc 0.0.0.0 (không chỉ lắng nghe trên IP nội bộ như 203.0.113.10). Spring Boot mặc định lắng nghe trên 0.0.0.0, nên không có vấn đề gì.
  • Nếu Spring Boot chỉ lắng nghe trên 127.0.0.1, tunnel sẽ hoạt động. Nếu nó lắng nghe trên 203.0.113.10, bạn cần sử dụng lệnh sau:
    ssh -L 9090:203.0.113.10:9090 user@203.0.113.10

Tóm tắt

Hoạt động Lệnh
Tạo tunnel ssh -L 9090:localhost:9090 user@203.0.113.10
Truy cập từ local http://localhost:9090/...
Chạy ở chế độ nền ssh -fNL 9090:localhost:9090 user@203.0.113.10

Đây là phương pháp tốt nhất để phát triển, kiểm thử và truy cập tạm thời các dịch vụ mạng nội bộ!

Thẻ: ssh SSH Tunneling Port Forwarding Network Security linux

Đăng vào ngày 10 tháng 7 lúc 22:02