温馨提示×

centos iptables为何连接慢

小樊
45
2026-09-11 15:08:00
栏目: 智能运维

在 CentOS 上出现 iptables 相关连接慢(比如 SSH 登录慢、访问服务慢、curl 慢等),通常不是 iptables 本身“处理慢”,而是规则设计或系统配置导致额外延迟。常见原因如下:


一、最常见原因

1. DNS 反向解析导致慢(非常常见)

很多服务在连接时会做 reverse DNS

  • SSH(UseDNS yes
  • Apache / Nginx 日志
  • iptables 使用 -j LOG 或某些模块

如果 DNS 不通或慢,就会卡几秒。

✅ 检查 / 解决:

# SSH 登录慢
vim /etc/ssh/sshd_config
UseDNS no
GSSAPIAuthentication no

systemctl restart sshd

2. iptables 规则顺序不合理(逐条匹配)

iptables 是 顺序匹配,如果:

  • 规则很多(几百上千条)
  • 常用规则放在最后

每个包都要遍历,造成延迟。

✅ 优化方式:

  • 把高频允许规则放前面
  • 使用 ipset
  • 使用 multiport
  • 避免在大表中使用 -j LOG

3. 使用了 conntrack(连接跟踪)但表满了

CentOS 默认使用 state / ct 模块:

-m state --state ESTABLISHED,RELATED

如果:

  • 并发高
  • nf_conntrack_max 太小

会导致:

  • 新建连接卡
  • 丢包
  • 延迟增加

✅ 检查:

cat /proc/sys/net/netfilter/nf_conntrack_count
cat /proc/sys/net/netfilter/nf_conntrack_max

✅ 调优:

sysctl -w net.netfilter.nf_conntrack_max=524288
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=600

4. 防火墙规则中使用了 -j LOG

LOG 会写内核日志:

  • 非常慢
  • 高并发时严重影响性能

✅ 建议:

  • 少用或不用 LOG
  • 或限制日志频率

5. 使用了不必要的模块

如:

  • limit
  • string
  • owner
  • geoip

这些都会增加处理成本。


6. CentOS 7+ 实际用的是 firewalld

CentOS 7/8 默认是 firewalld → nftables / iptables

如果你:

  • 手动改 iptables
  • 又开着 firewalld

会造成冲突和延迟。

✅ 检查:

systemctl status firewalld

7. 网络本身问题(伪装成 iptables 慢)

  • 网关慢
  • DNS 慢
  • MTU 不匹配
  • 网卡 offload 异常

✅ 排查:

ping -c 5 8.8.8.8
ping -c 5 www.baidu.com

二、快速排查思路(推荐顺序)

  1. 关 DNS 反向解析(SSH / 服务)
  2. 看是否有 -j LOG
  3. 看 iptables 规则是否过多
  4. 看 conntrack 是否满
  5. 检查 firewalld 是否冲突
  6. tcpdump 看卡在哪一步

三、如果你愿意,我可以更精准帮你

你可以贴出:

  • CentOS 版本(cat /etc/redhat-release
  • iptables -L -n -v
  • 是什么连接慢(SSH?Web?数据库?)
  • 是否高并发

我可以直接帮你指出是哪一条规则在拖慢连接

0