如何安装和配置 Fail2Ban 以保护 Linux 服务器
本详细指南将向您介绍什么是 Fail2Ban、如何配置它以及如何使用它在 Linux 系统上提供额外的安全层。
什么是 Fail2Ban?
如果您启用了 SSH,请检查您的 Linux 服务器的登录历史记录。您会惊讶地发现大量 IP 尝试通过 SSH 登录您的服务器。
如果您没有适当的机制来阻止这些登录尝试,您的系统很容易受到暴力攻击。基本上,脚本/机器人将通过尝试各种用户名和密码组合来继续尝试 SSH 连接您的系统。
这就是 Fail2Ban 这样的工具发挥作用的地方。 Fail2Ban 是一款免费的开源软件,有助于保护您的 Linux 服务器免受恶意登录。如果登录尝试失败一定次数,Fail2Ban 将禁止该 IP(一段时间)。
Fail2Ban 具有开箱即用的基本设置,但它也非常可配置。您可以根据自己的喜好对其进行调整,并根据需要创建过滤器和规则。
听起来不错?为什么不测试 Fail2Ban?阅读并遵循本文的其余部分,并亲自尝试 Fail2Ban。
在 Linux 上安装 Fail2Ban
您可以从所有主要 Linux 发行版的官方存储库中都可以找到 Fail2Ban 的事实来猜测它的受欢迎程度。这使得安装 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 建议使用 .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 文件试图用太多的注释来解释一切。那么,让我为您简化一下。
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 = 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 分钟。假设某个 IP 在 10:30 尝试进行错误登录。如果同一IP在10点40分之前达到最大重试次数,则会被封禁。否则,10:40之后的下一次失败尝试将被计为第一次失败尝试。
maxretry:采取操作之前重试失败的次数
usedns:“警告”设置尝试使用反向 DNS 查找主机名并禁止其使用主机名。将其设置为 no 将禁止 IP,而不是主机名。
destemail:警报将发送到的电子邮件地址(需要配置)
发件人:通知邮件中的发件人姓名
mta:用于通知电子邮件的邮件传输代理
banaction:该参数使用 /etc/fail2ban/action.d/iptables-multiport.conf 文件设置最大失败重试次数后的操作
协议:禁止后将丢弃的流量类型
如果您想对任何监狱(或所有监狱)进行任何更改,例如最大重试次数、禁止时间、查找时间等,您应该编辑jail.local文件。
如何使用 Fail2Ban 保护 Linux 服务器
让我向您展示一些使用 Fail2Ban 强化 Linux 安全性的方法。
请注意,您需要是 root 用户或具有 sudo 访问权限才能运行fail2ban 命令。
在您的服务器上启用 Fail2Ban 并检查所有正在运行的监狱
您可以使用 systemd 命令在 Linux 服务器上启动并启用 Fail2Ban:
systemctl start fail2ban
systemctl enable fail2ban
启用 Fail2Ban 后,您可以使用 failed2ban-client 命令查看状态和活动的监狱:
fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
如果您想知道,sshd监狱默认是启用的。
查看 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 超过最大重试阈值时,它会识别并禁止它们。
查看 Fail2Ban 禁止的 IP
一种方法是检查某个监狱的状态。您可以使用 Fail2Ban 客户端来实现此目的。
fail2ban-client status <jail_name>
例如,如果您必须查看 Fail2Ban 禁止的所有不良 ssh 登录,您可以按以下方式使用它。输出将显示失败的尝试总数和被禁止的 IP 总数。
root@test-server:~# 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),这相当于永久禁止,但如果您尝试此方法,您可能会看到类似“Starting failure2ban: ERROR 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 禁止。
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 的监狱的名称,您可以使用fail2ban-client 取消禁止该 IP:
fail2ban-client set <jail_name> unbanip <ip_address>
如何在 Fail2Ban 中将 IP 列入白名单
如果你禁止自己,那也不是什么好事,对吗?要忽略某个 IP 地址被 Fail2Ban 当前会话禁止,您可以使用如下命令将该 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列入白名单,你应该编辑jail配置文件。转到所述监狱部分并添加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从某个jail的白名单中删除,可以使用以下命令:
fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>
如果您想永久删除该 IP,您应该编辑 /etc/fail2ban/jail.local 文件。
还有什么?
您可以使用 Fail2Ban 做更多事情。本指南为您提供 Fail2Ban 入门的基础知识。我还没有触及操作、邮件通知、过滤器等主题。
了解 Fail2Ban 基础知识后,您就可以开始探索更多内容。目前,只需使用它并为 Linux 服务器上的 SSH 添加额外的安全层。