优化 Debian 下的 iptables,通常可以从规则结构、性能、安全性、可维护性几个方面入手。下面按“实用优先”的方式给你一套优化思路。
Debian 10+ 默认可能使用 nftables:
systemctl stop nftables
systemctl disable nftables
否则重启规则会丢:
apt update
apt install iptables iptables-persistent
保存规则:
iptables-save > /etc/iptables/rules.v4
raw / mangle / filter 分层一般只动这三张表:
raw:尽早处理(NOTRACK)mangle:修改包属性filter:真正过滤(最常用)示例:跳过已建立连接跟踪(性能优化)
iptables -t raw -A PREROUTING -p tcp -m state --state ESTABLISHED,RELATED -j NOTRACK
把最常见、允许的流量放在前面:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
否则每条包都要匹配到后面,CPU 浪费。
conntrack 而不是复杂规则-m state --state ESTABLISHED,RELATED
比逐端口判断快得多。
ipset(强烈推荐)不要把几百个 IP 写进 iptables:
apt install ipset
ipset create blacklist hash:ip
ipset add blacklist 1.2.3.4
iptables -A INPUT -m set --match-set blacklist src -j DROP
✅ 规则数量不变,性能极高
iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
或用 recent:
iptables -A INPUT -p tcp --dport 22 -m recent --set
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 -j DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -f -j DROP
iptables -N SSH_RULE
iptables -A INPUT -p tcp --dport 22 -j SSH_RULE
iptables -A SSH_RULE -s 10.0.0.0/8 -j ACCEPT
iptables -A SSH_RULE -j DROP
iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: "
iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables-save > /etc/iptables/rules.v4
如果你愿意,可以:
iptables -L -n -v我可以直接帮你量身优化规则。