Fail2ban 是由 Python 语言开发监控软件,通过监控系统日志的登录信息来调用系统防火墙屏蔽相应登录IP,以阻止某个IP不停尝试密码。Fail2ban 在防御对 SSH 服务器的暴力密码破解上非常有用。Linux运维笔记

应用场景

新买一台机子,不久之后登录SSH看到这样的提示信息

There were 1595 failed login attempts since the last successful login.

这说明这台机子正在被尝试SSH暴力破解登录,要防止这种暴力破解就可以用Fail2ban。 Fail2ban配合FirewallD工作,当发现被暴力破解时就及时屏蔽掉此IP。

系统环境

CentOS7。CentOS7自带FirewallD防火墙,本文将会讲解基于此的Fail2ban使用方法

配置方法

如果已经安装了iptables,建议先关掉iptables

service iptables stop
systemctl disable iptables.service

查看 FirewallD 的状态以及启动 FirewallD,并且设置自动启动

#查看状态
firewall-cmd --state
#启动
systemctl start firewalld
#设置自动启动
systemctl enable firewalld

开启一些必要的端口

firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload

安装Fail2ban

配置好了FirewallD,下面来安装Fail2ban。 CentOS 内置源并未包含 Fail2ban,需要先安装 epel 源

yum -y install epel-release

安装Fail2ban

yum -y install fail2ban

安装成功后 Fail2ban 配置文件位于 /etc/fail2ban,其中 jail.conf 为主配置文件,相关的匹配规则位于filter.d目录。

配置规则

新建 jail.local 来覆盖 Fail2ban 的一些默认规则:

vi /etc/fail2ban/jail.local

写入默认配置:

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 86400
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
action = %(action_mwl)s

说明:

  • ignoreip:IP白名单,白名单中的IP不会屏蔽,可填写多个以(,)分隔
  • bantime:屏蔽时间,单位为秒(s)
  • findtime:时间范围
  • maxretry:最大次数
  • banaction:屏蔽IP所使用的方法,上面使用 FirewallD 屏蔽端口,这里 banaction 必须用 firewallcmd-ipset,这是FirewallD支持的关键,如果是用 iptables 请不要这样填写

继续修改 jail.local 这个配置文件,在后面追加如下内容:

[sshd]
enabled = true
filter  = sshd
port    = 22
action = %(action_mwl)s
logpath = /var/log/secure

说明:

  • [sshd]:名称,可以随便填写
  • filter:规则名称,必须填写位于filter.d目录里面的规则,sshd是fail2ban内置规则
  • port:对应的端口
  • action:采取的行动
  • logpath:需要监视的日志路径

按照以上配置下来, jail.local应该是这样:

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 7200
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
action = %(action_mwl)s
 
[sshd]
enabled = true
filter  = sshd
port    = 22
action = %(action_mwl)s
logpath = /var/log/secure

上述配置的意思是如果600秒内错误登录5次将会屏蔽此IP,屏蔽时长为7200秒。

启动Fail2ban

启动

systemctl start fail2ban

设置自动启动

systemctl enable fail2ban

查看已封禁IP

fail2ban-client status sshd

REFERENCE