在 Ubuntu (UBT) 系统上安装和使用 fail2ban
可以有效防止暴力破解攻击(如 SSH、FTP、Web 登录等)。以下是详细步骤:
1. 安装 fail2ban
sudo apt update
sudo apt install fail2ban
2. 基本配置
Fail2ban 的配置文件位于 /etc/fail2ban/
。不要直接修改 jail.conf
,而是创建本地副本 jail.local
:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
常用配置选项(在 [DEFAULT]
部分):
[DEFAULT]
# 禁止 IP 的持续时间(秒)
bantime = 1h
# 触发禁令的失败次数
maxretry = 3
# 检测时间窗口(秒)
findtime = 10m
# 邮件通知(需安装 sendmail)
destemail = your_email@example.com
sender = fail2ban@your_server
action = %(action_mwl)s # 邮件+封禁+记录日志
启用保护服务(示例:SSH):
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
3. 自定义规则
案例:保护 Nginx(防止暴力登录)
- 创建 Nginx 过滤规则文件:
sudo nano /etc/fail2ban/filter.d/nginx-login.conf
[Definition] failregex = ^ \[error\] \d+#\d+: \*\d+ user "(?:[^"]+|.*?)":? (?:password mismatch|was not found).*, client: <HOST> ignoreregex =
- 在
jail.local
中添加:[nginx-login] enabled = true port = http,https filter = nginx-login logpath = /var/log/nginx/error.log maxretry = 3
4. 管理 fail2ban 服务
# 启动服务
sudo systemctl start fail2ban
# 开机自启
sudo systemctl enable fail2ban
# 查看状态
sudo systemctl status fail2ban
# 重新加载配置(修改后必执行)
sudo fail2ban-client reload
5. 常用命令
# 查看所有监狱状态
sudo fail2ban-client status
# 查看具体监狱(如 sshd)状态
sudo fail2ban-client status sshd
# 手动封禁 IP
sudo fail2ban-client set sshd banip <IP>
# 解封 IP
sudo fail2ban-client set sshd unbanip <IP>
6. 验证是否生效
- 故意输错 SSH 密码(超过
maxretry
次)。 - 检查 IP 是否被封禁:
sudo iptables -L -n # 或使用 `nft list ruleset`(若用 nftables)
7. 高级配置
邮件通知
确保系统已安装邮件服务(如 sendmail
):
sudo apt install sendmail
配置 action
为邮件通知(见步骤 2)。
白名单 IP
在 jail.local
的 [DEFAULT]
部分添加:
ignoreip = 127.0.0.1/8 192.168.1.0/24
8. 日志位置
- Fail2ban 日志:
/var/log/fail2ban.log
- 被封禁记录:
grep "Ban" /var/log/fail2ban.log
注意事项
- 避免封禁自己:将常用 IP 加入
ignoreip
。 - 测试规则:使用
fail2ban-regex
测试过滤规则:sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
- 云服务器用户:若使用 AWS/Aliyun 等,需在安全组中同步封禁 IP(fail2ban 仅控制本地防火墙)。