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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值