在 Ubuntu 上,使用 iptables 可以从网络层有效防范常见攻击(如 SYN Flood、端口扫描、暴力破解等)。下面按实用场景给你一套常见防护配置示例。
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
⚠️ 注意:
远程服务器操作前,一定要先放行 SSH,否则会断连!
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
✅ 建议:
fail2baniptables -N SYN_FLOOD
iptables -A INPUT -p tcp --syn -j SYN_FLOOD
iptables -A SYN_FLOOD -m limit --limit 1/s --limit-burst 3 -j RETURN
iptables -A SYN_FLOOD -j DROP
sysctl -w net.ipv4.tcp_syncookies=1
永久生效:
echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf
sysctl -p
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp -m state --state NEW -m limit --limit 10/s --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
含义:
60 秒内同一 IP 连接 SSH 超过 4 次就封掉
apt install fail2ban
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
或完全禁 ping:
iptables -A INPUT -p icmp -j DROP
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
iptables -A INPUT -p tcp --dport 80 -m hashlimit \
--hashlimit-above 100/sec --hashlimit-mode srcip --hashlimit-name http -j DROP
apt install iptables-persistent
netfilter-persistent save
netfilter-persistent reload
✅ 最小安全组合
如果你愿意,可以告诉我:
我可以给你 定制 iptables 规则脚本。