开启防火墙iptable规则后,系统网络变慢

可能原因:iptables的conntrack表满了导致访问网站很慢
现象:突然发现访问网站很慢,服务器的cpu、内存和磁盘使用率都正常 ip_conntrack和ns_conntrack含义一样,只是在新旧版本上不同
分析过程及解决方案:查询/var/log/message日志发现有这样的记录“ip_conntrack table full dropping packet”。kernel 用 ip_conntrack 模块来记录 iptables 网络包的状态,并保存到 table 里(这个 table 在内存里),如果网络状况繁忙,比如高连接,高并发连接等会导致逐步占用这个 table 可用空间,一般这个 table 很大不容易占满并且可以自己清理,table 的记录会一直呆在 table 里占用空间直到源 IP 发一个 RST 包,但是如果出现被攻击、错误的网络配置、有问题的路由/路由器、有问题的网卡等情况的时候,就会导致源 IP 发的这个 RST 包收不到,这样就积累在 table 里,越积累越多直到占满,满了以后 iptables 就会丢包,出现外部无法连接服务器的情况。

解决方案:Iptables启动的是会在日志里提示当前的buckets和conntrack_max的值以及每条跟踪连接需要消耗多少内存:
也就是说304MB内存将支持1048576条跟踪连接记录,所以需要按照服务器的内存大小来配置合适的值。
永久修改ip_conntrack_max和hashsize

  1. 增大 ip_conntrack_max(设置为 2^20,默认值是 2^16=65536)
 # vi /etc/sysctl.conf
net.ipv4.ip_conntrack_max = 1048576
  1. 增大 hashsize (在i386架构上,HASHSIZE = CONNTRACK_MAX / 8)
 # vi /etc/modprobe.conf
options ip_conntrack hashsize=131072

然后重启 iptables 服务,在 messages中可以看到参数已生效:

#service iptables restart
# cat /proc/sys/net/nf_conntrack_max     定义连接追踪的最大值,建议按需调大此值;
# cat  /proc/net/nf_conntrack                  记录了当前追踪的所有连接
# cat /proc/sys/net/netfilter/nf_conntrak_tcp_timeout_established   ESTABLISHED超时时长,默认时间比较长,建议调小此值。

nf_conntrack连接追踪的限制由/proc/sys/net/nf_conntrack_max文件控制,可以修改该文件或者/etc/sysctl.conf/etc/sysctl.conf。

# echo "65536" > /proc/sys/net/nf_conntrack_max 

可能原因二:缺少dns的相关规则

# iptables -I INPUT -p udp --sport 53 -j ACCEPT
# iptables -I INPUT -p tcp --sport 53 -j ACCEPT

原因三:路由问题https://support.huawei.com/enterprise/zh/knowledge/EKB1000059526

原因四:缺少相应的udp规则,比如有NFS的话,需要打开NFS相关的udp链接,否则NFS链接会占满,导致其他链接被中断,导致访问慢

https://www.liuyixiang.com/post/83843.html
https://www.haiyun.me/archives/iptables-conntrack-max.html
https://blog.51cto.com/jasonyong/280993
https://support.huawei.com/enterprise/zh/knowledge/EKB1000059526
https://www.docin.com/p-1065250766.html
https://www.163.com/dy/article/GE1TIRTL05373KLK.html
https://www.zsythink.net/archives/1493
https://www.cnblogs.com/yxh168/p/9676745.html
https://www.dandelioncloud.cn/article/details/1430922069444997121

要保存 iptables 规则以便在系统重新启动后仍然有效,您可以使用以下方法之一: 1. 使用 `iptables-save` 命令: ``` iptables-save > /path/to/save/file ``` 该命令将当前的 iptables 规则保存到指定的文件中。您可以将文件保存在任意位置,只需将 `/path/to/save/file` 替换为您希望保存的文件路径。请注意,此方法保存的是当前的 iptables 规则,如果在保存之后对规则进行了更改,需要再次运行该命令。 2. 编辑规则配置文件: 在某些 Linux 发行版中,iptables 规则可以通过编辑规则配置文件来保存。具体的配置文件路径可能因发行版而异,常见的路径包括 `/etc/sysconfig/iptables` 或 `/etc/iptables/rules.v4`。您可以使用文本编辑器打开该文件,并将规则复制粘贴到其中。然后保存文件并退出。请记住,在编辑配置文件之后,您需要重新加载 iptables 规则以使更改生效。 3. 使用 iptables-persistent(某些发行版): 某些 Linux 发行版提供了一个名为 iptables-persistent 的工具包,用于在系统重新启动后自动加载保存的 iptables 规则。您可以通过以下命令安装它: ``` sudo apt-get install iptables-persistent ``` 安装完成后,您可以使用 `iptables-save` 命令将规则保存到 `/etc/iptables/rules.v4` 文件中。然后,可以使用以下命令将规则加载到 iptables 中: ``` sudo iptables-restore < /etc/iptables/rules.v4 ``` 请根据您的操作系统和个人偏好选择适合您的方法来保存 iptables 规则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值