Những nội dung chính
• Khái niệm SSH tunnel: Hiểu SSH tunnel là gì và vai trò của nó trong việc tạo kết nối an toàn đến các dịch vụ mạng.
• Nguyên lý hoạt động: Nắm được cách SSH mã hóa dữ liệu và chuyển tiếp lưu lượng qua các cổng mạng.
• Phân loại SSH tunnel: Phân biệt các kiểu port forwarding phổ biến để áp dụng đúng cho từng tình huống.
SSH tunnel là gì?
SSH tunnel (hay còn gọi là đường hầm SSH) là một phương pháp tạo ra kênh giao tiếp được mã hóa giữa máy tính cục bộ và máy chủ từ xa, cho phép chuyển tiếp dữ liệu mạng qua kết nối SSH một cách an toàn. Kỹ thuật này thường được dùng để truy cập các dịch vụ như database, ứng dụng web nội bộ hoặc những dịch vụ không công khai ra Internet.
Một trong những lợi ích lớn của SSH tunnel là khả năng bảo vệ các giao thức vốn không có mã hóa mặc định như VNC hoặc FTP. Ngoài ra, nó còn hỗ trợ vượt qua firewall hoặc truy cập các tài nguyên bị giới hạn theo vị trí địa lý.
Về bản chất, SSH tunneling cho phép chuyển tiếp dữ liệu của bất kỳ cổng TCP nào thông qua một kênh SSH được bảo mật hoàn toàn.

SSH tunnel hoạt động như thế nào?
Về cơ bản, SSH tunnel vận hành bằng cách thiết lập một phiên SSH đã mã hóa, sau đó dùng phiên này làm “đường hầm” để truyền lưu lượng TCP giữa client và server. Quy trình hoạt động thường gồm các bước sau:
• Mã hóa dữ liệu trong phiên SSH: Khi kết nối SSH được thiết lập, toàn bộ dữ liệu truyền trong phiên này — bao gồm cả dữ liệu được forward — đều được mã hóa. Điều này giúp hạn chế nguy cơ nghe lén hoặc chỉnh sửa dữ liệu trong quá trình truyền tải, đặc biệt trên mạng công cộng.
• Thiết lập port forwarding: SSH cho phép ánh xạ cổng nguồn sang cổng đích theo ba mô hình phổ biến. Với local forwarding, cổng local trên client sẽ chuyển dữ liệu đến dịch vụ đích qua server SSH. Với remote forwarding, server SSH mở cổng và chuyển dữ liệu ngược về client. Còn dynamic forwarding sẽ tạo SOCKS proxy để định tuyến nhiều kết nối khác nhau.
• Tạo đường hầm TCP ảo: Sau khi cấu hình forwarding, ứng dụng chỉ cần kết nối tới cổng đã khai báo, chẳng hạn localhost:3307. SSH client sẽ nhận dữ liệu, đóng gói vào phiên SSH và gửi tới SSH server. Server sau đó giải mã rồi chuyển tiếp dữ liệu đến dịch vụ đích, ví dụ 127.0.0.1:3306.
Đối với ứng dụng, mọi thứ vẫn giống như truy cập trực tiếp dịch vụ gốc, nhưng thực tế toàn bộ lưu lượng đã được truyền qua một kênh bảo mật trung gian.
Các loại SSH tunnel phổ biến
Local Port Forwarding
Local port forwarding được dùng khi bạn muốn truy cập một dịch vụ nằm trên server hoặc trong mạng nội bộ của server thông qua một cổng trên máy local.
Bạn chỉ định một cổng local, sau đó mọi kết nối tới cổng này sẽ được SSH client mã hóa và gửi qua server, rồi tiếp tục chuyển đến dịch vụ đích.
Cú pháp cơ bản:
Trong đó:
-
LOCAL_PORT là cổng lắng nghe trên máy local
-
DESTINATION là địa chỉ máy đích
-
DESTINATION_PORT là cổng dịch vụ cần truy cập
Ví dụ thường gặp là truy cập MySQL nội bộ, web admin hoặc dịch vụ VNC chưa public ra Internet.
Remote Port Forwarding
Remote port forwarding hoạt động theo chiều ngược lại so với local forwarding. Thay vì mở cổng trên máy local, bạn yêu cầu SSH server mở một cổng để chuyển lưu lượng về máy client.
Cú pháp:
Trong đó:
-
REMOTE_PORT là cổng được mở trên server SSH
-
DESTINATION thường là localhost hoặc host mà client truy cập được
Kiểu forwarding này hữu ích khi bạn cần chia sẻ dịch vụ đang chạy trên máy cá nhân ra Internet thông qua một server trung gian, chẳng hạn demo ứng dụng web cho đồng nghiệp.
Dynamic Port Forwarding
Dynamic port forwarding tạo ra một SOCKS proxy trên máy local, cho phép nhiều kết nối tới nhiều đích khác nhau cùng sử dụng chung một SSH tunnel.
Khác với local hay remote forwarding, bạn không cần chỉ định sẵn host đích mà ứng dụng sẽ gửi thông tin qua giao thức SOCKS.
Cú pháp:
Trong đó:
-
LOCAL_PORT là cổng proxy SOCKS, thường dùng
1080
Sau khi tunnel được tạo, bạn chỉ cần cấu hình trình duyệt hoặc ứng dụng sử dụng SOCKS5 qua:
Dynamic forwarding thường được dùng trong các trường hợp:
• Duyệt web thông qua server SSH
• Truy cập dịch vụ giới hạn IP
• Bảo vệ lưu lượng khi dùng Wi-Fi công cộng