如何在 Ubuntu 14.04 上使用 Fail2Ban 保护 SSH如何在 Ubuntu 14.04 上使用 Fail2Ban 保护 SSH如何在 Ubuntu 14.04 上使用 Fail2Ban 保护 SSH如何在 Ubuntu 14.04 上使用 Fail2Ban 保护 SSH
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 14.04 上使用 Fail2Ban 保护 SSH

介绍

虽然通过 SSH 连接到您的服务器非常安全,但 SSH 守护进程本身是一项必须暴露在互联网上才能正常运行的服务。这带来了一些固有的风险,并为潜在的攻击者创造了一个攻击媒介。

任何暴露于网络的服务都是这种方式的潜在目标。如果您注意这些服务的应用程序日志,您会经常看到重复的、系统的登录尝试,这些尝试代表了用户和类似机器人的暴力攻击。

名为 fail2ban 的服务可以通过创建规则来缓解这个问题,这些规则可以根据预定义的不成功登录尝试次数自动更改您的 iptables 防火墙配置。这将允许您的服务器响应非法访问尝试而无需您的干预。

在本指南中,我们将介绍如何在 Ubuntu 14.04 服务器上安装和使用 fail2ban。

在 Ubuntu 14.04 上安装 Fail2Ban

这个工具的安装过程很简单,因为 Ubuntu 打包团队在默认存储库中维护了一个包。

首先,我们需要更新本地包索引,然后我们可以使用 apt 下载并安装包:

  1. sudo apt-get update
  2. sudo apt-get install fail2ban

如您所见,安装很简单。我们现在可以开始配置该实用程序以供我们自己使用。

使用您的服务设置配置 Fail2Ban

fail2ban 服务将其配置文件保存在 /etc/fail2ban 目录中。有一个名为 jail.conf 的默认文件。

由于这个文件可以通过包升级来修改,我们不应该就地编辑这个文件,而是复制它以便我们可以安全地进行更改。为了让这两个文件一起成功运行,最好只在 jail.local 文件中包含您希望覆盖的设置。所有默认选项都将从 jail.conf 文件中获取。

尽管我们应该只在 jail.local 文件中包含与默认值的偏差,但基于现有 jail 创建一个 jail.local 文件会更容易。配置文件。因此,我们将复制该文件,并将内容注释掉,作为 jail.local 文件的基础。您可以通过键入以下内容来执行此操作:

  1. awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local

复制文件后,我们可以打开原始的 jail.conf 文件来查看默认情况下的设置

  1. sudo nano /etc/fail2ban/jail.conf

在此文件中,您可能希望调整一些设置。 [DEFAULT] 部分下的设置将应用于为 fail2ban 启用的所有服务,这些服务不会在服务自己的部分中被覆盖。

[DEFAULT]
. . .
ignoreip = 127.0.0.1/8
. . .

ignoreip 设置配置 fail2ban 忽略的源地址。默认情况下,它配置为不禁止来自本地计算机的任何流量。您可以通过在 jail.local 文件中添加一个带有 ignoreip 设置的 [DEFAULT] 部分来添加要忽略的其他地址。您可以通过将附加地址附加到指令的末尾来添加附加地址,以空格分隔。

[DEFAULT]
. . .
bantime = 600
. . .

bantime 参数设置客户端在未能正确验证时将被禁止的时间长度。这是以秒为单位测量的。默认情况下,这设置为 600 秒或 10 分钟。

[DEFAULT]
. . .
findtime = 600
maxretry = 3
. . .

您要注意的下两个参数是 findtime 和 maxretry。这些一起工作来确定客户端被发现是应该被禁止的非法用户的条件。

maxretry 变量设置客户端在被禁止之前必须在 findtime 定义的时间窗口内进行身份验证的尝试次数。使用默认设置,fail2ban 服务将禁止在 10 分钟窗口内 3 次尝试登录失败的客户端。

[DEFAULT]
. . .
destemail = root@localhost
sendername = Fail2Ban
mta = sendmail
. . .

如果您希望配置电子邮件警报,您需要评估 destemail、sendername 和 mta 设置。 destemail 参数设置应该接收禁止消息的电子邮件地址。 sendername 设置电子邮件中“发件人”字段的值。mta 参数配置将使用什么邮件服务来发送邮件。同样,将这些添加到jail.local 文件,位于 [DEFAULT] 标头下,如果您希望调整它们,请设置为适当的值。

[DEFAULT]
. . .
action = $(action_)s
. . .

此参数配置 fail2ban 在想要实施禁令时采取的操作。值 action_ 在此参数之前的文件中定义。默认操作是简单地将防火墙配置为拒绝来自违规主机的流量,直到禁止时间结束。

如果您想配置电子邮件警报,请在 jail.local 文件中添加或取消注释 action 项,并将其值从 action_ 更改为 <代码>action_mw。如果您希望电子邮件包含相关的日志行,您可以将其更改为 action_mwl。如果您选择使用邮件提醒,请确保配置了适当的邮件设置。

个人监狱设置

最后,我们到达处理各个服务的配置文件部分。这些由节标题指定,如 [ssh]。

可以通过取消注释 jail.local 中的标头并将 enabled 行更改为“true”来启用这些部分中的每一个:

[jail_to_enable]
. . .
enabled = true
. . .

默认情况下,SSH 服务处于启用状态,其他所有服务均处于禁用状态。

这些部分通过使用在 [DEFAULT] 部分中设置的值作为基础并根据需要修改它们来工作。如果您想覆盖任何值,您可以通过将适当的服务部分添加到 jail.local 并修改其值来实现。

此处设置的一些其他设置是 filter ,它将用于决定日志中的一行是否表示身份验证失败,以及 logpath 告诉 fail2ban 的日志在哪里该特定服务位于。

filter 值实际上是对位于 /etc/fail2ban/filter.d 目录中的文件的引用,其 .conf 扩展名已删除.这些文件包含确定日志中的一行是否是失败的身份验证尝试的正则表达式。我们不会在本指南中深入介绍这些文件,因为它们相当复杂并且预定义的设置与适当的行匹配得很好。

但是,您可以通过查看该目录来了解可用的过滤器类型:

  1. ls /etc/fail2ban/filter.d

如果您看到一个看起来与您正在使用的服务相关的文件,您应该使用文本编辑器打开它。大多数文件都有很好的注释,您至少应该能够说出脚本旨在防止的情况类型。大多数这些过滤器在 jail.conf 文件中都有适当的(禁用的)部分,如果需要,我们可以在 jail.local 文件中启用它们。

例如,假装我们正在使用 Nginx 为网站提供服务,并意识到我们网站的受密码保护的部分因登录尝试而受到冲击。我们可以告诉 fail2ban 使用 nginx-http-auth.conf 文件来检查 /var/log/nginx/error.log 文件中的这种情况。

这实际上已经在我们的 /etc/fail2ban/jail.conf 文件中名为 [nginx-http-auth] 的部分中进行了设置。我们只需要取消注释 jail.local 文件中的部分并翻转 enabled 参数来保护我们的服务:

. . .
[nginx-http-auth]

enabled = true
. . .

如果启用此功能,您将需要重新启动 fail2ban 服务以确保您的规则构建正确。

把它们放在一起

现在您了解了 fail2ban 背后的基本思想,让我们来完成一个基本设置。

如上所述,我们将为 SSH 和 Nginx 配置自动禁止策略。我们希望 fail2ban 在 IP 被禁止时向我们发送电子邮件。

首先,让我们安装所有相关软件。

如果您还没有它,您将需要 nginx,因为我们将监视它的日志,并且您将需要 sendmail 来向我们发送通知。我们还将获取 iptables-persistent 以允许服务器在启动时自动设置我们的防火墙规则。这些可以从 Ubuntu 的默认存储库中获取:

  1. sudo apt-get update
  2. sudo apt-get install nginx sendmail iptables-persistent

暂时停止 fail2ban 服务,这样我们就可以建立一个没有它添加的规则的基础防火墙:

  1. sudo service fail2ban stop

建立基础防火墙

完成后,我们应该实施默认防火墙。您可以在此处了解如何在 Ubuntu 14.04 上配置 iptables 防火墙。我们将为本指南创建一个基本的防火墙。

我们将告诉它允许已建立的连接、服务器本身生成的流量、发往我们的 SSH 和 Web 服务器端口的流量。我们将丢弃所有其他流量。我们可以通过键入以下内容来设置此基本防火墙:

  1. sudo iptables -A INPUT -i lo -j ACCEPT
  2. sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  3. sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  4. sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
  5. sudo iptables -A INPUT -j DROP

这些命令将实施上述政策。我们可以通过键入以下内容来查看当前的防火墙规则:

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP

您可以通过键入以下命令保存防火墙,以便它们在重新启动后仍然存在:

  1. sudo dpkg-reconfigure iptables-persistent

之后,您可以重新启动 fail2ban 来实现包装规则:

  1. sudo service fail2ban start

我们可以通过键入以下内容来查看我们当前的防火墙规则:

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-ssh -j RETURN

我们对每个链都有默认政策,然后是我们建立的五个基本规则。在红色部分,我们还有 fail2ban 设置的默认结构,因为它已经默认实施了 SSH 禁止策略。这些可能会或可能不会首先出现,因为有时 fail2ban 不会添加结构,直到实施第一个禁令。

调整 Fail2ban 配置

现在,我们需要使用我们想要的设置来配置 fail2ban。打开 jail.local 文件:

  1. sudo nano /etc/fail2ban/jail.local

我们可以在这里设置一个更严厉的禁令时间。找到并取消注释 [DEFAULT] 标题。在默认标题下,更改 bantime 设置,以便我们的服务禁止客户端半小时:

[DEFAULT]
. . .
bantime = 1800
. . .

我们还需要配置我们的警报电子邮件信息。首先,找到 destemail 参数,它也应该位于 [DEFAULT] 标题下。输入您要用来收集这些消息的电子邮件地址:

[DEFAULT]
. . .
destemail = admin@example.com
. . .

如果您愿意,可以将 sendername 设置为其他内容。不过,拥有一个可以使用您的邮件服务轻松过滤的值是很有用的,否则如果来自不同地方的尝试有很多中断,您的常规收件箱可能会被警报淹没。

向下移动,我们需要将 action 参数调整为向我们发送电子邮件的操作之一。选择是在 action_mw 之间进行选择,它建立禁令,然后通过电子邮件向我们发送有关违规主机的“whois”报告,或者 action_mwl 执行上述操作,但也会通过电子邮件发送相关信息日志行。

我们将选择 action_mwl,因为日志行将帮助我们排除故障并在出现问题时收集更多信息:

[DEFAULT]
. . .
action = %(action_mwl)s
. . .

转到我们的 SSH 部分,如果我们想调整在建立禁令之前应该允许的不成功尝试次数,您可以编辑 maxretry 条目。如果您使用的端口不是“22”,您需要适当调整端口参数。正如我们之前所说,该服务已经启用,因此我们不需要修改那。

接下来,搜索 nginx-http-auth 部分。取消注释标题并将 enabled 参数更改为 \true。

. . .
[nginx-http-auth]

enabled = true
. . .

这应该是您在本节中必须执行的全部操作,除非您的 Web 服务器在非标准端口上运行或者您移动了默认错误日志路径。

重新启动 Fail2ban 服务

完成后,保存并关闭文件。

现在,启动或重新启动您的 fail2ban 服务。有时,最好完全关闭服务然后重新启动它:

  1. sudo service fail2ban stop

现在我们可以通过键入以下命令重新启动它:

  1. sudo service fail2ban start

填充所有防火墙规则可能需要一些时间。有时,直到制定第一个此类禁令后才添加规则。但是,一段时间后,您可以通过键入以下内容来检查新规则:

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-nginx-http-auth -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-ssh -j RETURN

红色线条是我们的 fail2ban 政策创建的。现在,他们只是将流量引导到新的、几乎是空的链,然后让流量直接流回 INPUT 链。

但是,这些新链是将添加禁止规则的地方。

测试禁止策略

从另一台服务器,一个不需要登录到您的 fail2ban 服务器的服务器,我们可以通过禁止我们的第二台服务器来测试规则。

登录到您的第二台服务器后,尝试通过 SSH 连接到 fail2ban 服务器。您可以尝试使用不存在的名称进行连接,例如:

  1. ssh blah@fail2ban_server_IP

在密码提示中输入随机字符。重复几次。在某些时候,fail2ban 服务器将停止响应 Permission denied 消息。这表示您的第二个服务器已被 fail2ban 服务器禁止。

在您的 fail2ban 服务器上,您可以通过再次检查我们的 iptables 来查看新规则:

  1. sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-nginx-http-auth -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-ssh -s 203.0.113.14/32 -j REJECT --reject-with icmp-port-unreachable -A fail2ban-ssh -j RETURN

正如您在突出显示的行中所看到的,我们的配置中有一条新规则拒绝来自我们第二台服务器 IP 地址的 SSH 端口流量。您还应该在您配置的帐户中收到一封关于禁令的电子邮件。

结论

您现在应该能够为您的服务配置一些基本的禁止策略。 Fail2ban 非常容易设置,是保护任何使用身份验证的服务的好方法。

如果您想了解有关 fail2ban 如何工作的更多信息,您可以查看我们关于 fail2ban 规则和文件如何工作的教程。

有关如何使用 fail2ban 保护其他服务的信息,请尝试以下链接:

  • 如何在 Ubuntu 14.04 上使用 Fail2Ban 保护 Nginx 服务器
  • 如何在 Ubuntu 14.04 上使用 Fail2Ban 保护 Apache 服务器

©2015-2025 艾丽卡 support@alaica.com