如何安装和配置Fail2Ban以保护Linux服务器

・14 分钟阅读

这个详细的指南告诉你Fail2Ban是什么,如何配置它,以及如何使用,它在Linux系统上提供额外的安全层.

什么是Fail2Ban

如果您已启用SSH,请检查Linux服务器的登录历史记录。你会惊奇地看到大量IP试图通过SSH登录到你的服务器。

如果你没有机制来阻止这些登录尝试,那么你的系统就容易受到暴力攻击的,基本上,脚本/机器人将尝试通过尝试多种用户名和密码组合来尝试用SSH连接你的系统。

Fail2Ban是一个免费的开源软件,帮助你保护Linux服务器免遭恶意登录,如果登录尝试失败,Fail2Ban将禁止IP (在一段时间内)。

Fail2Ban具有基本设置开箱即用的功能,但是,它也是可配置的。你可以根据自己的需要调整过滤器和规则。

阅读并遵循文章的其余部分,然后自己尝试Fail2Ban 。

Fail2Ban guide

安装Fail2Ban

你可以猜到Fail2Ban的受欢迎程度,因为,它可以在所有主要Linux发行版的官方存储库中找到。这使得安装Fail2Ban成为一个简单的任务。

安装Fail2Ban CentOS Red Hat

你需要是root或sudo用户才能在你的系统上安装新软件。

你需要确保你的系统是最新的,并且已经安装了EPEL存储库



sudo yum update && sudo yum install epel-release

现在,你可以使用以下命令安装Fail2Ban :



sudo yum install fail2ban

安装Fail2Ban 在Ubuntu Debian

首先,确保你的系统已更新:



sudo apt update && sudo apt upgrade -y

现在,使用以下命令安装Fail2Ban :



sudo apt install fail2ban

了解Fail2Ban配置文件

Fail2Ban中有两个主要的配置文件: /etc/fail2ban/fail2ban.conf和/etc/fail2ban/jail.conf.让我来解释他们做了什么。

/etc/fail2ban/fail2ban.conf :这是Fail2Ban守护进程的操作设置的配置文件,这里定义了loglevel,日志文件,套接字和pid文件的设置。

/etc/fail2ban/jail.conf :这就是所有魔法发生的地方,这是一个文件,您可以配置默认禁止时间,禁止IP之前的恢复数量,白名单IP,邮件发送信息等,基本上,您可以从这个文件控制Fail2Ban的行为。

在更改这些文件之前,Fail2Ban建议使用.local文件为这些conf文件创建一个副本,因为默认的conf文件可以在更新中覆盖,你会丢失所有的设置。



sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

现在让我们来了解jail.conf文件,如果使用less命令读取这个大文件,那么看起来很混乱,conf文件试图用太多的注释来解释一切,那么,让我为你简化一下。

然后,你可以看到各种服务,它们各自的设置,所有这些服务都在括号内,你将看到[sshd],[apache-auth],[squid]等部分。

如果删除注释,则默认部分如下所示:

[DEFAULT ]
ignorecommand =
bantime =10m
findtime =10m
maxretry =5
backend = auto
usedns = warn
logencoding = auto
enabled =
mode = normal
filter = %( name )s [mode=%(mode)s ]
destemail =root@localhost
sender = root@
mta =sendmail
protocol = tcp
chain =
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_abuseipdb =abuseipdb
action = %(action_)s

让我来告诉你这些参数的含义。

  • bantime :设置禁止的长度,默认值为10分钟,
  • findtime :在IP上执行操作的窗口,默认为10分钟,假定10:30上的某个IP尝试了错误的登录,如果相同的IP达到10:40之前的最大重试次数,则会被禁止,否则,10:40后的下一个失败尝试将被视为首次失败尝试,
  • maxretry :执行操作之前失败重试的次数
  • usedns :"警告"设置使用反向dns查找主机名,并且使用主机名禁止它,将它设置为no将禁止IP,而不是主机名。
  • destemail :通知将被发送到的电子邮件地址
  • sender :通知电子邮件中的发件人姓名
  • mta :用于通知电子邮件的邮件传输代理
  • banaction :此参数使用/etc/fail2ban/action. d/,conf文件设置最大失败次数后的操作,
  • protocol :禁止后将被删除的流量类型

如果你想对任何监狱(或者所有的监狱)进行任何更改,比如,最大重试次数禁止时间查找时间等等你应该编辑jal.local文件。

如何使用Fail2Ban保护Linux服务器

让我向你展示一些使用Fail2Ban加强Linux安全性的方法。

请注意,您需要是root用户或具有sudo访问权限才能运行fail2ban命令。

在你的服务器上启用Fail2Ban,并且检查所有正在运行的jail,

你可以使用systemd命令在Linux服务器上启动和启用Fail2Ban :



systemctl start fail2ban
systemctl enable fail2ban

启用Fail2Ban后,你可以使用fail2ban-client命令查看状态和活动jail :

fail2ban-client状态
Status
|- Number of jail : 1
`- Jail list : sshd

如果你想知道,缺省情况下,sshd jail是启用的。

查看Fail2Ban日志

Fail2Ban日志位于/var/log/fail2ban.log.中,日志文件的格式如下:

2019-03-25 07:09:08,004 fail2ban.filter [25630] :信息[sshd]找到了139.59.69.76 -2019-03-25 07:09:07,
2019-03-25 07:09:36,756 fail2ban.filter [25630] :信息[sshd]找到了159.89.205.213 -2019-03-25 07:09:36,
2019-03-25 07:09:36,757 fail2ban.filter [25630] :信息[sshd]找到了159.89.205.213 -2019-03-25 07:09:36,
2019-03-25 07:09:36,774 fail2ban.actions [25630] :通知[sshd] 159.89.205.213,
2019-03-25 07:09:36,956 fail2ban.filter [25630] :信息[sshd]找到了182.70.253.202 -2019-03-25 07:09:36,
2019-03-25 07:09:36,957 fail2ban.filter [25630] :信息[sshd]找到了182.70.253.202 -2019-03-25 07:09:36,
2019-03-25 07:09:36,981 fail2ban.actions [25630] :通知[sshd] 182.70.253.202,
2019-03-25 07:09:37,247 fail2ban.filter [25630] :信息[sshd]找到了112.64.214.90 -2019-03-25 07:09:37,
2019-03-25 07:09:37,248 fail2ban.filter [25630] :信息[sshd]找到了112.64.214.90 -2019-03-25 07:09:37,
2019-03-25 07:09:37,589 fail2ban.actions [25630] :通知[sshd] 112.64.214.90,

读取Linux :atime,mtime,ctime中的文件时间戳,

您可以看到它识别IP,并且在超过最大重试阈值时禁止它们。

通过Fail2Ban查看禁止的IP

一种方法是检查某个监狱的状态,你可以将Fail2Ban客户端用于此目的。



fail2ban-client status 

例如,如果你必须看到Fail2Ban禁止的所有错误的ssh登录名,你可以按以下方式使用它,输出将显示失败的尝试总数和被禁止的IP总数。

root@test-server:~# fail2ban-client status sshd
Status for the jail : sshd
|- Filter
||-当前失败:14
||-总数失败:715
|`-文件列表:/var/log/auth.log
`-操作
|-当前禁止:7
|-总被禁止:17
`-禁止的IP列表:177.47.115.67 118.130.133.110 68.183.62.73 202.65.154.110 106.12.102.114 61.184.247.3 218.92.1.150

尝试通过失败登录登录的系统应该会得到如下错误

ssh : connect to host 93.233.73.133 port 22 : Connection refused

如何使用Fail2Ban永久禁止IP

现在你已经知道Fail2Ban将放在IP上是暂时的,默认情况下为10分钟,攻击者可以在10分钟后再次尝试登录。

因为攻击者可以使用在10分钟后登录的脚本,所以,这会带来安全风险。

那么,如何使用Fail2Ban实现永久禁止? 没有明确的答案。

启动Fail2Ban版本0.11,禁止时间将自动计算,持久化IP将以指数级增长。

但是,如果你检查Fail2Ban版本,你可能正在运行版本0.10.



fail2ban-server --version 
 Fail2Ban v0.10.2
 Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors
 Copyright of modifications held by their respective authors.
 Licensed under the GNU General Public License v2 (GPL).

在早期的版本中如果你尝试使用此方法,则可以使用负bantime (bantime =-1 ),这相当于永久禁止.你可能会看到一个错误,如'Starting fail2ban : ERROR NOK : ('database disk image is malformed',)'.

一个不那么干净的解决办法是将bantime增加到1天,1星期,1月或1年,这可以解决这个问题,直到新版本在你的系统上可用。

如何阻止Fail2Ban阻塞IP

首先检查IP是否被阻塞,由于Fail2Ban工作于iptables,你可以查看iptable以查看服务器被禁止的IP :

 

iptables -n -L

 

如果有太多的被禁用,你可能必须使用grep命令 。

读取Emacs入门:基本命令解释

如果在输出中找到指定的IP地址,则将被禁止:

因此,下一步是找到哪个''jail '禁止了IP。你必须在这里的fail2ban日志中使用Grep命令。

正如您在下面的输出中看到的那样,IP被sshd jail禁止。

root@test-server:~# grep -E'Ban.* 61.184.247.3'/var/log/fail2ban.log
2019-03-14 13:09:25,029 fail2ban.actions [25630]:NOTICE [sshd] Ban 61.184.247.3,
2019-03-14 13:52:56 ,745 fail2ban.actions [25630] : NOTICE [sshd] Ban 61.184.247.3

现在你已经知道了阻塞IP的jail的名称,你可以使用fail2ban-client unban IP :



fail2ban-client set  unbanip 

如何在Fail2Ban中启用IP

要忽略Fail2Ban当前会话禁止的ip地址,你可以使用如下命令对IP进行白名单:



fail2ban-client set  addignoreip 

你可以在Linux中轻松地找到地址。 在我的情况下

sudo fail2ban-client set sshd addignoreip 203.93.83.113
这些IP地址/网络将被忽略:
`- 203.93.83.113

如果要永久白名单,则应编辑jail配置文件,转到jail,并且添加如下所示的ignoreip行:



ignoreip = 127.0.0.1/8 

如果你想要从系统上的所有上进行白名单白化,那么编辑/etc/fail2ban/jail.local文件,并且在默认区域中添加一行。

你必须重新启动Fail2Ban才能使此更改生效。

如何通过jail查看IP白名单

你可以使用以下命令在jail中看到所有IP白名单:



fail2ban-client get  ignoreip

它应该显示Fail2Ban被忽略的所有IP :

sudo fail2ban-client set sshd addignoreip 203.93.83.113
这些IP地址/网络将被忽略:
|- 127.0.0.0/8
|- ::1
`- 203.93.83.113

如何从Fail2Ban白名单中删除IP

如果你正在从特定的监狱白名单中删除IP,你可以使用以下命令:



fail2ban-client set  delignoreip 

如果要永久删除该IP,则应编辑/etc/fail2ban/jail.local文件。

还有什么?

你可以用Fail2Ban做很多事情,本指南提供了开始使用Fail2Ban的基础,我还没有涉及操作,邮件通知,过滤器等主题。

了解Fail2Ban基础知识后,就可以开始深入探索它,目前,只需使用它,并且在Linux服务器上添加一个额外的安全层。


Zhongy0410 profile image