在 Ubuntu 上,使用 iptables 可以从网络层有效防御常见攻击(如 SYN Flood、端口扫描、暴力破解、DoS 等)。下面按实用场景给你一套可落地的配置示例。
# 默认策略:先拒绝所有
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
# 限制 SYN 包速率
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
# 丢弃异常 SYN
iptables -A INPUT -p tcp --syn -j DROP
或使用 SYN Cookies(推荐):
sysctl -w net.ipv4.tcp_syncookies=1
# 限制新连接速率(防止扫描)
iptables -A INPUT -p tcp -m state --state NEW -m recent --set
iptables -A INPUT -p tcp -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP
含义:60 秒内同一 IP 新建连接超过 10 次直接丢弃。
假设你使用 22 端口:
# 每分钟最多 3 次 SSH 新连接
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j DROP
✅ 更推荐方案:
# 限制 ping 速率
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
iptables -A INPUT -p udp -m limit --limit 10/s -j ACCEPT
iptables -A INPUT -p udp -j DROP
iptables -A INPUT -s 127.0.0.0/8 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 224.0.0.0/4 -j DROP
# 单 IP 最大 50 个连接
iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 50 -j DROP
Ubuntu 常用:
apt install iptables-persistent
netfilter-persistent save
或:
iptables-save > /etc/iptables.rules
✅ iptables + fail2ban + sysctl
iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -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 -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min -j ACCEPT
如果你愿意,可以告诉我:
我可以帮你定制一套 iptables 规则。