关于 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
#启动 Fail2bansudo systemctl stop fail2ban
#停止 Fail2bansudo systemctl restart fail2ban
#重启 Fail2bansudo tail -f /var/log/fail2ban.log
#打开 Fail2ban 的日志监控sudo iptables --list -n
#显示系统当前 iptablessudo 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
:禁用或启用此 filterfilter = sshd
:对应的 filter 名称action = iptables[name=SSH, port=ssh, protocol=tcp]
:执行的动作。iptables
对应/etc/fail2ban/action.d/
目录下的相应iptables.conf
动作文件;name=SSH ;port=ssh;protocol=tcplogpath = /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