Cách sử dụng Reverse SSH Tunnel để cho phép kết nối bên ngoài tới PC

Nếu may mắn được nhà cung cấp dịch vụ Internet (ISP) cung cấp một địa chỉ IP chuyên dụng, người dùng có thể thiết lập máy chủ tại gia và dành sẵn nó cho Internet bằng cách thêm một vài quy tắc chuyển tiếp cổng (port forwarding) tới router. Nhưng nếu ISP buộc bạn chia sẻ IP đó với hàng xóm thì việc chuyển tiếp cổng sẽ chẳng giúp ích được gì. Các nhà cung cấp khác chỉ đơn giản là chặn các kết nối đến thông qua các quy tắc tường lửa.

Người dùng có thể vượt qua tất cả các hạn chế này với sự trợ giúp của máy chủ riêng ảo. Mọi thứ sẽ hoạt động dù có ít hơn 512MB RAM, vì tất cả những gì nó phải làm là chuyển hướng lưu lượng mạng. Nó không tiêu thụ nhiều RAM và CPU. Máy chủ sẽ nhận các kết nối đến và chuyển hướng tới máy tính thông qua “reverse SSH tunnel”. Bằng cách này bạn có thể thiết lập bất kỳ loại máy chủ tại gia nào, với một khoản chi phí rất nhỏ hàng tháng.

Hãy tưởng tượng bạn tạo một máy chủ NextCloud để upload hoặc đồng bộ hóa các file. Bạn sẽ bảo vệ được sự riêng tư cho file khi chúng nằm trên máy chủ gia đình của mình và nếu cần có thể mua ổ cứng 6TB để tăng thêm dung lượng lưu trữ. Hóa đơn tiền điện hàng tháng phải trả hàng tháng chưa đến $5/tháng (115.000VND) cho một máy chủ riêng ảo. Rẻ hơn so với hóa đơn hàng tháng cho một máy chủ có 6TB dung lượng.

Lưu ý: Cách này chỉ dùng để chuyển hướng lưu lượng mạng TCP. TCP được sử dụng bởi máy chủ web (cổng 80/tcp). UDP được sử dụng bởi một số (không phải tất cả) game server, ví dụ Counter Strike (cổng 27015/UDP). UDP tunneling cũng có khả năng, nhưng cần một số thủ thuật.

Windows 10 hiện đã có SSH client tích hợp

Không cần sử dụng PuTTY nữa để bắt đầu kết nối SSH nữa. Trong hướng dẫn này, ta sẽ sử dụng SSH client tích hợp sẵn để thiết lập tunnel. Hãy đọc bài viết: Cách cài đặt OpenSSH trên Windows 10 của Quản Trị Mạng để tìm hiểu thêm.

Chuẩn bị máy chủ riêng ảo để kết nối tunnel

Tạo một máy chủ riêng ảo với nhà cung cấp yêu thích. Điều quan trọng nhất là chọn vị trí máy chủ càng gần càng tốt để giảm thiểu độ trễ mạng. Cố gắng thiết lập máy chủ theo cách mà bạn có thể đăng nhập trực tiếp vào tài khoản root, tốt nhất là bằng một SSH key, vì nó an toàn hơn. Điều này là bắt buộc nếu muốn làm cho máy chủ "nghe" kết nối đến trên các cổng dưới 1024, còn được gọi là cổng đặc quyền.

Mở Command prompt (hoặc terminal nếu đang sử dụng Linux) và đăng nhập vào máy chủ thông qua SSH.

Chỉnh sửa cài đặt máy chủ OpenSSH:

nano /etc/ssh/sshd_config

Nếu không đăng nhập với quyền root mà với tư cách là người dùng thông thường, bạn sẽ cần sử dụng lệnh này để có thể lưu file:

sudo nano /etc/ssh/sshd_config

Cuộn xuống cho đến khi tìm thấy biến có tên là GatewayPorts. Dòng này có thể giống như sau:

#GatewayPorts no

Xóa # (để thay đổi nó từ một bình luận thành một phần của chương trình) và thay đổi dòng thành:

GatewayPorts yes

Nếu không thể tìm thấy dòng này, chỉ cần cuộn xuống cuối và tự thêm dòng:

GatewayPorts yes

Máy chủ riêng ảo

Nhấn Ctrl + X, sau đó nhấn y và cuối cùng là Enter để lưu file.

Load lại daemon SSH để nó chọn cài đặt mới.

systemctl reload ssh.service

Thoát khỏi phiên SSH.

exit

Cách thiết lập một Reverse SSH Tunnel

Các tham số lệnh giống nhau trên cả Linux, Windows và thậm chí BSD. Cú pháp chung là:

ssh -R remote_port:host:localport your_username@IP-of-server
  • remote_port yêu cầu máy chủ chuyển hướng các kết nối đến nó trên cổng đó.
  • host báo cho máy chủ biết địa chỉ IP mà kết nối sẽ được chuyển hướng đến. 127.0.0.1 sẽ được sử dụng ở đây để chuyển hướng đến máy tính của riêng người dùng.
  • localport hướng dẫn các gói dữ liệu sẽ được chuyển hướng đến cổng nào. Tại đây, người dùng nên đặt số cổng mà ứng dụng được cài đặt trên máy tính cục bộ đang “lắng nghe”.

Ví dụ, để chuyển tiếp tất cả các kết nối trên cổng 80 (đến máy chủ) và gửi chúng đến cổng 8080 trên máy tính cục bộ, lệnh sẽ là:

ssh -R 80:127.0.0.1:8080 root@203.0.113.1

Điều này giả định rằng bạn có một máy chủ web, như Apache hoặc Nginx, nghe trên cổng 8080 tại máy cục bộ. Nhưng nếu Apache/Nginx đang nghe trên cổng 80 mặc định, thì không có vấn đề gì khi sử dụng cùng một cổng hai lần trong lệnh trước đó (vì chúng đang đề cập đến cổng 80 trong một máy chủ khác).

ssh -R 80:127.0.0.1:80 root@203.0.113.1

Tại thời điểm này, nếu ai đó nhập địa chỉ IP của máy chủ riêng ảo của bạn vào thanh địa chỉ trên trình duyệt, kết nối của họ sẽ được chuyển hướng và xử lý bởi máy tính cục bộ của bạn.

Thiết lập một Reverse SSH Tunnel

Trong hình trên, một máy chủ web đơn giản cho Chrome đã được sử dụng để nghe trên cổng 8887 theo mặc định. Người dùng có thể tự thử thiết lập này bằng cách cài đặt ứng dụng và sau đó sử dụng lệnh, như trong hình.

Điều đáng nói là để giữ cho tunnel hoạt động, phiên SSH phải duy trì hoạt động. Để đóng tunnel, hãy nhập exit trong cửa sổ Terminal hoặc Command Prompt.

Như có thể thấy, không khó để tạo một reverse SSH tunnel, nhưng việc bảo mật một trang web thì khác. Vì vậy, nếu chọn thực hiện ý tưởng chẳng hạn như máy chủ NextCloud cục bộ, hãy cô lập nó ít nhất là trong một máy ảo. Bằng cách này, nếu trang web bị tấn công, ít nhất phần còn lại của hệ điều hành cũng sẽ không bị tổn hại.

Và một điều quan trọng nữa cần ghi nhớ là luôn luôn sao lưu những gì bạn không muốn có nguy cơ bị mất!

Chúc bạn thực hiện thành công!

Thứ Hai, 18/02/2019 08:02
51 👨 3.528
0 Bình luận
Sắp xếp theo