问题原因:nf_conntrack 表满,丢掉数据包
nf_conntrack 介绍
nf_conntrack是linux内核中的一个模块,用来追踪网络连接状态,与防火墙息息相关。
nf_conntrack 在系统里表现为一张哈希表,用来统计系统内的网络连接,当然这张表有大小限制,
解决方法:
1、临时解决方案-增大nf_conntrack表的大小
linux内核2.4.23之前:
查看系统当前已追踪的网络连接数值:
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count
查看当前配置的大小:
cat /proc/sys/net/ipv4/ip_conntrack_max cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
设置新的大小:
net.ipv4.netfilter.ip_conntrack_max = 655350 net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300 sysctl -p
linux内核2.4.23及以后:
查看系统当前已追踪的网络连接数值:
cat /proc/sys/net/netfilter/nf_conntrack_count
查看当前配置的大小:
cat /proc/sys/net/netfilter/nf_conntrack_max
cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
设置新的大小:
net.netfilter.nf_conntrack_max = 655350 net.netfilter.nf_conntrack_tcp_timeout_established = 300 sysctl -p
2、卸载 nf_conntrack 模块
查看已加载的 nf_conntrack 相关模块
lsmod | grep nf_conntrack
#关闭防火墙
service iptables stop
#卸载
modprobe -r nf_conntrack_ipv4 xt_state modprobe -r nf_conntrack
或者
rmmod nf_conntrack_ipv4 rmmod xt_state rmmod nf_conntrack
3、关闭特定端口网络连接状态追踪
加载 modprobe 模块
modprobe nf_conntrack xt_state
#例:
#filter表中加入 UNTRACKED
iptables -A INPUT -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT #在raw表中设置接口为不追踪 iptables -t raw -A PREROUTING -i lo -j NOTRACK iptables -t raw -A OUTPUT -o lo -j NOTRACK #并在filter表中加入UNTRACKED状态 iptables -A INPUT -i lo -p all -m state --state UNTRACKED -j ACCEPT iptables -A FORWARD -i lo -p all -m state --state UNTRACKED -j ACCEPT #web端口 iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK iptables -t raw -A OUTPUT -p tcp --sports 80 -j NOTRACK iptables -A INPUT -p tcp -i eth1 --dport 80 -m state --state UNTRACKED -j ACCEPT iptables -t raw -A PREROUTING -p tcp --dport 443 -j NOTRACK iptables -t raw -A OUTPUT -p tcp --sport 443 -j NOTRACK iptables -A INPUT -p tcp -i eth1 --dport 443 -m state --state UNTRACKED -j ACCEPT