脚本禁止登录尝试 需求 有ip不停的尝试登录,可以通过防火墙进行屏蔽
脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 cat /var/log/secure |grep failure|awk '{for (i=1;i<=NF;i++){if ($i ~/rhost/) {print $i}}}' | sort | uniq |awk -F"=" '{print $2}' >> black.listcat black.list|sort |uniq > black.list.tmprm -rf black.listmv black.list.tmp black.list firewall-cmd --list-rich-rules > blackiprule.list all=`cat blackiprule.list`for ip in `cat black.list|sort |uniq `do if [[ $all =~ $ip ]]then :else echo "不包含" firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='$ip ' reject" fi done cat blackiprule.list|wc -l firewall-cmd --reload
定期执行脚本即可
上面的脚本存在一个问题,如果机器上面拒绝的ip太多了话,这个防火墙的列表会非常的大,而下面的这个就没有这个问题,建议用下面的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@VM-4-7-centos ~]cat /var/log/secure |grep failure|awk '{for (i=1;i<=NF;i++){if ($i ~/rhost/) {print $i}}}' | sort | uniq |awk -F"=" '{print $2}' >> /root/black.listcat /root/black.list|sort |uniq > /root/black.list.tmprm -rf /root/black.listmv /root/black.list.tmp /root/black.list > /etc/hosts.denyfor ip in `cat black.list|sort |uniq `do echo ALL:$ip >> /etc/hosts.denydone cat black.list|wc -l
写一个定时任务
1 2 [root@VM-4-7-centos ~] */30 * * * * root /root/blackdeny.sh
上面是通过/etc/hosts.deny方式的 下面提供另外一个ipset的模式的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 #!/bin/bash cat /var/log/secure | grep failure | awk '{for (i=1;i<=NF;i++){if ($i ~/rhost/) {print $i}}}' | \ sort | uniq | awk -F"=" '{print $2}' | \ grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' >> /root/black.listcat /root/black.list | sort | uniq > /root/black.list.tmp ipset list blocked_ips 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' > /tmp/blocked.current grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' /root/black.list.tmp | \ grep -vxFf /tmp/blocked.current > /root/blocking.listrm -f /root/black.listmv /root/black.list.tmp /root/black.listif [ -s /root/blocking.list ]; then added=0 skipped=0 for ip in $(cat /root/blocking.list | sort | uniq ); do if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then if ipset add blocked_ips "$ip " 2>/dev/null; then echo "$(date) - 已添加: $ip " >> /var/log/ipset_auto.log ((added++)) else ((skipped++)) fi fi done echo "$(date) - 添加完成: 新增$added 个IP, 跳过$skipped 个" >> /var/log/ipset_auto.log ipset list blocked_ips 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' > /root/blocked.listelse echo "$(date) - 没有需要新增的IP" >> /var/log/ipset_auto.logfi echo "当前已封禁IP数: $(wc -l < /root/black.list 2>/dev/null || echo 0) "
通过ipset结合iptables来进行封禁
下面是目前收集到的,可以预填充下列表(截止2024年12月27日 3572个ip)
1 wget https://www.zphj1987.com/images/black.list
可以作为初始的ip