Fail2ban 是 linux 服务器防暴力破解最常用有效的工具,通过监控日志、识别异常、自动封禁 IP 实现主动防护;安装需按系统选择 apt/dnf/yum 命令,配置应写入 jail.local 而非 jail.conf,ssh 防护需适配 logpath 和 port,启用后须重启并用 fail2ban-client 验证状态。

Fail2ban 是 Linux 服务器防暴力破解最常用、最有效的工具之一。它不靠堵端口或改配置来“绕开”攻击,而是主动监控日志、识别异常行为、自动封禁 IP,整个过程无需人工干预,且支持灵活调整策略。
安装 Fail2ban 要看系统类型
不同发行版命令略有差异,但核心就一条:用系统原生包管理器安装,不建议源码编译(除非有特殊需求)。
- ubuntu/debian:
sudo apt update && sudo apt install -y fail2ban - centos/RHEL/Rocky 8+:
sudo dnf install epel-release -y && sudo dnf install -y fail2ban - 旧版 CentOS 7:
sudo yum install epel-release -y && sudo yum install -y fail2ban
装完先启动并设为开机自启:sudo systemctl enable --now fail2ban
关键配置:用 jail.local 覆盖默认设置
不要直接改 /etc/fail2ban/jail.conf —— 它可能在升级时被覆盖。正确做法是创建 /etc/fail2ban/jail.local,只写你关心的改动。
例如,针对 SSH 防护,可写入:
[DEFAULT] ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 bantime = 1h findtime = 10m maxretry = 3 [sshd] enabled = true port = 22 filter = sshd logpath = /var/log/auth.log
说明:
-
ignoreip填你自己的可信网段或 IP,避免误封 -
logpath在 CentOS/Rocky 中应为/var/log/secure;Ubuntu/Debian 是/var/log/auth.log -
port若改过 SSH 端口(比如 2222),这里也要同步改成2222
确认生效与日常运维
配置完必须重启服务:sudo systemctl restart fail2ban
验证是否正常工作:
- 查服务状态:
sudo systemctl status fail2ban - 查 SSH 监狱状态:
sudo fail2ban-client status sshd(会显示当前封了多少 IP) - 看实时日志:
sudo journalctl -u fail2ban -f
如果某次测试误封了自己,可手动解封:sudo fail2ban-client set sshd unbanip 192.168.1.100
进阶防护建议(非必须但很实用)
单靠 Fail2ban 不等于绝对安全,搭配以下措施效果更稳:
- 关闭 root 直接 SSH 登录:
PermitRootLogin no写入/etc/ssh/sshd_config后sudo systemctl reload sshd - 改 SSH 默认端口(如设为 2222),能大幅减少扫描量
- 启用密钥登录 + 禁用密码登录,从根源杜绝弱口令风险
- 配合 firewalld 或 ufw 使用
banaction = firewallcmd-ipset,封禁更高效
Fail2ban 本身轻量、稳定、可扩展,只要日志路径对、规则启用了、服务跑着,它就在默默守门。