CentOS7上安装 Fail2Ban防SSH爆破


Fail2ban 是一个免费的开放源代码且广泛使用的入侵防御工具,它可以扫描日志文件中的 IP 地址,这些 IP 地址显示出恶意迹象,例如密码失败过多等等,并禁止它们(更新防火墙规则以拒绝IP地址)。默认情况下,它附带用于各种服务的过滤器,包括 sshd 。

防火墙iptables必须开启,否则防护不生效

安装 Fail2ban

  1. #fail2ban 软件包不在官方存储库中,但在 EPEL 存储库中可用
  2. yum install -y epel-release
  3. #通过运行以下命令来安装 Fail2ban 软件包
  4. yum install -y fail2ban

配置 Fail2ban 保护 SSH

fail2ban目录结构

/etc/fail2ban/ 配置文件目录
/etc/fail2ban/jail.conf fail2ban服务器的全局配置文件(不建议直接修改此文件,因为将来在升级程序包时可能会覆盖或改进该文件)
/etc/fail2ban/action.d/ 达到阈值之后的执行Fail2Ban的动作的配置文件
/etc/fail2ban/filter.d/ 过滤器存储目录
/etc/fail2ban/filter.d/sshd.conf sshd 的过滤器文件
/var/log/fail2ban.log Fail2Ban日志文件

Fail2ban 配置

配置时建议在 /etc/fail2ban/jail.d/ 目录下的 jail.local 文件或单独的 .conf 文件中创建和添加配置。 请注意,在 jail.local 中设置的配置参数将覆盖 jail.conf 中定义的任何参数。

对于本文,我们将在 /etc/fail2ban/ 目录中创建一个名为 jail.local 的单独文件,如下所示。

  1. $ echo '
  2. [DEFAULT]
  3. ignoreip = 192.168.56.2/24
  4. bantime = 21600
  5. findtime = 300
  6. maxretry = 3
  7. banaction = iptables-multiport
  8. backend = systemd
  9. [sshd]
  10. enabled = true
  11. port = 5022
  12. ' > /etc/fail2ban/jail.local

配置的解释

ignoreip :指定不禁止的 IP 地址或主机名列表,多个IP地址时应使用空格或逗号分隔。
bantime :指定禁止主机的秒数(即有效禁止持续时间)。
maxretry :指定禁止主机之前的故障数。
findtime :fail2ban 将禁止主机,如果主机在最后一个“ findtime ”秒内生成了“ maxretry ”。
banaction:禁止行动,默认指定为iptables防火墙。使用firewalld防火墙时将 “banaction = iptables-multiport”改成 “banaction = firewallcmd-new”
backend :指定用于修改日志文件的后端。
[sshd]中enabled = true:fail2ban 配置为保护 sshd
port=5022: ssh端口有修改的需要在这里指定修改后的端口,否则防火墙规则失效(解决方法:1.停止服务fail2ban-client stop 2.清空防火墙规则iptables -F 3.设置防火墙放通所需端口 4.修改配置文件指定正确ssh端口 5.启动服务fail2ban-client start)。

上述配置意味着,如果IP在最近 5 分钟内发生3次故障,则将其禁止 6 个小时,并忽略 IP 地址 192.168.56.2

启用 fail2ban 服务

  1. $ systemctl start fail2ban
  2. $ systemctl enable fail2ban
  3. $ systemctl status fail2ban

fail2ban-client reload 修改了配置需要重新加载生效

使用 fail2ban-client 监视失败和禁止的 IP 地址

  1. start 启动服务端和所有监禁(jail)。
  2. reload 重载所有配置。
  3. reload <JAIL> 重载指定的监禁(jail)配置。
  4. stop 停止服务端和所有监禁(jail),当Fail2ban服务交由"systemctl"托管时,使用该命令将会导致服务端重启。
  5. status 获取当前监禁(jail)的运行状态。

查看 fail2ban 服务的当前状态
fail2ban-client status
检查 Fail2ban 监狱状态,要监视 sshd 监狱,请运行
fail2ban-client status sshd

  1. [root@hostname]# fail2ban-client status sshd
  2. Status for the jail: ssh-iptables
  3. |- Filter
  4. | |- Currently failed: 0 # 当前失败次数
  5. | |- Total failed: 3 # 总失败次数
  6. | `- File list: /var/log/secure # 日志文件路径列表
  7. `- Actions
  8. |- Currently banned: 1 # 当前禁止访问的IP数量
  9. |- Total banned: 1 # 禁止IP总数
  10. `- Banned IP list: 192.168.1.77 # 被禁IP列表

在 fail2ban(在所有监狱和数据库)中取消禁止 IP 地址
fail2ban-client unban 192.168.56.1

set idle on|off 设置某个监控(监狱)的状态。
set addignoreip 设置某个监控(监狱)可以忽略的ip
set delignoreip 删除某个监控(监狱)可以忽略的ip
set banip 将ip加入 监控(监狱)
set unbanip 将ip从监控(监狱)移除
示例:fail2ban-client set sshd banip 192.168.1.77

参考文章:
Fail2ban防暴力破解
如何在CentOS / RHEL 8上安装Fail2Ban保护SSH
Fail2Ban官方文档


local 2021年8月30日 00:41 收藏文档