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

本文由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...

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

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

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由SQL GM 发表于云+社区专栏 介绍 对于SSH服务的常见的攻击就是暴力破解攻击--远程攻击者通过不同的密码来无限次地进行登录尝试. ...

  2. 13.DoS防御----BeEF浏览器渗透----暴力破解之美杜莎---DNS指南

    DoS防御 启用ICMP,UDP,TCP泛洪过滤 登录路由器管理后台 高级-安全部分 BeEF浏览器渗透 用kali进行客户端攻击 钓鱼攻击 打开beef 浏览器打开beef cd /usr/shar ...

  3. 如何防止自己的云服务器被暴力破解密码(限制暴力破解并发送邮件到自己的邮箱)

    如何防止自己的云服务器被暴力破解密码(限制暴力破解并发送邮件到自己的邮箱) 今天看到自己的阿里云服务器被别有用心的人gank一波,于是才想到得设置一套完美的防火墙策略了 首先黑客登录失败的日志为/va ...

  4. 一觉醒来,小R的服务器被暴力破解,被植入挖矿程序?

    一觉醒来,小R的服务器被暴力破解,被植入挖矿程序? 下面我们分析一下,是如何被攻击的,先使用git找到我的服务器地址,首次登陆在7点57分,小R还没起床,肯定不是自己登录的,当时小R还没有注意,但是过 ...

  5. 使用 fail2ban 防御 SSH 暴力破解

    前言: 刚会使用服务器,这就一直有人来破解,虽说**99%**他们破解不了,但是一直被扫,负载一直增加,看着很不爽就百度了fail2ban,贼好玩 嗯~ o( ̄▽ ̄)o,所以总结一下. 0x01:Fa ...

  6. fail2ban配置教程 有效防止服务器被暴力破解

    最近这两天在华为云的服务器上搭建了一个<我的世界>私服,原来这台服务器是放了个小破站点,后来迁移到腾讯云了,结果就闲置了,在我搭建那个私服的时候是重置了系统的,结果服务器上配置的那些规则, ...

  7. 用SHELL脚本来防SSH和vsftpd暴力破解(第②版)

    新近刚上的FTP备份服务器,例行检查/var/log/secure日志时,发现不少sshd和vsftpd失败认证信息,很明显有人想用暴力破解工具窃取密码,所以需要编写一个安全脚本防止. 脚本需求如下: ...

  8. 阿里云服务器防止暴力破解设置

    限制用户登录次数,超过登录次数后锁定一段时间: vi /etc/pam.d/sshd 在#%PAM-1.0的下面,即第二行,添加内容,一定要写在前面,如果写在后面,虽然用户被锁定,但是只要用户输入正确 ...

  9. 【Linux 主机ssh远程连接暴力破解详解】

    昨天,安全老师布置了一个安全的小作业,在下想了想,做什么好呢?最近学了很多.那就做一个Linux主机远程连接的暴力破解密码的作业. 一.前期信息搜集 kali 作为黑客主机,centos作为被攻击主机 ...

最新文章

  1. VMware 下扩展linux硬盘空间
  2. 根据当前时间如何找到上月的第一天和最后一天?
  3. Asp.net WebForm中应用Jquery EasyUI Layout
  4. CV中的色彩空间大全
  5. 提到刺这种兵器的guandan
  6. iOS nav加角标
  7. Windows : Win 7 FT服务器 配置
  8. Hadoop 的核心(1)—— HDFS
  9. LINQ学习之旅——准备(C#3.0新特性补充)
  10. mysql database table_mysqldump database table
  11. ICE专题:编译环境构建
  12. 【刷题】BZOJ 1124 [POI2008]枪战Maf
  13. C 标准库 - stdio.h
  14. Bryntum Web JavaScript Components Crack
  15. ie ajax十分卡,解决JQuery .ajax 在IE下卡死问题
  16. win10下出现.net framework 3.5错误代码0x800F081F的问题
  17. 搭建hexo博客与yilia主题优化
  18. 【面经】兴业证券大数据工程师面经
  19. windows 10 时间同步,时间显示不准自动校准。
  20. 【camera】手机相机系统

热门文章

  1. C++中的explicit关键字介绍
  2. linux 测试环境启用jar_Linux下用java -jar运行可执行jar包的方法教程
  3. php数据 文本_php直接调用文本文件内容
  4. 文件名转换为utf8 c语言,文件名编码转换:从 gb* 转向 utf8 必备工具 convmv
  5. python gil 解除_python GIL的解读
  6. Java项目:在线商城系统(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)
  7. Java项目:中小医院信息管理系统(java+Springboot+ssm+mysql+maven+jsp)
  8. java并发读取相同的文件_高效读取大文件,再也不用担心 OOM 了!
  9. 【Linux】Linux简单操作之文件管理
  10. jQuery中的页面载入($()、ready(fn)、onload)