iptables优化#
nf_conntrack: table full, dropping packet,这是使用iptables可能会出现的一个告警信息。nf_conntrack是用来记录连接条目的,NAT和iptables中的state模块都会用到这个,如果连接表满了就会出现告警信息。
比如默认安装iptables后的自动加上INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT这个条目,-m state表示会用四种状态:NEW,ESTABLISHED,RELATED 和INVALID
NEW说明这个包是第一个包。当使用UDP、TCP等协议时,发出的第一个包的状态就是“NEW”,它会被conntrack匹配
ESTABLISHED当你在使用TCP、UDP等协议时:假设你的主机发出的第一个包成功穿越防火墙,那么接下来你的主机发出和接收到的包的状态都是“ESTABLISHED”
RELATED,当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED的了。换句话说,一个连接要想 是RELATED的,首先要有一个ESTABLISHED的连接。这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是RELATED。
INVALID说明数据包不能被识别属于哪个连接或没有任何状态,这种包应该被丢弃。
在连接数不大的时候nf_conntrack表不大,使用 state模块或者NAT功能(虽然没有相关条目)没有问题,但是在大流量的生产环境中不要使用这个模块,这会造成系统的负载上升,出现上面的告警信息。需要在生产环境中做优化。
1、 关闭ipv6的iptables
chkconfig ip6tables off
service ip6tables stop
2、 在Iptables中使用标志位来识别ESTABLISHED链接,并删除所有state状态,配置NAT的条目
iptables -I INPUT -p tcp -m tcp -m multiport --dports 80,443,15533 -j ACCEPT
iptables -I INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
iptables -D INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
3、 移除内核nf_conntrack相关模块,禁用NAT功能,如果删除不了是因为在别的地方被调用了