在 CentOS(特别是使用 iptables 作为防火墙而非 firewalld 的场景)上优化 iptables,通常可以从规则结构、性能、内核参数、管理方法几个层面来做。下面按实用角度给你一套优化建议。
CentOS 7 默认是 firewalld,如果你用 iptables:
systemctl stop firewalld
systemctl disable firewalld
systemctl enable iptables
systemctl start iptables
确认版本:
iptables -V
raw → mangle → nat → filterfilter 和 nat把最常见流量放在前面:
示例:
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
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
如内部高性能服务:
iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
⚠️ NOTRACK 会失去状态跟踪,仅适合可信网络
适用于:
ipset create blacklist hash:ip
ipset add blacklist 1.2.3.4
iptables -A INPUT -m set --match-set blacklist src -j DROP
比成千上万条 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
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
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 批量加载你可以告诉我:
我可以直接帮你写一套优化后的 iptables 配置模板。