iptables自定义链用法
实验架构
此实验实际上防火墙两边都需要是公网IP,并且在此实验中,防火墙充当一个路由器,只是添加了一些访问控制规则;外网用户访问内网的nginx服务; 1、vim /etc/sysctl.conf net.ipv4.ip_forward = 1 #防火墙开启路由器转发功能 2、sysctl -p
防火墙在此实验中只是起到了转发作用,所以报文都不是发送到防火墙本机的,规则需要在filter表的FORWARD链上添加 1、iptables -A FORWARD -j REJECT
#首先添加拒绝转发所有的报文,防止外网访问内网 2、iptables -I FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT #在forward链上插入规则,允许防火墙转发已经建立连接或与已有连接相关的连接的报文 3、iptables -I FORWARD 2 -d 192.168.39.100 -p tcp --dport 80 -j ACCEPT #允许防火墙转发访问192.168.39.100服务器TCP80端口的请求;这样在外网访问内网80端口时,第一次建立连接后,客户端已经与服务端80端口建立一次连接,响应报文就可以匹配第一条规则,允许转发已经建立连接的报文
把自定义规则添加到自定义链中,然后再把自定义链,链接到系统自带的5个链中; 关联自定义链类似于脚本中的函数引用,先定义好函数,然后再引用函数; 自定义链好处是把之前的多条规则整合成一条规则(实际规则数量并没有变,只是显示的更清晰一些),并且修改规则只需要修改自定义链即可; 1、iptables -E TO_LAN
#创建一个名为TO_LAN的自定义链 2、iptables -A TO_LAN -d 192.168.39.100 -p tcp --dport 80 -j ACCEPT #将此规则先从FORWARD链中删除,然后再把该规则添加到TO_LAN自定义链中 3、iptables -I FORWARD 2 -j TO_LAN #自定义链要想引用,需要把自定义链添关联到指定链中;即把自定义链插入成FORWARD链的第2条规则,这样就可以引用自定义链
iptables -E old_name new_name
1、iptables -D FORWARD 2 #删除自定义链时,先从引用自定义链的相关链中删除所引用的自定义链 2、iptables -F TO_LAN #然后清空自定义链中的所有规则 3、iptables -X TO_LAN #删除自定义空链;如果自定义链被引用或者自定义链中有规则,则无法删除自定义链