温馨提示×

centos iptables怎么优化

小樊
50
2026-09-08 17:09:44
栏目: 智能运维

在 CentOS(特别是使用 iptables 作为防火墙而非 firewalld 的场景)上优化 iptables,通常可以从规则结构、性能、内核参数、管理方法几个层面来做。下面按实用角度给你一套优化建议。


一、先确认使用模式(重要)

CentOS 7 默认是 firewalld,如果你用 iptables:

systemctl stop firewalld
systemctl disable firewalld
systemctl enable iptables
systemctl start iptables

确认版本:

iptables -V

二、规则结构优化(最重要)

1. 合理使用表顺序

  • raw → mangle → nat → filter
  • 大部分业务只需关注 filter 和 nat

2. 先放“高频匹配”规则

把最常见流量放在前面:

  • 已建立连接(ESTABLISHED)
  • 本机信任 IP
  • 常用服务端口

示例:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

三、连接跟踪优化(性能关键)

1. 放行已连接流量(必做)

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

2. 不需要 NAT 的流量跳过

如内部高性能服务:

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

⚠️ NOTRACK 会失去状态跟踪,仅适合可信网络


四、减少规则数量(提升匹配速度)

1. 使用 ipset(强烈推荐)

适用于:

  • 大量 IP 黑名单
  • 多端口、多网段
ipset create blacklist hash:ip
ipset add blacklist 1.2.3.4
iptables -A INPUT -m set --match-set blacklist src -j DROP

比成千上万条 iptables 规则快得多。


五、内核参数优化(配合 iptables)

编辑 /etc/sysctl.conf:

net.netfilter.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_tcp_timeout_established = 3600
net.ipv4.tcp_syncookies = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1

生效:

sysctl -p

查看连接跟踪:

cat /proc/net/nf_conntrack | wc -l

六、防攻击相关优化

1. 限制 SYN 攻击

iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP

2. 限制 Ping(可选)

iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

七、规则持久化(避免重启丢失)

CentOS 7:

yum install iptables-services
service iptables save

或手动:

iptables-save > /etc/sysconfig/iptables

八、管理建议(最佳实践)

  • ✅ 使用 iptables-restore 批量加载
  • ✅ 用脚本管理,避免手工逐条加
  • ❌ 不要放几百条单 IP DROP 规则
  • ✅ 定期审计规则数量

九、如果你愿意,我可以进一步帮你

你可以告诉我:

  1. CentOS 版本(6 / 7 / 8)
  2. 单机还是网关 / 负载均衡
  3. 主要业务(Web / DB / 内网)
  4. 当前 iptables 规则量

我可以直接帮你写一套优化后的 iptables 配置模板。

0 踩