如何使用 fail2ban 保护您的 Linux 服务器
已发表: 2022-01-29 使用fail2ban
,您的 Linux 计算机会自动阻止连接失败过多的 IP 地址。 这是自我调节的安全性! 我们将向您展示如何使用它。
安全 安全 安全
温莎公爵夫人沃利斯·辛普森曾经说过一句名言:“你永远不能太富有或太瘦。” 我们已经为我们的现代互联世界更新了这一点:您永远不会太小心或太安全。
如果您的计算机接受传入的连接请求,例如安全外壳 (SSH) 连接,或者充当 Web 或电子邮件服务器,您需要保护它免受暴力攻击和密码猜测者的攻击。
为此,您需要监控无法进入帐户的连接请求。 如果他们在短时间内多次未能进行身份验证,则应禁止他们进行进一步的尝试。
实际上可以实现的唯一方法是自动化整个过程。 通过一些简单的配置, fail2ban
将为您管理监控、禁止和取消禁止。
fail2ban
与 Linux 防火墙iptables
集成。 它通过向防火墙添加规则来强制禁止可疑的 IP 地址。 为了保持这个解释整洁,我们使用带有空规则集的iptables
。
当然,如果您担心安全性,您可能有一个配置了完善的规则集的防火墙。 fail2ban
只添加和删除自己的规则——您的常规防火墙功能将保持不变。
我们可以使用以下命令查看我们的空规则集:
sudo iptables -L
相关: iptables 初学者指南,Linux 防火墙
安装fail2ban
在我们用来研究本文的所有发行版上安装fail2ban
都很简单。 在 Ubuntu 20.04 上,命令如下:
sudo apt-get install fail2ban
在 Fedora 32 上,键入:
须藤 dnf 安装 fail2ban
在 Manjaro 20.0.1 上,我们使用了pacman
:
sudo pacman -Sy fail2ban
配置fail2ban
fail2ban
安装包含一个名为 jail.conf 的默认配置文件。 升级fail2ban
时会覆盖此文件,因此如果我们对此文件进行自定义,我们将丢失更改。
相反,我们会将 jail.conf 文件复制到一个名为 jail.local 的文件中。 通过将我们的配置更改放在 jail.local 中,它们将在升级过程中持续存在。 fail2ban
自动读取这两个文件。
这是复制文件的方法:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
现在在您喜欢的编辑器中打开文件。 我们将使用gedit
:
sudo gedit /etc/fail2ban/jail.local
我们将在文件中查找两个部分:[DEFAULT] 和 [sshd]。 不过,请注意找到实际的部分。 这些标签也出现在描述它们的部分的顶部附近,但这不是我们想要的。
您会在第 40 行附近找到 [DEFAULT] 部分。这是一个包含大量评论和解释的长部分。
向下滚动到第 90 行左右,您会发现以下四个您需要了解的设置:
- ignoreip:永远不会被禁止的 IP 地址白名单。 他们有一张永久的“越狱免费”卡。 默认情况下,本地主机 IP 地址 (
127.0.0.1
) 及其 IPv6 等效地址 (::1
) 都在列表中。 如果还有其他您知道永远不应禁止的 IP 地址,请将它们添加到此列表中,并在每个 IP 地址之间留一个空格。 - bantime: IP 地址被禁止的持续时间(“m”代表分钟)。 如果您键入一个没有“m”或“h”(小时)的值,它将被视为秒。 值 -1 将永久禁止 IP 地址。 要非常小心,不要将自己永久锁定。
- findtime:太多失败的连接尝试将导致 IP 地址被禁止的时间量。
- maxretry: “太多失败尝试”的值。
如果来自同一 IP 地址的连接在 findtime 期间进行maxretry
失败的连接尝试,则在findtime
期间将被bantime
。 唯一的例外是ignoreip
列表中的 IP 地址。
fail2ban
将 IP 地址放入监狱一段时间。 fail2ban
支持许多不同的监狱,每个监狱代表持有适用于单一连接类型的设置。 这使您可以对各种连接类型进行不同的设置。 或者您可以让fail2ban
仅监控一组选定的连接类型。
您可能已经从 [DEFAULT] 部分名称中猜到了,但我们查看的设置是默认设置。 现在,让我们看看 SSH 监狱的设置。
相关:如何在 Linux 上使用 gedit 以图形方式编辑文本文件
配置监狱
Jails 允许您将连接类型移入和移出fail2ban's
监控。 如果默认设置与您希望应用于监狱的设置不匹配,您可以为bantime
、 findtime
和maxretry
设置特定值。
向下滚动到第 280 行,您将看到 [sshd] 部分。
您可以在此处设置 SSH 连接监狱的值。 要将这个监狱包括在监控和禁止中,我们必须输入以下行:
启用 = 真
我们也输入这一行:
最大重试 = 3
默认设置为 5,但我们希望对 SSH 连接更加谨慎。 我们将其降为三个,然后保存并关闭文件。
我们将此监狱添加到fail2ban's
监控中,并覆盖了其中一个默认设置。 监狱可以使用默认设置和监狱特定设置的组合。
启用fail2ban
到目前为止,我们已经安装并配置了fail2ban
。 现在,我们必须使其能够作为自动启动服务运行。 然后,我们需要对其进行测试以确保它按预期工作。
要启用fail2ban
作为服务,我们使用systemctl
命令:
sudo systemctl 启用 fail2ban
我们也用它来启动服务:
sudo systemctl start fail2ban
我们也可以使用systemctl
服务的状态:
sudo systemctl status fail2ban.service
一切看起来都很好——我们得到了绿灯,所以一切都很好。
让我们看看fail2ban
是否同意:
sudo fail2ban-客户端状态
这反映了我们设置的内容。 我们启用了一个名为 [sshd] 的监狱。 如果我们在前面的命令中包含监狱的名称,我们可以更深入地查看它:
sudo fail2ban-client 状态 sshd
这列出了失败的数量和被禁止的 IP 地址。 当然,目前所有的统计数据都是零。
测试我们的监狱
在另一台计算机上,我们将向我们的测试机器发出 SSH 连接请求,并故意输入错误的密码。 每次连接尝试时,您都会尝试三次以正确获取密码。
maxretry
值将在三次失败的连接尝试后触发,而不是三次失败的密码尝试。 因此,我们必须输入错误的密码三次才能使连接尝试失败。
然后,我们将再次尝试连接并再次输入错误的密码三遍。 第三次连接请求的第一次错误密码尝试应该触发fail2ban.
在第三次连接请求的第一个错误密码之后,我们没有得到远程机器的响应。 我们没有得到任何解释; 我们只是冷遇。
您必须按 Ctrl+C 才能返回命令提示符。 如果我们再试一次,我们会得到不同的响应:
ssh [email protected]
以前,错误消息是“权限被拒绝”。 这一次,连接被彻底拒绝。 我们是不受欢迎的人。 我们被禁止了。
让我们再看一下 [sshd] 监狱的细节:
sudo fail2ban-client 状态 sshd
3次失败,1个IP地址(192.168.4.25)被封禁。
正如我们之前提到的, fail2ban
通过向防火墙规则集中添加规则来强制执行禁令。 让我们再看一下规则集(之前它是空的):
sudo iptables -L
INPUT 策略中添加了一条规则,将 SSH 流量发送到f2b-sshd
链。 f2b-sshd
链中的规则拒绝来自 192.168.4.25 的 SSH 连接。 我们没有更改bantime
的默认设置,因此,在 10 分钟内,该 IP 地址将被取消禁止并可以发出新的连接请求。
如果您设置了更长的禁止持续时间(如几个小时),但希望允许 IP 地址更快地发出另一个连接请求,您可以提前假释。
我们键入以下内容来执行此操作:
sudo fail2ban-client 设置 sshd unbanip 192.168.5.25
在我们的远程计算机上,如果我们发出另一个 SSH 连接请求并输入正确的密码,我们将被允许连接:
ssh [email protected]
简单有效
越简单通常越好, fail2ban
是解决棘手问题的优雅解决方案。 它只需要很少的配置,几乎不会给您或您的计算机带来任何操作开销。
Linux 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look ·字符串·类型·重命名· zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 别名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超时·墙·是·杀死·睡眠· sudo · su ·时间· groupadd · usermod ·组· lshw ·关机·重新启动·停止·关机· passwd · lscpu · crontab ·日期· bg · fg | |
联网 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑