防火墙产生丢包?

nf_conntrack: table full, dropping packet 解决方案

一、概述

​ nf_conntrack一般存放在/proc/net目录下,当防火墙关闭时,这个目录不会出现。防火墙打开后,nf_conntrack出现在/proc/net目录下面。

查看nf_conntrack(nf_conntrack为防火墙记录用户连接的状态连接表)

cat nf_conntrack
ipv4     2 tcp      6 86 TIME_WAIT src=10.16.104.60 dst=10.0.32.107 sport=36226 dport=22 src=10.0.32.107 dst=10.16.104.60 sport=22 dport=36226 [ASSURED] mark=0 zone=0 use=2

二、解决方案

1、关闭防火墙

systemd stop iptables
systemd disable iptables

切记:在防火墙关闭状态下,不要通过iptables指令(比如 iptables -nL)来查看当前状态!因为这样会导致防火墙被启动,而且规则为空。虽然不会有任何拦截效果,但所有连接状态都会被记录,浪费资源且影响性能 并可能导致防火墙主动丢包!

2、内核参数优化
2.1、状态跟踪表

理论最大值 CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (ARCH / 32)

以64G的操作系统为例,CONNTRACK_MAX = 6410241024*1024/16384/2 = 2097152

sysctl –w net.netfilter.nf_conntrack_max = 2097152
2.2、哈希表

哈希表大小通常为总表的1/8,最大为1/2。

CONNTRACK_BUCKETS = CONNTRACK_MAX / 8

同样以64G的操作系统,哈希最佳范围是 262144 ~ 1048576 。

运行状态中通过 sysctl net.netfilter.nf_conntrack_buckets 进行查看,通过文件 /sys/module/nf_conntrack/parameters/hashsize 进行设置。

或者新建 /etc/modprobe.d/iptables.conf ,重新加载模块才生效:

options nf_conntrack hashsize = 262144
2.3、完整参数

net.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_established = 3600
3、使用裸表

添加“不跟踪”标识。如下示例更适合桌面系统或随意性强的服务器。因为它开启了连接的状态机制,方便和外部通信。

修改 /etc/sysconfig/iptables 文件:

#raw表
iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT
iptables -t raw -A PREROUTING -p tcp -m multiport --dport 80,81,82 -j NOTRACK
iptables -t raw -A PREROUTING -p tcp -m multiport --sport 80,81,82 -j NOTRACK
4、删除nf_conntrack模块

对所有连接都关闭跟踪,不跟踪任何连接状态。不过规则就限制比较严谨,进出都需要显式申明。

lsmod | grep nf_conntrack
modprobe -r xt_NOTRACK nf_conntrack_netbios_ns nf_conntrack_ipv4 xt_state
modprobe -r nf_conntrack



作者:Sonic_Ma
链接:https://www.jianshu.com/p/63a66bbd2e84
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值