问题原因: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