温馨提示×

centos iptables为何慢

小樊
38
2026-10-08 14:34:43
栏目: 智能运维

CentOS 下 iptables 变慢,通常不是“网络慢”,而是规则处理/查询慢或系统配置问题。下面按常见原因给你梳理,并给出排查和处理办法。


一、最常见原因

1. iptables 规则太多(尤其 filter 表)

  • 尤其是:
    • INPUT / FORWARD 链里几百、上千条规则
    • 大量 -s / -d 单 IP 规则
  • 每个包都要逐条匹配,规则越多越慢

✅ 查看规则数量:

iptables -L -n -v | wc -l

✅ 优化方式:

  • 合并 IP(用 ipset)
  • 用 multiport
  • 把常用允许规则放前面
  • 用 RETURN 提前退出

2. 使用了 ipset 但配置不当

  • ipset 用得好是加速,用得差是更慢
  • hash 类型不适合超大集合时也会慢

✅ 建议:

ipset list

确认集合大小是否合理


3. 启用了 conntrack(nf_conntrack)

  • CentOS 默认开启连接跟踪
  • 高并发时:
    • conntrack 表满
    • 新建连接变慢

✅ 查看:

dmesg | grep conntrack
cat /proc/sys/net/netfilter/nf_conntrack_count
cat /proc/sys/net/netfilter/nf_conntrack_max

✅ 优化:

sysctl -w net.netfilter.nf_conntrack_max=1000000

或在不需要跟踪的流量上:

iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK

4. DNS 反向解析导致 iptables -L 慢

你执行:

iptables -L

很慢,但:

iptables -L -n

很快

✅ 原因:

  • iptables 默认做 反向 DNS 解析

✅ 解决:

  • 永远用:
iptables -L -n

5. firewalld + iptables 混用

CentOS 7+ 默认是 firewalld
firewalld 底层还是 iptables,但:

  • 规则由 firewalld 动态生成
  • 容易规则爆炸

✅ 检查:

systemctl status firewalld

✅ 如果是纯服务器:

  • 可关闭 firewalld,直接用 iptables

6. 网卡 / 内核参数问题

  • net.ipv4.ip_forward
  • 网卡 offload 关闭
  • IRQ 不均衡

✅ 基础检查:

ethtool -k eth0

二、快速自查清单

# 规则是否过多
iptables -L -n -v | wc -l

# 是否反向解析
iptables -L -n

# conntrack 是否满
dmesg | grep conntrack

# firewalld 是否在
systemctl status firewalld

三、如果你能补充这些,我可以精确定位

  1. CentOS 版本(6 / 7 / 8?)
  2. 是 iptables 命令慢 还是 网络访问慢
  3. 规则大概多少条
  4. 是否高并发 / 服务器还是防火墙

你可以直接贴:

iptables -L -n | head -50

我帮你具体分析。

0 踩