Fail2ban 的安装和配置

      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

Fail2ban 的工作方式

Fail2ban 使用两个文件来对每一种服务做入侵保护:

  • /etc/fail2ban/filter.d/ 目录中的 filter 文件:用于定义监视相应服务的日志文件中的错误记录的规则
  • /etc/fail2ban/jail.d/ 目录中的 jail 文件:用于定义一定时长内的错误次数、封禁时长、封禁动作

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

filter 文件内容及参数

以 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 次就执行封禁动作

jail 文件内容及参数

参数解释:

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

为相应的服务配置 Fail2ban

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

为 SSH 配置 Fail2ban

建立 filter 文件

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

建立 jail 文件

创建 jail 文件:

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

为 Nginx 配置 Fail2ban

建立 filter 文件

建立 jail 文件

为 MySQL 配置 Fail2ban

MySQL 默认没有启用日志记录,所以需要首先启用并设置 MySQL 的日志记录。

启用并设置 MySQL 日志记录

打开 MySQL 的配置文件:

vi /etc/my.cnf

在 [mysqld] 下加入以下语句:

log-error = /var/log/mysqld.log
log-warnings = 2

重启 mysql:

lnmp mysql restart

建立 filter 文件

使用内置的 filter 文件:/etc/fail2ban/filter.d/mysqld-auth.conf

建立 jail 文件

创建 jail 文件:

vi /etc/fail2ban/jail.d/mysql.local

复制并粘帖如下内容:

[mysql]
enabled = true
filter = mysqld-auth
action = iptables[name=mysql, port=3306, protocol=tcp]
logpath = /var/log/mysqld.log
maxretry = 3
bantime = 43200
findtime = 3600

为 wordprss 配置 Fail2ban

建立 filter 文件

建立 jail 文件

参考链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注