Linux端口转发(iptables)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux端口转发(iptables)相关的知识,希望对你有一定的参考价值。

参考技术A 当服务器迁移,因为DNS未同步或某些人使用ip访问,一些流量还是会流向老的服务器。

使用iptables及其伪装特性,将所有流量转发到老的服务器。 点击看iptables的介绍 。

本文假设没有运行的iptables,至少没有针对prerouting链和postrouting链的NAT表的转发规则。

1) 首先开启端口转发

# echo "1" > /proc/sys/net/ipv4/ip_forward

或sysctl net.ipv4.ip_forward=1

2) 增加端口转发

将端口1111上的流量转发到主机2.2.2.2 上的端口1111。

# iptables -t nat -A PREROUTING -p tcp        --dport 1111 -j DNAT --to-destination  2.2.2.2:1111

然后告诉IPtables伪装起来(masquerade)

# iptables -t nat -A POSTROUTING -j  MASQUERADE

仅仅重定向一个固定网络甚至是一台主机的流量

# iptables -t nat -A PREROUTING -s  192.168.1.1 -p tcp --dport 1111 -j DNAT        --to-destination 2.2.2.2:1111

仅仅重定向一个网段的流量

# iptables -t nat -A PREROUTING -s  192.168.1.0/24 -p tcp --dport 1111 -j DNAT  --to-destination 2.2.2.2:1111

这就可以进行Linux端口转发流量了。

查看转发规则 sudo iptables -t nat -nL

1) docker bridge模式

2) 安全方面,同主机上端口指定网卡ip上的流量转发

3) 端口转发到另外的服务器,见上边案例

4) snat场景

5) dnat场景,内网访问外网

https://www.debuntu.org/how-to-redirecting-network-traffic-to-a-new-ip-using-iptables/

iptables端口复用和端口转发

参考技术A 端口复用参考: 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服务

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、转发成功

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连接

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机器访问时

利用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端口

验证:

5、关闭复用

验证:

以上是关于Linux端口转发(iptables)的主要内容,如果未能解决你的问题,请参考以下文章

Linux端口转发(iptables)

Linux ftp端口修改与转发

iptables实现端口转发

bind() 可以将 IPTABLES 中配置的端口作为转发端口

Linux下使用Rinetd来实现端口转发

socat 端口转发工具,脚本一键安装配置