软件防火墙之iptables自定义链chain

链管理类:

-N:new, 自定义一条新的规则链
-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除
-X:delete,删除自定义的空的规则链
-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:ACCEPT:接受, DROP:丢弃

范例:自定义一条新的规则链chain

[root@localhost ~]# iptables -N web_chain

范例:在nat表中自定义一条新的规则链

[root@localhost ~]# iptables -N web_chain -t nat

范例:删除自定义空的规则链

[root@localhost ~]# iptables -X web_chain -t nat

范例:重命名自定义链

[root@localhost ~]# iptables -E web_chain WEB_CHAIN

范例:添加一条规则到自定义链

[root@localhost ~]# iptables -A WEB_CHAIN -s 172.31.0.7 -p tcp -m multiport --dports 80,443 -j REJECT

范例:关联自定义链chain

[root@localhost ~]# iptables -A INPUT -s 172.31.0.0/16 -j WEB_CHAIN

范例:创建自定义链实现WEB的访问控制

[root@localhost ~]# iptables -N WEB_CHAIN
[root@localhost ~]# iptables -A INPUT -s 172.31.0.0/16 -j WEB_CHAIN
[root@localhost ~]# iptables -A WEB_CHAIN -p icmp -j ACCEPT
[root@localhost ~]# iptables -I WEB_CHAIN 2 -s 172.31.0.7 -j RETURN

# 效果如下:
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 30 packets, 1980 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  216 14308 WEB_CHAIN  all  --  *      *       172.31.0.0/16        0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 16 packets, 1568 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain WEB_CHAIN (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     tcp  --  *      *       172.31.0.7           0.0.0.0/0            multiport dports 80,443 reject-with icmp-port-unreachable
    0     0 RETURN     all  --  *      *       172.31.0.7           0.0.0.0/0           
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0 

范例: 删除自定义链3个步骤

#无法直接删除自定义链,删除自定议链和创建的顺序相反
[root@localhost ~]# iptables -X WEB_CHAIN
iptables: Too many links.

1)[root@localhost ~]# iptables -F WEB_CHAIN
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 6 packets, 428 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  350 23978 WEB_CHAIN  all  --  *      *       172.31.0.0/16        0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain OUTPUT (policy ACCEPT 4 packets, 464 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Chain WEB_CHAIN (1 references)
 pkts bytes target     prot opt in     out     source               destination

# 清空默认的表filter
2)[root@localhost ~]# iptables -F
3)[root@localhost ~]# iptables -X WEB_CHAIN
# 查看执行后的效果
[root@localhost ~]# iptables -vnL
Chain INPUT (policy ACCEPT 10 packets, 724 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 6 packets, 680 bytes)
 pkts bytes target     prot opt in     out     source               destination

规则优化最佳实践

1. 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条,效率更高
2. 谨慎放行入站的新请求
3. 有特殊目的限制访问功能,要在放行规则之前加以拒绝
4. 同类规则(访问同一应用,比如:http ),匹配范围小的放在前面,用于特殊处理
5. 不同类的规则(访问不同应用,一个是http,另一个是mysql ),匹配范围大的放在前面,效率更
高
6. 应该将那些可由一条规则能够描述的多个规则合并为一条,减少规则数量,提高检查效率
7. 设置默认策略,建议白名单(只放行特定连接)
     iptables -P,不建议,容易出现“自杀现象”
     规则的最后定义规则做为默认策略,推荐使用,放在最后一条

iptables保存规则

以上命令都是临时生效,持久保存规则需要如下操作:

方法一:

# 保存规则
[root@localhost ~]# iptables-save > /home/iptables.ruls

# 执行导入保存的规则
[root@localhost ~]# iptables-restore < /home/iptables.ruls

写入开机启动配置
[root@localhost ~]# vim /etc/rc.d/rc.local

iptables-restore < /home/iptables.ruls

# 加执行权限
[root@localhost ~]# chmod +x /etc/rc.d/rc.local

方法二:(CentOS7,8)

# 安装
[root@localhost ~]# yum install iptables-services

添加到配置文件里面
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables

启动
[root@localhost ~]# systemctl start iptables
设置开机启动
[root@localhost ~]# systemctl enable --now iptables
上一篇:【CF666D】Chain Reaction(暴搜+细节讨论)


下一篇:Leetcode-并查集相关题