使用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 |
标签:
linux
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异