服务器 SSH 防暴力破解配置教程 —— fail2ban 实战

你有没有看过服务器日志?每天有成百上千条来自世界各地 IP 的登录尝试。这就是暴力破解。

好在有 fail2ban 这个工具,它可以监控登录日志,发现多次失败后自动封禁 IP。

安装 fail2ban

CentOS:

yum install epel-release -y
yum install fail2ban -y

Ubuntu:

sudo apt update
sudo apt install fail2ban -y

基础配置

创建配置文件:

vi /etc/fail2ban/jail.local

粘贴以下内容:

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
port = ssh
logpath = /var/log/secure
action = iptables[name=SSH, port=ssh, protocol=tcp]
  • bantime:封禁时长(秒),3600 = 1 小时
  • findtime:检测窗口(秒),600 = 10 分钟
  • maxretry:允许失败次数,5 次后封禁

启动 fail2ban

systemctl start fail2ban
systemctl enable fail2ban

查看封禁情况

fail2ban-client status
fail2ban-client status sshd

输出类似:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 6
|  |- Total failed: 1482
|- Actions
   |- Currently banned: 23
   |- Total banned: 156

手动解封 IP

fail2ban-client set sshd unbanip 103.151.228.100

建议配置

对于国内 IDC 环境,建议以下参数:

bantime = 86400
maxretry = 3
findtime = 600

一天(86400秒)内尝试 3 次就封,基本能挡住 99% 的扫描。

注意事项

  • 配置完记得先确认自己的 IP 在白名单里,别把自己封了
  • fail2ban 只是辅助防护,配合修改 SSH 端口(换成非常规端口)效果更好
  • 封禁记录在 /var/log/fail2ban.log,可以定期查看