使用centos自带的防火墙配置禁ip访问程序

不忘初心2021 / 2024-01-21 / 原文

首先使用crontab配置定时任务

crontab -e创建新的任务

0 * * * * /root/banip.sh

  创建新的脚本

touch banip.sh

  编辑脚本

vim banip.sh

  敲击insert

脚本内容为

#!/bin/bash

# 获取最近20次登录失败的IP地址
FAILED_LOGINS=$(journalctl --since="20 minutes ago" | grep "Failed password" | awk '{print $(NF-3)}' | sort)

# 统计每个IP的登录失败次数
LOGIN_COUNTS=$(echo "$FAILED_LOGINS" | uniq -c)

# 定义防火墙规则的动作(DROP)
FIREWALL_ACTION="drop"

# 设置阈值,只有登录失败次数大于3次的IP才会被加入黑名单
THRESHOLD=3

# 添加防火墙规则
echo "$LOGIN_COUNTS" | while read COUNT IP_TO_BLOCK; do
    if [ "$COUNT" -gt "$THRESHOLD" ]; then
        sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='$IP_TO_BLOCK' $FIREWALL_ACTION"
        if [ $? -eq 0 ]; then
            echo "IP $IP_TO_BLOCK 已被添加到防火墙规则"
        else
            echo "添加规则时出现错误"
        fi
    fi
done

# 重新加载防火墙规则
sudo firewall-cmd --reload

echo "防火墙规则已更新"

  敲击esc

输入:

:后面跟wq,代表保存并退出

给脚本授权

chmod +x banip.sh

  查看定时任务的执行情况

tail -f /var/spool/mail/root

  查看的内容

 查看防火墙的命令

firewall-cmd --list-all