- 透過 ssh and sshd 能夠轉移 TCP 通訊的傳輸
- 但是需要先瞭解難以理解且愚蠢的語法
- -L clientport:host:hostport
SSH tunneling (-L)
- 使用 telnet 作測試,先在 server 端安裝授限制的 telnet server
# 安裝 telnet server
[root@sc220469 ~]# yum install telnet-server -y
# 開啟 telnet 從 xinetd 的設定內
[root@sc220469 ~]# chkconfig telnet on
# 重新啟動 telnet
[root@sc220469 ~]# /etc/init.d/xinetd restart
# 檢查 port 23 有沒有開
[root@sc220469 ~]# netstat -tnulp | grep 23
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 10008/xinetd
# 本機連線測試
[root@sc220469 ~]# telnet localhost
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
Kernel 2.6.18-164.el5 on an i686
login:
Login incorrect
# 限制對外的網卡不能連線,只有(163.112.69.13)的可以連線
[root@sc220469 ~]# vim /etc/hosts.allow
in.telnetd:163.112.69.13:allow
in.telnetd:ALL:deny
- 從 163.112.69.183 機器設定指令,指定以 163.112.69.13 當跳板建立一個 tcp port 23 的 ssh tunnel 到 163.112.69.204 主機的 tcp 23 port ,在本機(163.112.69.183)則會產生一個 port 6023 連入到 163.112.69.204 的 port 23
mtchang@mtchang-work:~$ ssh -2 -N -f -L 6023:163.112.69.204:23 mtchang@163.112.69.13
# -2 這迫使ssh 使用2.0 版的協定。
# -N 不指出命令,而只有通道。如果忽略了 ssh 將初始化一個普通的連線會話。
# -f 使ssh在背景運行ssh。
# -L 以 localport:localhost:remoteport 的初始化一個本地通道。
- 在這個例子中,在163.112.69.183上的埠6023被指向遠端機器(163.112.69.13)的埠23。由於23 是用於 telnet 的,所以這將通過SSH 通道創建一個安全的 telnet 會話,並且指定這個連線會連到 163.112.69.204 port 23 。這可以用來隱藏許多不安全的TCP 協議如smtp, pop3, ftp 等。
- 檢查程序 ssh 應該會在背景被執行,如需刪除只能使用 kill PID 刪除
mtchang@mtchang-work:~$ ps auxw | grep 6023
mtchang 2440 0.0 0.0 5284 636 ? Ss 00:03 0:00
ssh -2 -N -f -L 6023:163.112.69.204:23 mtchang@163.112.69.13
- 檢查 163.112.69.183 是否產生 6023 的 tcp port
mtchang@mtchang-work:~$ netstat -tnulp | grep 23
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:6023 0.0.0.0:* LISTEN 2309/ssh
tcp6 0 0 ::1:6023 :::* LISTEN 2309/ssh
- 使用 telnet 連接本地的 locahost port 6023 做 ssh tunnel 測試
mtchang@mtchang-work:~$ telnet localhost 6023
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Red Hat Enterprise Linux Server release 5.4 (Tikanga)
Kernel 2.6.18-164.el5 on an i686
?in: mtchang
Password:
Last login: Mon Jan 25 07:53:35 from sc21369
[mtchang@sc220469 ~]$
- 在 163.112.69.204 的機器上可以看見如下的連線
[root@sc220469 ~]# netstat -tnula | grep 23
tcp 0 0 163.112.69.204:23 163.112.69.13:41151 ESTABLISHED 10395/in.telnetd: s
- 在跳板機器 163.112.69.13 可以看到如下的連線
[mtchang@code ~]$ netstat -tnula | grep 23
tcp 0 0 163.112.69.13:41151 163.112.69.204:23 ESTABLISHED
- 從 163.112.69.183 刪除 ssh tunnel
mtchang@mtchang-work:~$ ps axuw | grep ssh
mtchang 2440 0.0 0.0 5400 1032 ? Ss 00:03 0:00
ssh -2 -N -f -L 6023:163.112.69.204:23 mtchang@163.112.69.13
mtchang 2468 0.0 0.0 3056 788 pts/1 S+ 00:13 0:00 grep ssh
mtchang@mtchang-work:~$ kill 2440