centos7 开启防火墙Iptables
一、Centos7安装iptables
参考:https://blog.csdn.net/weixin_34867823/article/details/116745327
二、Iptables操作命令
注意:规则链匹配顺序是从上向下,匹配到即执行该规则并停止继续匹配,所以先设置允许,再设置拒绝;命令执行后会立即生效。
1、启动/停止防火墙
#查看防火墙状态
service iptables status
#停止防火墙
service iptables stop
#启动防火墙
service iptables start
#重启防火墙
service iptables restart
2、查看iptables现有规则
iptables -L -n
3、删除规则
#清空所有默认规则 iptables -F #清空所有自定义规则 iptables -X #所有计数器归0 iptables -Z
#删除某条规则
查看到每个规则chain的序列号
iptables -L -n --line-number
删除INPUT的第三条已添加规则,这里3代表第几行规则
iptables -D OUTPUT 3
4、允许本地访问
#允许来自于lo接口的数据包(本地访问)
iptables -I INPUT -i lo -j ACCEPT
5、INPUT链路(访问入口限制)
#【按照实际需求配置】允许10.199.16.62访问本机tcp协议的2181端口 iptables -A INPUT -s 10.199.16.62 -p tcp --dport 2181 -j ACCEPT #【按照实际需求配置】允许192.168.1.0/24整个网段访问本机tcp协议的2181端口 iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 2181 -j ACCEPT #记录未符合上面规则的tcp包 /var/log/messages iptables -A INPUT -p tcp --dport 2181 -j LOG --log-prefix "[zk 2181]" #禁止所有服务器通过tcp协议访问2181端口 iptables -A INPUT -p tcp --dport 2181 -j DROP
6、OUTPUT链路(访问出口限制)
#【按照实际需求配置】当本机访问202.108.22.5地址时,会将记录打印在/var/log/messages中 iptables -I OUTPUT -d 202.108.22.5 -j LOG --log-prefix "Iptables-output: " --log-level 4 #【按照实际需求配置】当本机访问202.108.22.5地址时,请求包全部被拒绝 iptables -A OUTPUT -d 202.108.22.5 -j DROP
7、保存规则
#保存上述规则(不保存的话,重启防火墙就失效了)
service iptables save
三、案例记录
1、高并发下的防火墙响应问题
问题描述:
某系统的服务器开启了主机防火墙,主机防火墙开启后,系统会加载nf_conntrack跟踪表,在centos6.x 64位操作系统中的跟踪表的默认bukets为16384,最大TCP连接为65536,当并发过大时,防火墙跟踪表响应不及时,会直接dropping pakage。造成网络丢包,从而造成前端部分访问卡顿。
问题分析:
通过分析发现防火墙开启后在高并发情况下会有系统瓶颈。防火墙跟踪表响应不过来,会有丢包情况。并查询到相关优化参数(nf_conntrack_max),可解决丢包现象。
经测试系统配置了该项优化参数,也还是存在丢包。继续排查,发现防火墙跟踪表优化参数修改存在BUG,需要进一步修改防火墙加载顺序过程中参数。单纯通过修改nf_conntrack_max,防火墙重启并不会生效。原因如下:
我们分析iptables启动过程:
执行iptables start --->启动nf_conntrack模块 ---> 应用iptables策略。
执行iptables stop --->卸载nf_conntrack模块(sysctl的nf_conntrack 选项恢复默认值)--->停止iptables 进程
最后的解决方案:
执行iptables stop --->卸载nf_conntrack模块(sysctl的nf_conntrack 选项恢复默认值)--->停止iptables 进程
执行iptables start --->启动nf_conntrack模块 (加载/etc/sysctl中的配置)---> 应用iptables策略。
解决方法:
配置优化
#针对centos 6.x 16G内存 64bit系统配置参数:
vi /etc/sysctl.conf net.netfilter.nf_conntrack_max=524288 net.nf_conntrack_max=524288 #使参数生效 sysctl -p
修改防火墙启动加载过程
sed -ri 's/IPTABLES_SYSCTL_LOAD_LIST=.*/IPTABLES_SYSCTL_LOAD_LIST="net.nf_conntrack"/g' /etc/init.d/iptables 再重启防火墙 service iptables restart