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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

应用场景防止恶意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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: shell