Debian/Ubuntu 服务器安全加固指南:UFW 与 Fail2Ban 配置手册

三月 07, 2026 / Kaelen / 46阅读 / 0评论

本指南旨在帮助你快速构建服务器的基础防护体系,防止暴力破解并精细化管理端口访问。

基于最佳实践,以下是 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

⚠️ 重要提醒

  1. SSH 端口:如果你修改了 SSH 默认端口(22),务必将配置文件中的 port = 22 改为你的实际端口,否则 Fail2Ban 不会生效

  2. 白名单设置:如需添加自己的 IP 到白名单,编辑 /etc/fail2ban/jail.d/sshd.local,在 ignoreip 中添加:
    ini复制

    ignoreip = 127.0.0.1/8 你的公网IP
    
  3. 测试前留后路:首次配置建议在服务器控制台(非SSH)操作,防止配置错误导致自己被锁在外面

  4. 永久封禁:如需永久封禁惯犯,可将 bantime 设为 -1

文章作者:Kaelen

文章链接:https://kaelen.top/archives/wei-ming-ming-wen-zhang-Nor0uKG9

版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议,转载请注明出处!


评论