Debian/Ubuntu 服务器安全加固指南:UFW 与 Fail2Ban 配置手册
本指南旨在帮助你快速构建服务器的基础防护体系,防止暴力破解并精细化管理端口访问。
基于最佳实践,以下是 Ubuntu/Debian 系统 一键安装和配置 UFW + Fail2Ban 的完整命令:
🔧 一键安装配置脚本
bash复制
#!/bin/bash
# ============================================
# UFW + Fail2Ban 一键安装配置脚本
# 适用于 Ubuntu/Debian 系统
# ============================================
set -e
echo "=========================================="
echo "开始安装和配置 UFW 防火墙与 Fail2Ban"
echo "=========================================="
# 1. 更新系统并安装软件
echo "[1/6] 安装 UFW 和 Fail2Ban..."
sudo apt update
sudo apt install -y ufw fail2ban
# 2. 配置 UFW 防火墙
echo "[2/6] 配置 UFW 防火墙规则..."
# 设置默认策略:拒绝所有入站,允许所有出站
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 允许 SSH (默认22端口,如果你修改了SSH端口请改成你的端口)
sudo ufw allow 22/tcp
# 允许 HTTP 和 HTTPS (如需Web服务)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 启用 UFW (会提示确认,自动回答yes)
sudo ufw --force enable
# 3. 配置 Fail2Ban 使用 UFW 作为封禁后端
echo "[3/6] 配置 Fail2Ban 使用 UFW 后端..."
# 创建默认配置文件,设置使用 ufw 作为 banaction
sudo tee /etc/fail2ban/jail.d/zz-defaults.conf > /dev/null << 'EOF'
[DEFAULT]
banaction = ufw
banaction_allports = ufw
backend = systemd
EOF
# 4. 配置 SSH 防护规则
echo "[4/6] 配置 SSH 暴力破解防护..."
sudo tee /etc/fail2ban/jail.d/sshd.local > /dev/null << 'EOF'
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
backend = systemd
maxretry = 3
findtime = 600
bantime = 3600
ignoreip = 127.0.0.1/8
EOF
# 5. 启动并启用服务
echo "[5/6] 启动服务并设置开机自启..."
sudo systemctl enable --now ufw
sudo systemctl enable --now fail2ban
# 6. 验证状态
echo "[6/6] 验证配置状态..."
echo ""
echo "=== UFW 状态 ==="
sudo ufw status verbose
echo ""
echo "=== Fail2Ban 状态 ==="
sudo systemctl status fail2ban --no-pager -l
echo ""
echo "=== SSHD Jail 状态 ==="
sudo fail2ban-client status sshd
echo ""
echo "=========================================="
echo "✅ 安装配置完成!"
echo "=========================================="
echo ""
echo "📋 常用命令:"
echo " 查看防火墙状态: sudo ufw status numbered"
echo " 查看封禁列表: sudo fail2ban-client status sshd"
echo " 手动解封IP: sudo fail2ban-client set sshd unbanip <IP>"
echo " 查看UFW规则: sudo ufw status verbose"
echo ""
echo "⚠️ 注意:如果你修改了SSH默认端口(22),请修改配置中的 port 值"
🚀 快速执行(复制粘贴即可)
如果你不想保存脚本,可以直接执行以下命令:
bash复制
# 安装软件
sudo apt update && sudo apt install -y ufw fail2ban
# 配置 UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw --force enable
# 配置 Fail2Ban 使用 UFW
sudo tee /etc/fail2ban/jail.d/zz-defaults.conf << 'EOF'
[DEFAULT]
banaction = ufw
banaction_allports = ufw
backend = systemd
EOF
# 配置 SSH 防护
sudo tee /etc/fail2ban/jail.d/sshd.local << 'EOF'
[sshd]
enabled = true
port = 22
filter = sshd
maxretry = 3
findtime = 600
bantime = 3600
ignoreip = 127.0.0.1/8
EOF
# 启动服务
sudo systemctl enable --now fail2ban
# 查看状态
sudo ufw status && sudo fail2ban-client status sshd
⚙️ 配置说明
表格
| 参数 | 值 | 说明 |
|---|---|---|
maxretry |
3 | 允许失败次数,超过则封禁 |
findtime |
600 | 检测时间窗口(秒),10分钟内 |
bantime |
3600 | 封禁时长(秒),封禁1小时 |
banaction |
ufw | 使用 UFW 防火墙封禁IP |
关键配置逻辑:
zz-defaults.conf文件名特意使用zz开头,确保在字母排序上覆盖默认配置- 如果你修改了 SSH 端口(如改为 2222),请将
port = 22改为port = 2222
📊 常用管理命令
bash复制
# 查看 UFW 规则(带编号)
sudo ufw status numbered
# 查看 Fail2Ban 封禁状态
sudo fail2ban-client status sshd
# 手动解封某个 IP
sudo fail2ban-client set sshd unbanip 192.168.1.100
# 查看当前被封禁的 IP 详细列表
sudo fail2ban-client status sshd | grep "Banned IP list"
# 重启 Fail2Ban 服务
sudo systemctl restart fail2ban
# 查看 Fail2Ban 日志
sudo tail -f /var/log/fail2ban.log
⚠️ 重要提醒
-
SSH 端口:如果你修改了 SSH 默认端口(22),务必将配置文件中的
port = 22改为你的实际端口,否则 Fail2Ban 不会生效 -
白名单设置:如需添加自己的 IP 到白名单,编辑
/etc/fail2ban/jail.d/sshd.local,在ignoreip中添加:
ini复制ignoreip = 127.0.0.1/8 你的公网IP -
测试前留后路:首次配置建议在服务器控制台(非SSH)操作,防止配置错误导致自己被锁在外面
-
永久封禁:如需永久封禁惯犯,可将
bantime设为-1
文章作者:Kaelen
文章链接:https://kaelen.top/archives/wei-ming-ming-wen-zhang-Nor0uKG9
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议,转载请注明出处!
评论