Fail2Ban 最流行的自动化封禁工具

  • 原理:监控日志文件(如 /var/log/auth.log),通过正则表达式匹配非法行为(如 SSH 登录失败),触发封禁规则。

  • 功能

    • 支持多种服务(SSH、Apache、Nginx、MySQL 等)。

    • 可自定义封禁时间(如 10 分钟或永久)。

    • 支持联动防火墙(iptables/nftables/ufw)。

  • 安装

    sudo apt update
    sudo apt install fail2ban
  • 配置

    • 主配置文件:/etc/fail2ban/jail.conf(建议复制为 jail.local 并修改)。

    • 示例封禁 SSH 的配置:

      [sshd]
      enabled = true
      maxretry = 3     # 3 次失败后封禁
      bantime = 1h     # 封禁 1 小时

验证封禁是否生效:

# 查看 iptables/nftables 规则
sudo iptables -L -n
sudo nft list ruleset
​
# 查看 fail2ban 状态
sudo fail2ban-client status sshd

1. 安装 Fail2Ban

# 更新软件包列表
sudo apt update
​
# 安装 Fail2Ban
sudo apt install fail2ban -y
​
# 启动 Fail2Ban 并设置开机自启
sudo systemctl start fail2ban
sudo systemctl enable fail2ban

2. 基本配置

Fail2Ban 的主要配置文件位于 /etc/fail2ban/,建议不要直接修改 jail.conf,而是创建 jail.local 进行覆盖:

# 复制默认配置文件
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

编辑 jail.local

sudo nano /etc/fail2ban/jail.local

常用配置选项

[DEFAULT]
# 封禁时间(默认 10 分钟)
bantime = 1h      # 1 小时
# 最大失败尝试次数
maxretry = 3      # 3 次失败后封禁
# 查找日志的时间窗口(秒)
findtime = 10m    # 10 分钟内失败 3 次才封禁
# 封禁方式(默认 iptables)
banaction = iptables-multiport
# 是否启用 IPv6
banaction_allports = iptables-allports

启用 SSH 防护(默认已启用)

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 3
bantime = 1h

启用 Nginx 防护(防暴力破解)

[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log

启用 MySQL 防护

[mysqld-auth]
enabled = true
port = 3306
logpath = /var/log/mysql/error.log

3. 重启 Fail2Ban 使配置生效

sudo systemctl restart fail2ban

4. 检查 Fail2Ban 状态

查看所有 jail 状态

sudo fail2ban-client status

查看 SSH jail 状态

sudo fail2ban-client status sshd

查看被封禁的 IP

sudo fail2ban-client banned

手动封禁/解封 IP

# 封禁 IP
sudo fail2ban-client set sshd banip 192.168.1.100
​
# 解封 IP
sudo fail2ban-client set sshd unbanip 192.168.1.100

5. 日志监控

Fail2Ban 日志位于:

sudo tail -f /var/log/fail2ban.log

如果发现攻击,日志会显示类似:

2023-10-01 12:34:56 fail2ban.actions [1234]: NOTICE [sshd] Ban 192.168.1.100

6. 高级配置(可选)

自定义过滤规则

Fail2Ban 使用正则表达式匹配日志,可以在 /etc/fail2ban/filter.d/ 下自定义规则:

sudo nano /etc/fail2ban/filter.d/custom-ssh.conf

示例:

[Definition]
failregex = ^.*Failed password for .* from <HOST>.*$
ignoreregex =

使用 UFW 代替 iptables

如果使用 ufw(Ubuntu 默认防火墙),可以修改 banaction

[DEFAULT]
banaction = ufw

7. 卸载 Fail2Ban

sudo apt remove fail2ban --purge
sudo rm -rf /etc/fail2ban/

总结

步骤

操作

安装

sudo apt install fail2ban

配置

/etc/fail2ban/jail.local

启动

sudo systemctl restart fail2ban

查看状态

sudo fail2ban-client status

封禁 IP

sudo fail2ban-client set sshd banip <IP>

解封 IP

sudo fail2ban-client set sshd unbanip <IP>

Fail2Ban 是 Ubuntu Server 上最常用的自动封禁工具,适用于 SSH、Nginx、MySQL、FTP 等服务的防护。配置完成后,可以大幅减少暴力破解攻击的风险。🚀



Fail2Ban 最流行的自动化封禁工具
https://halo.jiangling.site/archives/fail2ban
作者
你的降灵
发布于
2025年07月19日
许可协议