如何在Ubuntu 20.04上安装和配置Fail2ban
暴露给Internet的任何服务都有遭受恶意软件攻击的风险。
例如,如果我们在可公开访问的网络上运行服务,则攻击者可以使用蛮力尝试登录帐户。
Fail2ban是一种工具,可以通过监视服务日志中的恶意活动来帮助保护Linux机器免受暴力攻击和其他自动攻击。
它使用正则表达式来扫描日志文件。
对所有与模式匹配的条目进行计数,并且当它们的数量达到某个预定义的阈值时,Fail2ban会在特定时间段内使用系统防火墙禁止有问题的IP。
禁止期限到期后,将从禁止列表中删除IP地址。
本文介绍如何在Ubuntu 20.04上安装和配置Fail2ban。
在Ubuntu上安装Fail2ban
Fail2ban软件包包含在默认的Ubuntu 20.04存储库中。
要安装它,请以root或者具有sudo特权的用户身份输入以下命令:
sudo apt updatesudo apt install fail2ban
安装完成后,Fail2ban服务将自动启动。
我们可以通过检查服务状态来验证它:
sudo systemctl status fail2ban
输出将如下所示:
● fail2ban.service - Fail2Ban Service Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2017-08-19 06:16:29 UTC; 27s ago Docs: man:fail2ban(1) Main PID: 1251 (f2b/server) Tasks: 5 (limit: 1079) Memory: 13.8M CGroup: /system.slice/fail2ban.service └─1251 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
至此,我们已经在Ubuntu服务器上运行了Fail2Ban。
Fail2ban配置
默认的Fail2ban安装带有两个配置文件:'/etc/fail2ban/jail.conf'和'/etc/fail2ban/jail.d/defaults-debian.conf'。
不建议修改这些文件,因为更新软件包时它们可能会被覆盖。
Fail2ban按以下顺序读取配置文件。
每个“ .local”文件都会覆盖“ .conf”文件中的设置:
- '/etc/fail2ban/jail.conf'
- '/etc/fail2ban/jail.d/*.conf'
- '/etc/fail2ban/jail.local'
- '/etc/fail2ban/jail.d/*.local'
对于大多数用户而言,配置Fail2ban的最简单方法是将“ jail.conf”复制到“ jail.local”并修改“ .local”文件。
更高级的用户可以从头开始构建“ .local”配置文件。
“ .local”文件不必包括相应“ .conf”文件中的所有设置,仅包括我们要覆盖的设置。
从默认的“ jail.conf”文件创建一个“ .local”配置文件:
sudo cp /etc/fail2ban/jail.{conf,local}
要开始配置Fail2ban服务器打开,请使用文本编辑器打开“ jail.local”文件:
sudo nano /etc/fail2ban/jail.local
该文件包含描述每个配置选项功能的注释。
在此示例中,我们将更改基本设置。
将IP地址列入白名单
我们可以将要排除在外的IP地址,IP范围或者主机添加到'ignoreip'指令中。
其中我们应该添加本地PC IP地址以及我们要列入白名单的所有其他计算机。
取消注释以'ignoreip'开头的行,并添加以空格分隔的IP地址:
/etc/fail2ban/jail.local
ignoreip = 127.0.0.1/8 ::1 123.123.123.123 192.168.1.0/24
禁止设置
“ bantime”,“ findtime”和“ maxretry”选项的值定义了禁止时间和禁止条件。
“禁令时间”是指该IP被禁的持续时间。
如果未指定后缀,则默认为秒。
默认情况下,“ bantime”值设置为10分钟。
通常,大多数用户将希望设置更长的禁止时间。
根据喜好更改值:
/etc/fail2ban/jail.local
bantime = 1d
要永久禁止IP,请使用负数。
“ findtime”是设置禁止之前失败次数之间的持续时间。
例如,如果将Fail2ban设置为在五次失败后禁止IP(“ maxretry”,请参见下文),则这些失败必须在“ findtime”持续时间内发生。
/etc/fail2ban/jail.local
findtime = 10m
“ maxretry”是IP被禁止之前的失败次数。
默认值设置为5,这对于大多数用户来说应该没问题。
/etc/fail2ban/jail.local
maxretry = 5
电子邮件通知
当IP被禁止时,Fail2ban可以发送电子邮件警报。
要接收电子邮件,我们需要在服务器上安装SMTP并更改默认操作,该操作仅将IP禁止为'%(action_mw)s',如下所示:
/etc/fail2ban/jail.local
action = %(action_mw)s
'%(action_mw)s'禁止有问题的IP,并发送包含Whois报告的电子邮件。
如果要在电子邮件中包括相关日志,请将操作设置为'%(action_mwl)s'。
我们还可以调整发送和接收电子邮件地址:
/etc/fail2ban/jail.local
destemail = [email protected] sender = [email protected]
Fail2ban监狱
Fail2ban使用监狱的概念。
监狱描述了一项服务,其中包括过滤器和操作。
对符合搜索模式的日志条目进行计数,并在满足预定义条件时执行相应的操作。
Fail2ban附带有许多用于不同服务的监狱。
我们还可以创建自己的监狱配置。
默认情况下,仅启用ssh监狱。
要启用监狱,我们需要在监狱标题后添加“ enabled = true”。
以下示例显示了如何启用proftpd监狱:
/etc/fail2ban/jail.local
[proftpd] port = ftp,ftp-data,ftps,ftps-data logpath = %(proftpd_log)s backend = %(proftpd_backend)s
我们在上一节中讨论的设置可以针对每个监狱进行设置。
这是一个例子:
/etc/fail2ban/jail.local
[sshd] enabled = true maxretry = 3 findtime = 1d bantime = 4w ignoreip = 127.0.0.1/8 23.34.45.56
过滤器位于“ /etc/fail2ban/filter.d”目录中,存储在与监狱名称相同的文件中。
如果我们具有自定义设置并具有正则表达式的经验,则可以微调过滤器。
每次编辑配置文件时,都需要重新启动Fail2ban服务以使更改生效:
sudo systemctl restart fail2ban
Fail2ban客户端
Fail2ban附带了一个名为“ fail2ban-client”的命令行工具,可用于与Fail2ban服务进行交互。
要查看所有可用选项,请使用'-h'选项调用命令:
fail2ban-client -h
此工具可用于禁止/取消禁止IP地址,更改设置,重新启动服务等等。
这里有一些例子:
- 检查监狱状态:
sudo fail2ban-client status sshd
- 取消IP:
sudo fail2ban-client set sshd unbanip 23.34.45.56
- 禁止IP:
sudo fail2ban-client set sshd banip 23.34.45.56