SSH端口转发技术详解
本地端口转发
通过-L
参数可将远程服务映射到本地端口。例如发现目标机(192.168.136.120)的8080端口运行着Python HTTP服务时,执行:
1
|
ssh -N -L 8081:127.0.0.1:8080 user@192.168.136.120
|
即可通过本机8081端口访问目标机的本地服务。
远程端口转发
当目标机SSH入站被阻时,使用-R
参数从目标机发起反向隧道:
1
|
ssh -N -R 8081:127.0.0.1:8080 tester@192.168.136.130
|
动态端口转发
通过-D
参数创建SOCKS代理(如1080端口),配合Proxychains实现内网扫描:
1
2
3
|
ssh -D 1080 user@192.168.136.120
sed -i 's/^socks4.*/socks5 127.0.0.1 1080/' /etc/proxychains4.conf
proxychains4 -q nmap -sT -Pn 10.10.10.128
|
SSH VPN搭建方案
当需要突破SOCKS代理的TCP限制时,可建立三层VPN隧道:
- 测试机配置:
1
2
3
|
ip tuntap add mode tun tun0
ip addr add 10.1.1.10/24 dev tun0
ip route add 10.10.10.0/24 via 10.1.1.10
|
- 目标机配置:
1
2
3
4
5
6
7
8
9
|
# 修改sshd_config
PermitTunnel yes
systemctl reload sshd
# 网络配置
ip tuntap add mode tun tun0
ip addr add 10.1.1.20/24 dev tun0
sysctl -w net.ipv4.conf.ens36.forwarding=1
iptables -t nat -A POSTROUTING -o ens36 -j MASQUERADE
|
- 建立隧道:
1
|
ssh -f -w 0:0 user@192.168.136.120 true
|
技术对比
方案类型 |
所需权限 |
支持协议 |
配置复杂度 |
端口转发 |
普通用户 |
TCP |
简单 |
SSH VPN |
root权限 |
全协议 |
复杂 |