fail2ban防护暴力破解SSH登录
暴力破解SSH是服务器最常见的安全威胁之一。
今天这篇文章会带着你一步步完成 fail2ban防护暴力破解SSH登录 的完整配置。
全文不假设你有任何运维基础,每个命令我都会说明它在做什么,你只需要照着复制粘贴就行。
检查系统环境与安装fail2ban
首先确认你使用的Linux发行版。
大部分教程都基于Ubuntu/Debian或CentOS。
下面给出两种主流系统的安装命令。
Ubuntu/Debian(使用apt):
sudo apt update
sudo apt install fail2ban -y
CentOS/RHEL(使用yum,需先安装EPEL):
sudo yum install epel-release -y
sudo yum install fail2ban -y
安装完成后,可以用 dpkg -l | grep fail2ban 或 rpm -qa | grep fail2ban 确认是否成功。
配置SSH保护的默认设置
fail2ban的配置文件在 /etc/fail2ban 目录下。重要的一条铁律:不要直接修改 jail.conf,而是创建一个 jail.local 文件,里面覆盖你需要的配置项。
这样做的好处是未来升级不会覆盖你的设置。
创建一个 jail.local(如果不存在):
sudo nano /etc/fail2ban/jail.local
写入以下内容(注意缩进,每行不要有多余空格):
[DEFAULT]
# 白名单设置,填入你信任的IP(可以填你当前的IP或公司出口IP),多个用空格分隔
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
# 封禁时间单位是秒,这里设为一小时(3600秒)
bantime = 3600
# 在指定时间(findtime)内失败达到 maxretry 次就封禁
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
ignoreip添加你信任的IP,避免自己把自己关在外。bantime是封禁时长;findtime是检测窗口(秒);maxretry是该窗口内允许的最大失败次数。[sshd]段专门对SSH服务生效。
如果你修改了SSH默认端口(比如改成2222),必须把 port 改为你实际用的端口号,否则fail2ban无法正确匹配。
启动服务并验证封锁效果
配置完成后,启动并启用fail2ban开机自启:
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
查看服务状态:
sudo systemctl status fail2ban
出现 active (running) 就说明运行正常。
现在模拟一次暴力破解(不要在线上服务器做,最好用一个测试环境):
- 从另一台机器(假设IP是
192.168.1.100)用错误密码多次尝试SSH登录你的服务器。 - 连续输错6次以上(超过上面设置的 maxretry=5)。
- 在服务器上输入:
sudo fail2ban-client status sshd
如果配置成功,你会看到类似输出:
Status for the jail: sshd
|- Filter
| |- Currently failed: 3
| |- Total failed: 8
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 192.168.1.100
Currently banned: 1 表示已成功封禁了一个IP。
你还可以通过查看系统日志确认:
sudo tail -f /var/log/fail2ban.log
里面会记录每次ban和unban的事件。
避坑指南:常见错误与白名单设置
错误1:忽略白名单,把自己锁在外面
这是最惨的坑。配置时一定要在 ignoreip 中加入你的当前IP(或VPN IP)。如果已经把自己封了,可以用VNC或云控制台里的“救援模式”进入系统,然后执行:
sudo fail2ban-client set sshd unbanip <你的IP>
错误2:修改了jail.conf而不是jail.local
系统更新会覆盖jail.conf,导致配置丢失。请始终使用 jail.local。
错误3:SSH端口不是22,但忘记修改 port 参数
如果SSH端口是2222,必须写 port = 2222,否则fail2ban监控的是22端口,永远不会触发封禁。
错误4:iptables或firewalld冲突
有些系统默认使用firewalld,而fail2ban默认调用iptables。建议统一为firewalld的rich rule。但更简单的做法是:保持默认的iptables,如果系统装了firewalld,执行 sudo systemctl stop firewalld && sudo systemctl disable firewalld。
额外高频问题解答
Q1:如何查看当前被封禁的所有IP?
sudo fail2ban-client banned
或针对特定jail:sudo fail2ban-client status sshd 看Banned IP list。
Q2:如何手动解封一个IP?
sudo fail2ban-client set sshd unbanip 192.168.1.100
Q3:可以设置永久封禁吗?
可以,将 bantime 设为负数(如 -1),或者设一个很大的值(如 31536000 代表一年)。不过建议先设一个合理时长,避免误封后解封困难。
Q4:fail2ban日志在哪里?
/var/log/fail2ban.log,可以用 tail -f 实时查看。
总结
fail2ban防护暴力破解SSH登录是提高服务器安全的基础操作。
你只需要按照上面步骤安装、配置jail.local、设置白名单和合理阈值,就能有效拦截大量暴力扫描。
最后别忘了用 fail2ban-client status sshd 确认封锁是否生效。
如果在配置过程中遇到其他问题,优先检查日志文件 /var/log/fail2ban.log,大部分异常都能在那里找到线索。