一、暴力破解Linux密码失败次数统计
服务器放在公网环境中,避免不了受到攻击,主要的攻击方式就是暴力破解Linux系统用户密码,不断的尝试破解密码。我们可以统计出有哪些ip尝试破解过密码,一般而言,密码失败3次及以上都不是正常的。自己的密码自己不可能输错3次以上。3次以上的就要注意了,可能就是在尝试破解你的密码。我们可以找出这些ip,然后拒绝这些ip地址访问服务器。那如何做呢?
统计密码失败次数和访问者ip地址
我们可以用awk来进行统计,将ip地址作为数组的下标,然后每匹配到一次相同的ip就将数组的值加1,最后将每个数组的值打印出来就可以了。数组的特点就是一个数组可以有多个值,如数组ip,ip[192.168.0.1]=1,ip为数组,192.168.0.1位数组的下标,1是数组的值。每个下标可以有一个数组的值,这样我们可以打印下标和对应的值,就可以得到每个ip地址出现了多少次,就可以达到统计的效果。
linux安全日志示例
命令如下:
awk '/Failed/{ip[$(NF-3)]++}END{for(i in ip){print i,ip[i]}}' /var/log/secure
# 通过逐行任务将日志中的ip地址作为数组ip的下标,每匹配到一次相同的ip地址就将数组的值加1,最后将数组的值输出,就可以得到日志中每个ip登录失败的次数和来访ip地址。
命令解析:
Failed:这个是安全日志中记录密码错误的关键字,匹配到这个关键字就可以找到所有密码输入错误的来访ip。
ip[$(NF-3)]++:这个是自定义的数组ip,NF:表示最后一列,NF-3:表示倒数第4列,也就是IP地址所在的列,$(NF-3): 表示倒数第4列的值,也就是IP地址,ip[$(NF-3)]:表示以IP地址为下标的数组ip;ip[$(NF-3)]++: 数组的值自加1。
for(i in ip):for循环,以i为变量,循环数组ip,循环数组取的值是下标。将数组ip的下标循环赋予给i。也就是将IP地址赋予给i。
{print i,ip[i]}:打印变量i,也就是IP地址,打印数组ip[i]的值,也就是下标为ip地址的数组的值,IP地址+次数,如:192.168.0.1 20;192.168.0.1 输入密码错误20次。
/var/log/secure:linux系统安全日志,记录了linux有关安全方面的日志。redhat,centos的日志为/var/log/secure,ubuntu的日志为/var/log/auth。日志结构是一样的。
统计结果示例
二、如何处理暴力破解的来访IP地址
如果有人试图通过尝试密码来破解Linux系统的账号密码,那肯定是需要预防这种情况了。既然已经确认这个IP地址是攻击者,那么就应该直接拒绝这个IP地址来访问我们的服务器了。不止ssh连接,任何跟这个IP地址有关的访问直接拉黑,永久拒绝此IP的任何访问。我们可以将这个IP地址添加到防火墙的drop区域中,这样这个IP地址的任何请求都会被拒绝。前提是要开启防火墙。
如何添加ip地址到防火墙的drop区域中
方法一:命令行添加
命令如下:
firewall-cmd --permanent --zone=drop --add-source=192.168.0.1 #将ip地址添加到drop区域中拒绝其访问。
firewall-cmd --reload #重新加载防火墙配置
firewall-cmd:centos7防火墙的命令
--permanent:永久添加,不加此选项,firewall-cmd命令临时生效,重启服务器失效。
--zone=drop:指定防火墙区域的为drop,在drop区域添加策略。
--add-source:添加源地址。访问者的IP地址。
方法二、修改防火墙存储策略的文件/etc/firewalld/zones/drop.xml
添加一行<source address='你要拒绝访问的ip地址'/> 到/etc/firewalld/zones/drop.xml,然后要重新加载防火墙。firewall-cmd --reload
我们可以借助这两种手段来加强服务器的安全性,通过脚本将密码输错3次及以上的来访ip加入到防火墙的drop区域中,拒绝这个ip地址访问服务器,计划任务定期执行这个脚本。