使用firewalld拉黑恶意破密码登陆ip

#!/bin/bash
#自动拒绝恶意 IP 脚本
#auto drop ssh failed IP address
#定义变量
SSH_PORT=22
SEC_FILE=/var/log/secure
#如下为截取 secure 文件恶意 ip 远程登录,大于等于 4 次就写入防火墙,禁止以后再尝试登录服务器,第一次可以判断secure全文,后续可只匹配末尾1000行
IP_ADDR=`cat $SEC_FILE |grep "Failed password"| egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort -nr | uniq -c |awk ' $1>=4 {print $2}'`
#IP_ADDR=`tail -n 1000 $SEC_FILE |grep "Failed password"| egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort -nr | uniq -c |awk ' $1>=4 {print $2}'`
FIREWALL_CONF=/etc/firewalld/zones/public.xml
##检查防火墙
systemctl status firewalld > /dev/null 2>&1
   if [ $? -eq 0 ]; then
        firewall-cmd --reload > /dev/null 2>&1
        echo "firewalld is running" >> /root/firewallstatus.txt 2>&1
    else
        echo "Firewalld looks like not running, trying to start..." >> /root/firewallstatus.txt 2>&1
        systemctl start firewalld > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            echo "Firewalld start successfully..." >> /root/firewallstatus.txt 2>&1
        else
            echo "Failed to start firewalld" >> /root/firewallstatus.txt 2>&1
        fi
    fi
##把匹配到的ip加入firewalld防火墙
     for i in `echo $IP_ADDR`
     do
##查看 firewalld 配置文件是否含有提取的 IP 信息
     cat $FIREWALL_CONF |grep $i >/dev/null 2>&1
	if
		[ $? -ne 0 ];then
##判断 firewalld 配置文件里面是否存在已拒绝的 ip,如何不存在就不再添加相应条目
		firewall-cmd --permanent   --add-rich-rule="rule family='ipv4' source address="$i/32" port port="$SSH_PORT" protocol=tcp drop"  >/dev/null 2>&1
		echo `date +"%Y-%m-%d %H:%M:%S $i 此ip增加到防火墙拉黑"` >> /root/drop_ip.txt
	fi
    done
#最后重启 firewalld 生效
firewall-cmd --reload  >/dev/null 2>&1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>