当前位置: 首页 > news >正文

Shell脚本实现自动封禁恶意扫描IP

iptables 简介

我们使用iptables工具实现功能

iptables 是 Linux 系统上最常用的防火墙工具,可以指定策略。

Shell文件创建

首先我们先创建文件scanners.sh

vim /usr/local/bin/auto_block_ip.sh

我的目标是每10分钟自动扫描,再10分钟内一个IP访问50次以上就就封禁1天。时间到了后再自动放出来。

第一步 定义部分参数

BAN_IPSET="malicious_ips"  # ipset集合名称
SCAN_THRESHOLD=50          # 10分钟内访问50次触发封禁
BAN_DURATION=$((24*60*60)) # 封禁持续时间(秒),24小时
EXCLUDE_IPS="127.0.0.1 0.0.0.0 192.168.253.1" # 排除的IP列表

第二步 创建iptables规则

# 创建ipset集合(如果不存在)
if ! ipset list $BAN_IPSET >/dev/null 2>&1; thenipset create $BAN_IPSET hash:ip timeout $BAN_DURATION
fi# 添加iptables规则(如果不存在)
if ! iptables -C INPUT -m set --match-set $BAN_IPSET src -j DROP >/dev/null 2>&1; theniptables -I INPUT -m set --match-set $BAN_IPSET src -j DROP
fi

第三步 添加IP检测和封禁机制

# 获取所有非排除IP的连接计数
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | grep -vE "$(echo $EXCLUDE_IPS | sed 's/ /|/g')" | uniq -c | \
while read count ip; do# 检查是否超过阈值且未被封禁if [ $count -gt $SCAN_THRESHOLD ] && ! ipset test $BAN_IPSET $ip >/dev/null 2>&1; then# 封禁IPipset add $BAN_IPSET $ip timeout $BAN_DURATIONecho "$(date '+%Y-%m-%d %H:%M:%S') - 封禁IP: $ip (访问次数: $count)" >> /var/log/ip_block.logfi
done

第四步 设置自动执行时间

# 设置定时任务
(crontab -l 2>/dev/null; echo "*/10 * * * * /usr/local/bin/auto_block_ip.sh") | crontab -

第五步 测试脚本功能以及脚本使用命令

# 给脚本执行权限
chmod +x /usr/local/bin/auto_block_ip.sh# 手动测试脚本
/usr/local/bin/auto_block_ip.sh# 查看封禁日志
tail -f /var/log/ip_block.log# 查看当前封禁IP列表
ipset list $BAN_IPSET# 手动解封IP
ipset del $BAN_IPSET IP地址# 清空所有封禁
ipset flush $BAN_IPSET# 删除整个ipset集合
ipset destroy $BAN_IPSE

附:

#!/bin/bash# 配置参数
BAN_IPSET="malicious_ips"
SCAN_THRESHOLD=50
BAN_DURATION=$((24*60*60))
EXCLUDE_IPS="127.0.0.1 0.0.0.0 192.168.253.1"# 创建ipset集合
if ! ipset list $BAN_IPSET >/dev/null 2>&1; thenipset create $BAN_IPSET hash:ip timeout $BAN_DURATION
fi# 添加iptables规则
if ! iptables -C INPUT -m set --match-set $BAN_IPSET src -j DROP >/dev/null 2>&1; theniptables -I INPUT -m set --match-set $BAN_IPSET src -j DROP
fi# 检测并封禁IP
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | grep -vE "$(echo $EXCLUDE_IPS | sed 's/ /|/g')" | uniq -c | \
while read count ip; doif [ $count -gt $SCAN_THRESHOLD ] && ! ipset test $BAN_IPSET $ip >/dev/null 2>&1; thenipset add $BAN_IPSET $ip timeout $BAN_DURATIONecho "$(date '+%Y-%m-%d %H:%M:%S') - 封禁IP: $ip (访问次数: $count)" >> /var/log/ip_block.logfi
done

http://www.lryc.cn/news/614584.html

相关文章:

  • 後端開發技術教學(三) 表單提交、數據處理
  • vscode EIDE 无法编译,提示 “文件名、目录名或卷标语法不正确;
  • WPF 表格中单元格使用下拉框显示枚举属性的一种方式
  • 数据大集网:重构企业贷获客生态的线上获客新范式​
  • Ignite内部事件总线揭秘
  • Android 之 OOM的产生和解决办法
  • K-Means 聚类
  • 嵌入式第二十三课 !!!树结构与排序(时间复杂度)
  • AD布线时,如何设置线宽和线间距?简单
  • OpenAI 时隔多年再开源!GPT-OSS 120B/20B 发布,支持本地部署,消费级 GPU 即可运行
  • 五十六、【Linux系统nginx服务】nginx虚拟主机实现
  • InfluxDB 权限管理与安全加固(一)
  • leetcode热题——有效的括号
  • 安全合规1--实验:ARP欺骗、mac洪水攻击、ICMP攻击、TCP SYN Flood攻击
  • C++AVL树
  • windows自动获取wsl IP,并开启端口转发。
  • 供应链项目中产品的ABC XYZ分类法弊端(十)
  • 常见通信协议详解:TCP、UDP、HTTP/HTTPS、WebSocket 与 RPC
  • [科普] AI加速器架构全景图:从GPU到光计算的算力革命
  • 【0基础3ds Max】主工具栏介绍(上)
  • [链表]142. 环形链表 II
  • Java 大视界 -- 基于 Java 的大数据分布式计算在气象灾害数值模拟与预警中的应用(388)
  • 大模型性能测试实战指南:从原理到落地的全链路解析
  • 【Day 19】Linux-网站操作
  • 小程序难调的组件
  • Vite 深度解析:现代前端开发引擎
  • AI 记忆管理系统:工程实现设计方案
  • Introducing Visual Perception Token into Multimodal Large Language Model论文解读
  • 脚本统计MongoDB集合结构信息
  • 关于数据结构6-哈希表和5种排序算法