摘要: 暴力破解攻击是指攻击者通过系统地组合所有可能性(例如登录时用到的账户名、密码),尝试所有的可能性破解用户的账户名、密码等敏感信息。攻击者会经常使用自动化脚本工具组合出正确的用户名和密码。 针对这种攻击除了常规性的调整服务器的设置账号密码的复杂度,以及调整默认端口外等方式提升攻击难度外,还可以通过开源工具fail2ban来进行设置防护规则来提高防护能力。

暴力破解攻击是指攻击者通过系统地组合所有可能性(例如登录时用到的账户名、密码),尝试所有的可能性破解用户的账户名、密码等敏感信息。攻击者会经常使用自动化脚本工具组合出正确的用户名和密码。

针对这种攻击除了常规性的调整服务器的设置账号密码的复杂度,以及调整默认端口外等方式提升攻击难度外,还可以通过开源工具fail2ban来进行设置防护规则来提高防护能力。

首先简单说一下服务器的基础防护设置
1、密码要满足复杂性要求
a.密码长度要求8位以上,最好是14位以上
b.密码要求至少包含大小写字母、数字和特殊符号四种字符中的三种以上

2、修改ssh程序默认的远程端口号
这一点可以通过调整 /etc/ssh/sshd_config 文件中的Port 参数来实现
修改了端口号之后远程工具进行连接时需要指定端口号才可以正常连接,通过ssh命令连接时需要通过-p参数指定端口号

3、修改默认的管理员账号
a.先对默认的root账号进行禁用(注意:阿里云控制台上的密码重置功能只对默认的root账号生效,如果做了此操作后后期是不能使用阿里云控制台的密码重置功能的),禁用方法直接修改root用户的登陆shell为 /sbin/nologin 即可。
screenshot

b.创建新的用户名,作为管理员账号,Linux系统判定管理员账号的方法是可以通过UID实现的,默认UID为0的用户是管理员,所以只需要创建用户后,在passwd文件中把用户UID改为0即可
创建用户,并设置密码,以及最终的修改效果,可以参考下图,通过id命令查询结果可以看到新建的用户权限是root权限
screenshot

通过上述方式的设置,是可以提升服务器针对暴力破解的防护能力的,设置之后基本上黑客想要暴力成功是很困难的。
但是如果暴力破解的情况很严重,虽然经过上述设置后,黑客很难暴力破解成功,但是由于暴力破解时服务器需要不断的对用户登录进行认证,也会导致服务器产生很多额外的开销,进而影响服务器的资源负载状况。
针对这种情况,可以考虑通过开源工具fail2ban监视日志情况将满足动作的相关IP利用iptables加入到dorp列表一定时间。
注意:这种方法如果手动重启了iptables服务的话,所有的drop规则会失效。
1、到fail2ban官网下载程序源码包
官网地址http://www.fail2ban.org 由于是海外站点,所以下载速度上可能比较慢,本文中通过稳定版fail2ban-0.8.14做演示,具体的下载地址
https://codeload.github.com/fail2ban/fail2ban/tar.gz/0.8.14
screenshot
screenshot

2、下载好的程序是源码包的形式,需要手动进行编译安装
这个程序是通过python语言编写的,需要通过python命令安装,要求python版本不能低于2.4 ,具体的python版本情况可以在系统中执行python -V进行核实
screenshot

安装完成后要手动生成一下程序的启动脚本
screenshot

3、程序文件说明
安装完成后程序文件都是保存在 /etc/fail2ban 目录下的
screenshot

/etc/fail2ban/action.d #动作文件夹,内含默认文件。iptables以及mail等动作配置
/etc/fail2ban/fail2ban.conf #定义了fai2ban日志级别、日志位置及sock文件位置
/etc/fail2ban/filter.d #条件文件夹,内含默认文件。过滤日志关键内容设置
/etc/fail2ban/jail.conf #主要配置文件,模块化。主要设置启用ban动作的服务及动作阈值

4、配置案例
设置条件:ssh远程登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,用户可重新登录。
需要修改/etc/fail2ban/jail.conf 文件实现防护规则配置
首先是全局配置,主要配置项如下
[DEFAULT] #全局设置
ignoreip = 127.0.0.1/8 #忽略的IP列表,不受设置限制
bantime = 600 #屏蔽时间,单位:秒
findtime = 600 #这个时间段内超过规定次数会被ban掉
maxretry = 3 #最大尝试次数
backend = auto #日志修改检测机制(gamin、polling和auto这三种)
然后是sshd程序防护设置
[ssh-iptables]
enabled = true #启用配置
filter = sshd #规律规则名,对应filter.d目录下的sshd.conf
action = iptables[name=SSH, port=ssh, protocol=tcp]

                        **#动作的相关参数,对应action.d/iptables.conf文件**
       sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"]        **#触发报警的收件人**

logpath = /var/log/secure #检测的系统的登陆日志文件。这里要写sshd服务日志文件
bantime = 3600 #禁止用户IP访问主机1小时
findtime = 300 #在5分钟内内出现规定次数就开始工作
maxretry = 3 #3次密码验证失败

注意:单个服务检查设置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置。

客户端测试,连续输错3次密码后无法正常连接到服务器,查看服务器中多了条针对源地址的连接REJECT策略
screenshot

5、fail2ban工作状态查询
a.插叙当前总的状态信息,可以看到有哪些规则存在拦截状态
screenshot

b.根据规则命令查询具体的拦截状态信息,可以查看到具体拦截了哪些IP
screenshot

Leave a Reply

Your email address will not be published. Required fields are marked *