介绍
将服务器或计算机连接到网络具有一定的风险。 任何连接到互联网的机器,包括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
您可以从底部的第二个查看新规则。
结论
你现在应该有一些额外的安全性,使你的服务器更强的目标暴力。 虽然这是一个很好的开始,一个更完整的解决方案将是完全禁用密码身份验证,并只允许基于密钥的身份验证。