入门系列之使用fail2ban防御SSH服务器的暴力破解攻击

news/2024/5/19 13:37:37

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

本文由SQL GM 发表于云+社区专栏

介绍

对于SSH服务的常见的攻击就是暴力破解攻击——远程攻击者通过不同的密码来无限次地进行登录尝试。当然SSH可以设置使用非密码验证验证方式来对抗这种攻击,例如公钥验证或者双重验证。将不同的验证方法的优劣处先放在一边,如果我们必须使用密码验证方式怎么办?你是如何保护你的 SSH 服务器免遭暴力破解攻击的呢?

幸运的是,有一种工具可以缓解这种攻击这个工具是fail2ban。这可以配置为允许使用SSH进行合法登录,但在经过一定次数后无法正确验证后攻击将禁用IP地址。我们将在Debian上安装和配置该软件。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器。

第一步 - 安装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。我们稍后会讨论具体的禁止规则。
  • action:此参数指定其上方列出的操作快捷方式之一。它基本上调用一个banaction脚本(如上所述),然后为变量分配适当的信息并将它们传递给脚本。

    • 默认操作是action_调用脚本并将名称,端口,协议和链传递给脚本。它不会像其他一些操作那样发送电子邮件地址或日志行。

配置电子邮件警报

如果您希望将fail2ban配置为在禁止IP后通过电子邮件发送给您,您也可以在默认部分配置它。

如果已在计算机上配置了邮件服务器,则可以配置fail2ban以将电子邮件发送到外部邮件。
有两个相关参数:

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

    • 默认值root@localhost将邮件传递到当前计算机的root帐户。
    • 如果您配置了邮件服务器,请将其更改为外部邮件地址。
  • mta:这指定将用于传递邮件的邮件代理。

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

如果您希望配置电子邮件,则必须如上所述编辑action参数。将操作更改为“actionmw”或“actionmwl”,以将电子邮件信息传递给禁止脚本。

如果您已配置本地邮件传递,则可以通过输入以下内容来检查邮件:

sudo nano /var/mail/mail

配置特定于应用程序的Jails

在文件的下方,你应该看到标记为这样的部分:

[application_name]

您应该能够破译大多数参数。

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

如果fail2ban解析失败。logpath变量保存服务日志文件的路径,

您可以在此处覆盖任何其他默认参数。例如,对于SSH,maxretry选项与Debian安装中的dault选项不同。

第三步 - 配置iptables

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

在banaction参数下打开我们的jail配置中指定的文件:

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 usefulnessiptables -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链,该链立即将控制传递给我们的新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地址的任何数据包,这有效地禁止他们甚至再次尝试进行身份验证。

当bantime过去后,这条规则改变了禁令:

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 sshChain 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

您可以从底部看到新规则。

结论

您现在应该通过fail2ban使服务器成获得额外的安全性。虽然这是一个很好的开始,但更完整的解决方案是完全禁用密码身份验证并仅允许基于密钥的身份验证。更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Protect SSH with fail2ban on Debian 7》

问答

腾讯云服务器?

相关阅读

教你从0到1搭建小程序音视频

教你快速搭建一场发布会直播方案

移形换影 - 短视频色彩特效背后的故事

此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/dev...

欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

海量技术实践经验,尽在云加社区! https://cloud.tencent.com/dev...


http://lihuaxi.xjx100.cn/news/237390.html

相关文章

真实记录疑似Linux病毒导致服务器 带宽跑满的解决过程

案例描述 由于最近我在重构之前的APP&#xff0c;需要和server端进行数据交互&#xff0c;发现有一个现象&#xff0c;那么就是隔1~2天总会发生获取数据超时的问题&#xff0c;而且必须要重启服务器才能解决。早在之前&#xff0c;我有留意到这个问题&#xff0c;但是由于这个服…

深入挖掘Hyperledger Fabric中的私有数据

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 深入挖掘Hyperledger Fabric中的私有数据 私有数据是fabric中讨论最多的特性&#xff0c;在v1.2中发布。它在多个参与者之间引入了数据隐私…

C++STL 优先队列priority_queue使用

头文件&#xff1a;#include <queue> 一.申明方式 std::priority_queue<T> q; std::priority_queue<T, std::vector<T>, cmp> q;1.普通方法&#xff1a; priority_queue<int> q; //大的优先级高 priority_queue<int,vector<int>, …

TCP安全测试指南-魔兽3找联机0day

lxj616 2016/05/03 10:54在安全测试的过程中&#xff0c;我们通常使用应用层工具直接测试待测目标&#xff0c;比如一个HTTP网站应用程序&#xff0c;我们可以直接发送HTTP请求来对其进行模糊测试&#xff0c;而对于HTTPS&#xff0c;也可以建立SSL连接后直接发送HTTP请求对其…

p值 统计学意义_什么是统计意义? P值定义以及如何计算

p值 统计学意义P values are one of the most widely used concepts in statistical analysis. They are used by researchers, analysts and statisticians to draw insights from data and make informed decisions.P值是统计分析中使用最广泛的概念之一。 研究人员&#xff…

分布式系统中节点之间的同步形成区块链

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自链客区块链技术问答社区&#xff0c;未经允许拒绝转载。 分布式系统中节点之间的同步形成区块链 分布式系统由Tanenbaum定义&#xff0c;“分布式系统是一组独立的计算机&#xff0c;在”分布式…

干货 :数据可视化的10个关键术语

2019独角兽企业重金招聘Python工程师标准>>> Format 交互方式 交互式可视化允许您修改&#xff0c;操作和探索计算机显示的数据。绝大多数交互式可视化系统在计算机网络上&#xff0c;但越来越多出现在平板电脑和智能手机上。相比之下&#xff0c;静态可视化只显示单…

区块链基本解读

最近看着这个区块链&#xff0c;稍有新得&#xff0c;写下菜鸟自己的理解&#xff0c;希望大牛多多指点。 总体心得&#xff0c;如果互联网技术解决的是通讯问题的话&#xff0c;区块链技术解决的是信任问题。 下面举个日常例子&#xff1a;打赌 比如A和B赌石头是否为天然玉石&…