什么是 Fail2Ban?
如果您已启用 SSH,请检查您的 Linux 服务器的登录历史记录。 您会惊讶地看到大量 IP 尝试通过 SSH 登录到您的服务器。
如果您没有适当的机制来阻止这些登录尝试,您的系统很容易受到 蛮力攻击. 基本上,脚本/机器人将通过尝试各种用户名和密码组合来继续尝试 SSH 连接您的系统。
这是一个像 禁止失败 进入画面。 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 建议为这些 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 文件分为服务。 有一个 [Default] 部分,它适用于所有服务。 然后您可以看到具有各自设置的各种服务(如果有)。 所有这些服务都在括号中。 你会看到像这样的部分 [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 = [email protected]
sender = [email protected]
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 并检查所有正在运行的 jail
您可以使用 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 并在它们超过最大重试阈值时禁止它们。
通过 Fail2Ban 查看被禁止的 IP
一种方法是检查某个监狱的状态。 为此,您可以使用 Fail2Ban 客户端。
fail2ban-client status <jail_name>
为了 example,如果你非要看到Fail2Ban禁止的所有ssh登录不良,你可以通过以下方式使用。 输出将显示失败的尝试总数和被禁止的 IP 总数。
[email protected]:~# 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 fail2ban: ERROR NOK: (”数据库磁盘映像格式错误’,)’。
一种不太干净的解决方法是将禁令时间增加到 1 天、1 周、1 个月或 1 年。 这可以避免问题,直到新版本在您的系统上可用。
怎样解除被 Fail2Ban 阻止的 IP
首先检查IP是否被阻止。 由于 Fail2Ban 在 iptables 上工作,您可以查看 iptable 以查看您的服务器禁止的 IP:
iptables -n -L
如果有太多 IP 被禁止,您可能必须使用 grep 命令。
如果在输出中找到指定的 IP 地址,则它被禁止:
因此,下一步是找出哪个“监狱”禁止了所述 IP。 您必须在此处使用带有 fail2ban 日志的 Grep 命令。
正如您在下面的输出中看到的,该 IP 被 sshd jail 禁止。
[email protected]:~# 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 列入白名单,则应编辑 jail 配置文件。 转到上述 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,您可以使用以下命令:
fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>
如果要永久删除 IP,则应编辑 /etc/fail2ban/jail.local 文件。
还有什么?
您可以使用 Fail2Ban 做更多事情。 本指南为您提供了 Fail2Ban 入门的基础知识。 我还没有涉及操作、邮件通知、过滤器等主题。
一旦您了解了 Fail2Ban 的基础知识,您就可以开始对其进行更多探索。 目前,只需使用它并为 Linux 服务器上的 SSH 添加额外的安全层。