Skip to content

🎯 实战配置

Web 服务器防火墙模板

bash
#!/bin/bash
# Web 服务器 iptables 规则脚本

# 清空所有规则
iptables -F
iptables -t nat -F

# 先保持入站放行,等允许规则都加载成功后再改成 DROP
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许回环接口
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# 允许 SSH(限制来源 IP 更安全)
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT

# 允许 HTTP 和 HTTPS
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

# 允许 ICMP(ping)
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# 记录并丢弃其他所有
iptables -A INPUT -j LOG --log-prefix "Dropped: " --log-level 4
iptables -A INPUT -j DROP

# 最后再收紧默认策略,避免脚本中途失败导致远程 SSH 被锁死
iptables -P INPUT DROP

echo "防火墙规则已加载"

防暴力破解(SSH 限流)

bash
# 创建自定义链
iptables -N SSH_BRUTE

# 每个 IP 每分钟最多 4 次 SSH 连接尝试
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update \
  --seconds 60 --hitcount 4 --name SSH -j SSH_BRUTE

# 超限的直接丢弃
iptables -A SSH_BRUTE -j DROP

# 屏蔽特定恶意 IP
iptables -I INPUT -s 10.0.0.66 -j DROP

# 屏蔽整个 IP 段
iptables -I INPUT -s 10.0.0.0/16 -j DROP

防 SYN 洪泛攻击

bash
# 限制 SYN 包速率(每秒最多 1 个新连接)
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT

# 使用 connlimit 限制单 IP 并发连接数
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP

# 丢弃无效数据包
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

# 丢弃 XMAS 包和 NULL 包(扫描探测)
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP