使用Fail2Ban保护Linux服务器
什么是Fail2Ban
如果启用了SSH,请检查Linux服务器的登录历史记录。
我们会惊讶地发现,大量IP尝试通过SSH登录到服务器。
如果没有适当的机制来阻止这些登录尝试,则系统很容易受到蛮力攻击。
基本上,脚本/机器人将通过尝试用户名和密码的各种组合来继续尝试与系统建立SSH连接。
这是Fail2Ban之类的工具出现在此处的地方。
Fail2Ban是一个免费的开源软件,可帮助保护Linux服务器免受恶意登录的侵害。
如果存在一定数量的失败登录尝试,Fail2Ban将禁止IP(在一定时间内)。
Fail2Ban具有基本设置的开箱即用功能,但它也是可配置的。
我们可以根据自己的喜好对其进行调整,并根据需要创建过滤器和规则。
在Linux上安装Fail2Ban
在CentOS和Red Hat上安装Fail2Ban
我们必须是root或者sudo用户才能在系统上安装新软件。
我们需要确保系统是最新的,并且已经安装了EPEL存储库。
sudo yum update && sudo yum install epel-release
现在,我们可以使用以下命令安装Fail2Ban:
sudo yum install fail2ban
在Ubuntu和Debian上安装Fail2Ban
首先,请确保系统已更新:
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守护程序的操作设置的配置文件。
此处定义了日志级别,日志文件,套接字和pid文件等设置。
/etc/fail2ban/jail.conf:这是发生所有魔术的地方。
这是我们可以其中配置默认禁止时间,禁止IP之前的联系数,将IP列入白名单,邮件发送信息等内容的文件。
基本上,我们可以从此文件控制Fail2Ban的行为。
现在,在我们更改这些文件之前,Fail2Ban建议我们为这些conf文件使用.local文件进行复制。
这是因为默认的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文件试图用太多的注释来解释一切。
所以,让我为我们简化一下。
jail.conf文件分为服务。
有一个[默认]部分,它适用于所有服务。
然后,我们可以看到各种服务及其相应的设置(如果有)。
所有这些服务都放在方括号中。
我们会看到[sshd],[apache-auth],[squid]等部分。
如果删除注释,则默认部分如下所示:
[DEFAULT] ignorecommand = bantime = 10m findtime = 10m maxretry = 5 backend = auto usedns = warn logencoding = auto enabled = false mode = normal filter = %(name)s[mode=%(mode)s] destemail = Hyman@theitroad sender = Hyman@theitroad 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分钟。假设某个IP在10:30尝试了错误登录。如果相同的IP在10:40之前达到最大重试次数,则将被禁止。否则,10:40之后的下一次失败尝试将被计为第一次失败尝试。
- maxretry:在执行操作之前重试失败的次数
- usedns:“警告”设置尝试使用反向DNS查找主机名,并禁止使用主机名。将其设置为no将禁止IP,而不是主机名。
- destemail:警报将发送到的电子邮件地址(需要配置)
- 发件人:通知电子邮件中的发件人名称
- mta:用于通知电子邮件的邮件传输代理
- banaction:此参数使用/etc/fail2ban/action.d/iptables-multiport.conf文件来设置最大次数的重试后的操作
- 协议:禁令后将被丢弃的流量类型
如果要对任何一个监狱(或者所有监狱)进行任何更改,例如最大重试次数,禁止时间,查找时间等,则应编辑jal.local文件。
如何使用Fail2Ban保护Linux服务器
让我向我们展示一些使用Fail2Ban加强Linux安全性的方法。
请注意,我们必须是root用户或者具有sudo权限才能运行fail2ban命令。
在服务器上启用Fail2Ban并检查所有正在运行的监狱
我们可以使用systemd命令在Linux服务器上启动并启用Fail2Ban:
systemctl start fail2ban systemctl enable fail2ban
启用Fail2Ban后,我们可以使用fail2ban-client命令查看状态和活动的监狱:
fail2ban-client status 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]: INFO [sshd] Found 139.59.69.76 – 2019-03-25 07:09:07 2019-03-25 07:09:36,756 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36 2019-03-25 07:09:36,757 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36 2019-03-25 07:09:36,774 fail2ban.actions [25630]: NOTICE [sshd] Ban 159.89.205.213 2019-03-25 07:09:36,956 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36 2019-03-25 07:09:36,957 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36 2019-03-25 07:09:36,981 fail2ban.actions [25630]: NOTICE [sshd] Ban 182.70.253.202 2019-03-25 07:09:37,247 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37 2019-03-25 07:09:37,248 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37 2019-03-25 07:09:37,589 fail2ban.actions [25630]: NOTICE [sshd] Ban 112.64.214.90
我们会看到它识别IP并在IP超过最大重试阈值时将其禁止。
查看Fail2Ban禁止的IP
一种方法是检查某个监狱的状态。
我们可以为此使用Fail2Ban客户端。
fail2ban-client status <jail_name>
例如,如果必须查看Fail2Ban禁止的所有错误的ssh登录,则可以按以下方式使用它。
输出将显示失败尝试总数和被禁止的IP总数。
Hyman@theitroad:~# fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 14 | |- Total failed: 715 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 7 |- Total banned: 17 `- Banned IP list: 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登录的系统应收到这样的错误
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 = -1),这等效于永久禁止,但是如果我们尝试此方法,则可能会看到类似“启动fail2ban:错误NOK:(''的错误。
数据库磁盘镜像格式不正确',)'。
一个不太干净的解决方法是将禁令时间增加到大约1天,1周,1个月或者1年。
在系统上提供新版本之前,这可以解决问题。
如何取消被Fail2Ban阻止的IP
首先检查IP是否被阻止。
由于Fail2Ban可在iptables上运行,因此我们可以查看iptable来查看服务器禁止的IP:
iptables -n -L
如果有太多的IP被禁止,则可能必须使用grep命令。
如果在输出中找到指定的IP地址,则该IP地址被禁止:
因此,下一步是找出哪个“监狱”禁止了该IP。
我们必须在此处将Grep命令与fail2ban日志一起使用。
从下面的输出中可以看到,该IP被sshd jail禁止了。
Hyman@theitroad:~# 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的监狱的名称,我们可以使用fail2ban-client取消IP的禁止:
fail2ban-client set <jail_name> unbanip <ip_address>
如何在Fail2Ban中将IP列入白名单
如果你禁止自己,那将不是一件好事,对吧?
要忽略Fail2Ban当前会话禁止的IP地址,我们可以使用以下命令将该IP列入白名单:
fail2ban-client set <JAIL_NAME> addignoreip <IP_Address>
我们可以在Linux中轻松找到IP地址。
就我而言,这是
sudo fail2ban-client set sshd addignoreip 203.93.83.113 These IP addresses/networks are ignored: `- 203.93.83.113
如果要永久将IP列入白名单,则应编辑监狱配置文件。
转到所述监狱部分,并添加ignoreip行,如下所示:
ignoreip = 127.0.0.1/8 <IP_TO_BE_WHITELISTED>
如果要将系统中所有监狱的IP列入白名单,最好编辑/etc/fail2ban/jail.local文件,并在DEFAULT部分下添加一行,就像上面看到的一样。
我们必须重新启动Fail2Ban才能使此更改生效。
如何通过监狱查看IP白名单
我们可以使用以下命令查看被监狱列入白名单的所有IP:
fail2ban-client get <JAIL_NAME> ignoreip
它应显示该监狱在Fail2Ban中忽略的所有IP:
sudo fail2ban-client set sshd addignoreip 203.93.83.113 These IP addresses/networks are ignored: |- 127.0.0.0/8 |- ::1 `- 203.93.83.113
如何从Fail2Ban白名单中删除IP
如果我们要从某个监狱的白名单中删除IP,则可以使用以下命令:
fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>
如果要永久删除IP,则应编辑/etc/fail2ban/jail.local文件。