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

首先使用crontab配置定时任务

crontab -e创建新的任务

1
0 * * * * /root/banip.sh

  创建新的脚本

1
touch banip.sh

  编辑脚本

1
vim banip.sh

  敲击insert

脚本内容为

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
#!/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 "防火墙规则已更新"

 如果上面的shell脚本使用存在问题,可以尝试如下脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
if [[ $(id -u) -ne 0 ]]; then
    echo "请使用root权限或者以具有执行lastb命令权限的用户身份运行脚本。"
    exit 1
fi
 
# 执行lastb -30命令并提取IP地址
ip_addresses=$(lastb -30 | awk "{print \$3}")
 
# 检查命令是否成功执行
if [[ $? -ne 0 ]]; then
    echo "执行lastb命令时出现错误。"
    exit 1
fi
 
# 遍历每个IP地址并添加防火墙规则
while read -r ip_address; do
    if [[ $ip_address =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
        sudo firewall-cmd --permanent --add-rich-rule="rule family=\"ipv4\" source address=\"$ip_address\" drop"
    fi
done <<< "$ip_addresses"
 
# 重新加载防火墙配置
sudo firewall-cmd --reload

  

 

敲击esc

输入:

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

给脚本授权

1
chmod +x banip.sh

  查看定时任务的执行情况

1
tail -f /var/spool/mail/root

  查看的内容

 查看防火墙的命令

1
firewall-cmd --list-all

  

 

posted @   不忘初心2021  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示