内网穿透-iptables端口转发

  • A+
所属分类:安全文章

内网穿透-iptables端口转发

一位苦于信息安全的萌新小白帽
本实验仅用于信息防御教学,切勿用于它用途
公众号:XG小刚


iptables


iptables是unix/linux 系统自带的优秀且完全免费的基于包过滤的防火墙工具、它的功能十分强大、使用非常灵活、可以对流入、流出及流经服务器的数据包进行精细的控制。
既然是防火墙,那端口转发功能是必不可少的,但是需要高的操作权限

了解一下

iptables里面有很多类型的表tables,每个表实现的功能不一样。
内网穿透-iptables端口转发
raw表决定数据包是否被数据跟踪处理mangle表用来mangle数据包,可以改变不同的包及包头的内容nat表用于转换包的源地址和目的地址filter表是专门过滤包
查看当前iptables的nat表内的规则
-t nat指定看nat表,不用-t默认为filter表-L 列出表内所有规则,可以指定特定链-n 使输出中的IP地址和端口以数值的形式显示-v 输出详细化--line 显示出每条规则在相应链中的序号
iptables -t nat -nL --line
内网穿透-iptables端口转发
以看到NAT表有很多类型的链chain,每个链内有很多规则rule,不同的链代表的转发功能不一样
PREROUTING链的作用是在包刚刚到达防火墙时改变它的目的地址,是从外部连接过来时的转发OUTPUT链改变本地产生的包的目的地址,是本机连接时的转发POSTROUTING链在包就要离开防火墙之前改变其源地址

开启转发


想实现端口转发,必须编辑sysctl.conf配置文件开启内核转发,需要管理员权限
vim /etc/sysctl.conf
开启ipv4 forward
net.ipv4.ip_forward = 1
内网穿透-iptables端口转发
或者直接sysctl修改
sysctl -w net.ipv4.ip_forward=1
查看系统参数,显示配置则表示开启成功
sysctl -p
内网穿透-iptables端口转发

配置规则


我们想实现端口转发,主要是用nat表的上面三个链实现该功能
-t 指定配置表-A 链中添加规则-D 删除链中规则-C 修改链中规则-j target 决定符合条件的包到何处去,target模式很多

本机端口转发
REDIRECT模式是防火墙所在的机子内部转发包或流到另一个端口,也就是所有接收的包只转发给本地端口
它只能用在nat表的PREROUTING、OUTPUT链 ,并有一个--to-ports选项
1、不使用这个选项,目的端口不会被改变2、指定一个端口,如--to-ports 80803、指定端口范围,如--to-ports 8080-8090
通过PREROUTING链,将外网访问4444端口转发到本机6666端口,此时本机访问4444并不进行转发
iptables -t nat -A PREROUTING -p tcp --dport 4444 -j REDIRECT --to-ports 6666
内网穿透-iptables端口转发
通过OUTPUT链,将本机访问4444端口转发到本机6666端口,此时外网访问4444并不进行转发
iptables -t nat -A OUTPUT -p tcp --dport 4444 -j REDIRECT --to-ports 6666

分流
通过PREROUTING链,将192.168.10.0/24网段访问4444端口的包转发到本机6666端口,其他网段则正常访问4444端口
iptables -t nat -A PREROUTING -p tcp -s 192.168.10.0/24 --dport 4444 -j REDIRECT --to-ports 6666
内网穿透-iptables端口转发

远程端口转发
DNAT模式是用来做目的网络地址转换, 可以做某种类型地负载平衡。
只能用在nat表的PREROUTING和OUTPUT链,并且有一个--to-destination选项
指定要写入IP头的地址可以是一个ip范围192.168.10.141-192.168.10.151
SNAT模式用来源网络地址转换的,就是重写包的源IP地址。如果直接转发包的话,网络响应包上就不知道往哪儿发送应答,所以需要改为防火墙的地址。
只能用在nat表的POSTROUTING链,且有一个--to-source选项
1、单独的地址。2、一段连续的地址,如194.236.50.155-194.236.50.160,这样可以实现负载平衡。3、在指定-p tcp-p udp的前提下,可以指定源端口的范围,如194.236.50.155:1024-32000

场景:A主机192.168.10.1,B主机192.168.10.142,C主机192.168.10.6
实现A主机访问B的4444端口转发到C主机的6666端口

通过PREROUTING链,将A访问B的4444端口的包,转发到C的6666端口
iptables -t nat -A PREROUTING --dst 192.168.10.142 -p tcp --dport 4444 -j DNAT --to-destination 192.168.10.6:6666
通过POSTROUTING链,修改请求包的源IP,为B主机IP
iptables -t nat -A POSTROUTING --dst 192.168.10.6 -p tcp --dport 6666 -j SNAT --to-source 192.168.10.142
内网穿透-iptables端口转发
A主机访问B的4444端口,此时C主机的6666端口收到包,并显示是B发来的请求
但包里的Host并没有改变
内网穿透-iptables端口转发

分流
场景:A主机192.168.10.1,B主机192.168.10.142,C主机192.168.10.6,D主机192.168.10.7
实现A主机访问B的4444端口转发到C主机的6666端口,D主机访问则不进行转发(只对192.168.10.1来源IP有效,其他IP访问完全正常)

通过PREROUTING链,将源为192.168.10.1访问B的4444端口的包,转发到C的6666端口,其他的不管
iptables -t nat -A PREROUTING --source 192.168.10.1 -p tcp --dport 4444 -j DNAT --to-destination 192.168.10.6:6666
内网穿透-iptables端口转发

MASQUERADE模式和SNAT模式作用一样,区别就是它不需要指定--to-source ,而是动态获取IP地址的连接的。比如,拨号上网、DHCP连接时我们ip是会变的。
只能用于nat表的POSTROUTING链 ,有一个非必须--to-ports选项
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADEiptables -t nat -A POSTROUTING --dst 192.168.10.6 -p tcp --dport 6666 -j MASQUERADE

删除规则


查询列表后,-D 删除指定表的指定链上num的规则
iptables -t nat -D PREROUTING 2
内网穿透-iptables端口转发
关闭转发服务
service iptables stop



iptables防火墙不管是攻击还是防御都很好用
攻击时比如我们开了个端口,就设置只能我们的vps访问,其他ip则转发出去,不被友军利用;
防御时我的cs控制端口只能我访问,其他人访问则给转发出去,防止溯源。

本文始发于微信公众号(XG小刚):内网穿透-iptables端口转发

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: