shell-将密码输入错误超过4次的IP地址通过firewalld防火墙阻止访问

  • Post author:
  • Post category:其他


应用场景:防止恶意IP尝试ssh登录

脚本说明:将密码输入错误超过四次得ip地址通过iptable防火墙访问。

分析:

  1. 首先,需要知道ssh远程访问记录在哪一个文件中  /var/log/secure
  2. 其次,模拟远程访问输错密码,查看日志文件
  3. 再次,通过日志可以看到关键信息“Failed password”表示错误密码有可能事手误引起得,所以设定几次错误为恶意试探密码,建议设置为4;还有需要将恶意试探密码主机得ip提取出来,对提取得ip地址进行统计计数
  4. 最后,需要明确怎么在脚本中通过iptables策略设置阻止恶意ip访问策略添加到哪里合适;防火墙2配置文件等。

模拟远程访问,查看日志

发现每一次错误密码后,显示主机ip时前都有

Failed password

所以我还可以借助Failed password字段来获取 恶意访问ip。二ip在倒数第三个字段(以空格为分隔符)


awk ‘/Failed password/ {print $(NF-3)}’ /var/log/secure


设定4次错误为恶意试探密码,并提取得ip地址进行统计计数

首先我没需要将恶意IP地址进行统计


[root@cotenos ~]# awk  ‘/Failed password/ {IP[$(NF-3)]++} END{for (i in IP) print i,IP[i]}’ /var/log/secure


对超过4次的错误的ip进行选取


[root@cotenos ~]# awk  ‘/Failed password/ {IP[$(NF-3)]++} END{for (i in IP) {


if ($IP[i] >= 4)

print i,IP[i]}}’ /var/log/secure


或者


[root@cotenos ~]# awk ‘/Failed password/ {print $(NF-3)}’ /var/log/secure | sort | uniq -c | awk ‘$1>=4 {print $2}’


最后将获取的ip遍历,使用firewalld-cmd命令对ip进行阻隔

总代码

#!/bin/bash
bath=/var/log/secure

ip=`awk '/Failed password/ {IP[$(NF-3)]++} END{for (i in IP) {if ($IP[i] >= 4) print i}}' $bath`
for i in $ip
do
        firewall-cmd --add-rich-rule="rule family=ipv4 source address=$i/32 service name=ssh dorp"

done



版权声明:本文为weixin_58297531原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。