如何在Debian 7上使用fail2ban保护SSH

介绍

将服务器或计算机连接到网络具有一定的风险。 任何连接到互联网的机器,包括VPS,都是恶意攻击的潜在目标。

虽然具有良好配置的防火墙将防止各种非法访问,但您仍然需要打开某些服务,以允许您自己登录和管理服务器的能力。 SSH是最常用于登录到远程系统的服务,因此它也是最常用的目标之一。

幸运的是,有可用的工具,它可以减轻这种攻击向量,叫的fail2ban。 这可以配置为允许使用SSH的合法登录,但在IP地址在设置的次数后无法正确验证后禁用IP地址。

我们将在Debian 7 VPS上安装和配置此软件。

第一步 - 安装fail2ban

Debian在其默认存储库中包括fail2ban。 我们可以下载并安装它使用以下命令集:

sudo apt-get update
sudo apt-get install fail2ban

这将不仅安装fail2ban,它也将使用默认设置启动服务。

第二步 - 配置fail2ban

该配置的fail2ban保存在/etc/fail2ban目录。 指定默认的禁止规则的配置文件称为jail.conf

由于fail2ban在程序具有新版本时更新其配置文件的方式,因此我们不应编辑默认配置文件。

相反,我们应该将其复制到新位置并在那里进行编辑:

cd /etc/fail2ban
sudo cp jail.conf jail.local
sudo nano jail.local

在这里,我们可以更改任何我们不喜欢的设置在默认配置中设置。

默认配置

开头的部分[DEFAULT]配置可以在更为具体的语境后面的配置覆盖默认值。 有一个好的默认值。

已经给出的大多数设置是默认选项的好选择。 但是,有一些区域可以从配置中受益。

禁用默认值

我们可以通过修改几个参数来配置fail2ban实现其禁止的方式。 这里有一些更重要的:

  • ignoreip:此参数采用应从的fail2ban规则来排除的IP地址的列表。 这里列出的IP地址或块不会对它们有限制,因此明智地选择它们。

    • IP地址和范围由空格分隔。
    • 您应该将您的家庭或工作IP地址添加到列表的结尾,以便您在登录时遇到问题时不会被阻止。
    • 这将是这样的:“ignoreip = 127.0.0.1/8 YOUR_IP_ADDRESS
  • bantime:列出时间的禁令将持续的金额,如果客户端无法正确验证。 它以秒为单位。

    • 默认值禁用客户端10分钟。
  • maxretry:此参数指定禁令提起之前允许尝试的次数。

定义禁用操作

当需要禁止时,fail2ban可以以不同的方式进行处理。 它通过查看以下参数来决定必要的操作:

  • banaction:此设置指定需要的禁令时将使用的配置文件。

    • 这个参数的值是指在一个文件/etc/fail2ban/action.d目录,这将处理实际的禁止过程。
    • 默认值使用iptables(防火墙)在认证失败时禁止所有端口上的IP。 稍后我们将讨论具体的禁止规则。
  • 作用 :该参数指定它上面列出的动作快捷方式之一。 它基本上调用banaction脚本(如上所述),然后相应的信息给变量分配,并将它们传递给脚本。

    • 默认的操作是action_ ,它调用脚本并通过名称,端口,协议和连锁的脚本。 它不发送电子邮件地址或日志行,因为一些其他操作。

配置电子邮件警报

如果您想要配置fail2ban,当它建立禁令时发送电子邮件给您,您也可以在默认部分中配置。

如果已在计算机上配置了邮件服务器,则可以将fail2ban配置为将电子邮件发送到外部地址。 否则,您可以将其传递到本地UNIX帐户。

有两个相关的参数:

  • destemail:此选项设置,将在禁止的情况下,通知的电子邮件地址。

    • 默认值“root @ localhost”将邮件发送到当前计算机的root帐户。
    • 如果您配置了邮件服务器,请随时将其更改为外部邮寄地址。
  • MTA:指定将被用于运载邮件的邮件代理。

    • 如果您的邮件服务器配置了sendmail,请保留默认选项(sendmail)。
    • 如果您没有配置邮件服务器,但希望将本地邮件递送到用户帐户,则可以将“sendmail”更改为“邮件”。

如果你想配置电子邮件,你将不得不修改action上述参数。 更改操作要么“行动MW”或“行动 MWL”有传递给取缔脚本的电子邮件信息。

如果您已配置本地邮件递送,则可以键入以下内容来检查邮件:

sudo nano /var/mail/mail

配置特定于应用程序的Jails

在文件中,您应该看到如下标记的部分:

[application_name]

你应该能够解密大多数参数。

filter参数指定内的文件/etc/fail2ban/filter.d目录。 这告诉fail2ban如何解析失败的身份验证程序的程序的日志文件。

logpath变量保存的路径,该服务的日志文件,该文件的fail2ban将解析的故障。

您可以在此重写任何其他默认参数。 例如, maxretry选项对于SSH比一个Debian安装dault选项不同。

第三步 - 配置iptables

我们实际上不会做太多配置的iptables,但我们将看看实现其行为的配置文件。 这将有助于我们了解fail2ban如何实现其禁止策略。

打开是在根据我们的监狱配置中指定的文件banaction参数:

sudo nano /etc/fail2ban/action.d/iptables-multiport.conf

在这里,我们可以看到当fail2ban调用有IP被禁止时实际发生什么。 它使用iptables防火墙软件来实现规则。

当fail2ban开始时,它调用这些行:

actionstart = iptables -N fail2ban-<name>
              iptables -A fail2ban-<name> -j RETURN   # questionable usefulness
              iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>

这将初始化环境以使流量通过过滤链。

iptables软件根据“渠道”或“链”控制流量。 每个渠道对提供给它的所有流量应用规则,以决定它是否可以接受。

第一行iptables -N fail2ban-<name> ,创建一个名为“fail2ban-”的服务的名称下面的新链。 这将保留禁止某些IP地址的规则。

下一行iptables -A fail2ban-<name> -j RETURN ,增加了一个规则,我们刚刚创建的链条,它告诉iptables来控制返回给调用这条产业链的链条。

最后一行, iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name> ,添加一条规则,INPUT链(在我们的jail.local文件中指定),在紧接将控制权传递给我们的新fail2ban链。

因此,当前流是入站流量由我们的INPUT链处理。 此时,它将规则传递控制传递给fail2ban链。 该链中的第一个规则将控制传递回调用它的链INPUT链。

所以,在这一点上,控制只是来回传递,没有什么实际发生。 但是,我们已经设置了一个控制流,以适应额外的规则。 当我们需要禁止IP地址时,我们可以向上面的fail2ban链添加另一个规则,它将控制传递回INPUT链。

我们可以看到拆除fail2ban规则的补充操作,当服务停止时,这里:

actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
             iptables -F fail2ban-<name>
             iptables -X fail2ban-<name>

这基本上只是逆转了我们刚刚建立的所有规则。

禁用客户端时,将实施此规则:

actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP

这告诉iptables从该IP地址丢弃任何数据包,这有效地禁止他们甚至尝试再次认证。

当班次过去时,这条规则颠倒了禁令:

actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP

如果您想要查看哪些规则实现和哪些IP地址当前被禁止,您可以通过键入以下内容检查当前iptables规则:

sudo iptables -L

如果任何客户端被禁止,他们将在底层链。

第四步 - 重新启动fail2ban

对配置进行任何更改后,需要重新启动fail2ban以实施新规则。

您可以通过键入以下命令来执行此操作:

sudo service fail2ban restart

要测试新规则,您可以创建另一个VPS实例,并在足够多次的时间内从该计算机进行不正确的身份验证,以触发禁止规则。 之后,您的SSH调用甚至不会返回密码提示。

如果查看配置的主机上的iptable规则,您将看到一条新规则:

sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain fail2ban-ssh (1 references)
target     prot opt source               destination         
DROP       all  --  xxx-xxxxxxxx.dyn.xxxxxxxxx.net  anywhere            
RETURN     all  --  anywhere             anywhere

您可以从底部的第二个查看新规则。

结论

你现在应该有一些额外的安全性,使你的服务器更强的目标暴力。 虽然这是一个很好的开始,一个更完整的解决方案将是完全禁用密码身份验证,并只允许基于密钥的身份验证。

作者:Justin Ellingwood
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏