🛡️ UFW 进阶配置
配置文件详解
UFW 的规则都存储在几个文本文件里,理解它们能帮你排查问题:
bash
# UFW 核心配置文件
/etc/ufw/ufw.conf # 主配置(是否启用、默认策略)
/etc/ufw/user.rules # IPv4 用户自定义规则
/etc/ufw/user6.rules # IPv6 用户自定义规则
/etc/ufw/ufw.before.rules # 在用户规则之前加载(高级用法)
/etc/ufw/ufw.after.rules # 在用户规则之后加载
# 查看当前规则(原始格式)
cat /etc/ufw/user.rules
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
-A ufw-before-input -p tcp --dport 22 -j ACCEPT
-A ufw-before-input -p tcp --dport 80 -j ACCEPT
...
# 直接编辑规则文件(编辑后重启 UFW)
nano /etc/ufw/user.rules
ufw disable && ufw enable⚠️ 注意: ⚠️ 注意:不建议直接用ufw allow 22/tcp开放 SSH 后就把 UFW 对所有 IP 开放。生产环境应该限制来源 IP:ufw allow from 10.0.0.0/8 to any port 22。
速率限制防暴力破解
bash
# UFW 内置速率限制功能(比手动配置 iptables 简单得多)
ufw limit 22/tcp
# 同一 IP 在 30 秒内最多 6 次新连接,超过就拒绝
# 验证速率限制生效
ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
To Action From
-- ------ ----
22/tcp LIMIT Anywhere
# 为不同服务设置不同的限制
ufw limit 22/tcp # SSH:30秒内6次
ufw limit 3306/tcp # MySQL:同样限制
# 配合 fail2ban 实现更精细的防护
apt install fail2ban
cat > /etc/fail2ban/jail.local << 'EOF'
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
EOF
systemctl restart fail2ban日志监控
bash
# UFW 日志级别:off, low, medium, high, full
ufw logging medium
# 查看 UFW 日志
tail -f /var/log/ufw.log
# 分析被拒绝的连接
grep "BLOCK" /var/log/ufw.log | \
awk '{print $NF}' | sort | uniq -c | sort -rn | head -10
# 清空日志(日志太大时)
> /var/log/ufw.log
# 关闭日志(不推荐,但能减少磁盘 IO)
ufw logging off