Fail2ban 的安装和配置

   Updated: 2021-09-15 13:00       Fail2ban 的安装和配置无评论

关于 Fail2ban

Fail2ban 是 Linux 上的一个著名的入侵保护的开源框架。它通过监视相应服务的日志记录文件,匹配日志记录中的错误信息(正则式匹配),然后与系统的 iptables 联动执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽),比如:当有人在试探你的 HTTP、SSH、SMTP、FTP 密码,只要达到你预设的次数,Fail2ban 就会调用防火墙屏蔽这个 IP,并且可以发送 e-mail 通知系统管理员。

由于 Fail2ban 需要与系统的 iptables、firewalld 等联动来达到封禁 IP 的目的,本文以 iptables 为例,使用 firewalld 有少许不同。如果系统使用 firewalld ,也可以改为 iptables,需要禁用系统的 firewalld 服务,同时安装 iptables 服务(参考:CentOS7 安装和配置 iptables 防火墙)。

以下我们以在使用 iptables 的 CentOS 上安装和配置 Fail2ban 为例。

安装

sudo yum install epel-release #对于 CentOS 7 需要先安装 EPEL 库

sudo yum install fail2ban #安装 Fail2Ban

sudo systemctl enable fail2ban #设置 Fail2ban 开机自动启动

相关命令

  • sudo fail2ban-client status #查看 Fail2ban 的状态
  • sudo fail2ban-client version #查看 Fai2ban 的版本
  • sudo fail2ban-client ping #检查 Fail2ban 是否正常运行(正常将显示 pong
  • sudo systemctl start fail2ban #启动 Fail2ban
  • sudo systemctl stop fail2ban #停止 Fail2ban
  • sudo systemctl restart fail2ban #重启 Fail2ban
  • sudo tail -f /var/log/fail2ban.log #打开 Fail2ban 的日志监控
  • sudo iptables --list -n #显示系统当前 iptables
  • sudo iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP #解除封禁的 IP

Fail2ban 的工作方式

相关主要文件说明

  • /etc/fail2ban/jail.d/ :配置文件夹。用于定义错误次数、封禁时长、封禁动作等
  • /etc/fail2ban/filter.d/ :条件文件夹。内含默认文件,用于定义日志文件内容的过滤规则
  • /etc/fail2ban/action.d :动作文件夹。内含默认文件,用于 iptables 以及 mail 等动作配置
  • /etc/fail2ban/action.d :定义 fai2ban 自身的日志级别、日志位置等

当 filter 文件监视到的错误记录条数在 jail 中定义的时间内达到 jail 中定义的次数后,告知系统 iptables 执行封禁动作及封禁时长。在封禁时长到期时,告知 iptables 解除封禁。

注意:

  • xxx.conf 文件是 Fail2ban 的默认文件,升级时会被覆盖
  • 如果要修改配置,我们要手动建立 xxx.local 文件,其将覆盖 xxx.conf 的设置,而不要去修改 xxx.cong 文件

jail 文件内容及参数

以 SSH 为例:

[SSH]

enabled = true

filter = sshd

action = iptables[name=SSH, port=ssh, protocol=tcp]

logpath = /var/log/secure

maxretry = 3

bantime = 43200

findtime = 3600

参数解释:

  • enabled =true :禁用或启用此 filter
  • filter = sshd :对应的 filter 名称
  • action = iptables[name=SSH, port=ssh, protocol=tcp] :执行的动作。iptables 对应 /etc/fail2ban/action.d/ 目录下的相应 iptables.conf 动作文件;name=SSH ;port=ssh;protocol=tcp
  • logpath = /var/log/secure :日志记录文件路径
  • maxretry = 3 :执行封禁动作前允许的错误记录数
  • bantime = 43200 :执行封禁的时长(秒)
  • findtime = 3600 :此时长(秒)内达到 maxretry 次就执行封禁动作

filter 文件内容及参数

参数解释:

  • failregex = :监视相应服务的日志文件中的错误记录的规则(正则表达式)

为相应的服务配置 Fail2ban

对于常见服务(如 SSH、nginx、MySQL),Fail2ban 内置了相应的 filter 文件,我们只需要建立相应的 jail 文件即可。

为 SSH 配置 Fail2ban

建立 filter 文件

使用内置的 filter 文件:/etc/fail2ban/filter.d/sshd.conf

建立 jail 文件

创建 jail 文件:

sudo vi /etc/fail2ban/jail.d/ssh.local

复制并粘帖如下内容:

[SSH]
enabled = true

filter = sshd

action = iptables[name=SSH, port=ssh, protocol=tcp]

logpath = /var/log/secure

maxretry = 3

bantime = 43200

findtime = 3600

为 bitwaren_rs 配置 Fail2ban

详情请参阅为 bitwarden_rs 设置 Fail2ban

参考链接

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注