当前位置: 首页 > 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.xdnf.cn/news/1263781.html

相关文章:

  • 第39周——训练自己的数据集
  • vscode EIDE 无法编译,提示 “文件名、目录名或卷标语法不正确;
  • C语言编译流程讲解
  • centos出现ping: baidu.com: 未知的名称或服务问题
  • DMETL简单介绍、安装部署和入门尝试
  • nflsoi 8.8 题解
  • Linux 内核发包流程与路由控制实战
  • 用 “故事 + 价值观” 快速建立 IP 信任感
  • 亚马逊广告运营如何平衡ASIN投放和关键词投放
  • Chrome DevTools Protocol 开启协议监视器
  • C/C++与JavaScript的WebAssembly协作开发指南
  • Vue框架总结案例
  • 机器学习-----SVM(支持向量机)算法简介
  • PEV2(PostgreSQL Explain Visualizer 2)
  • 「安全发」ISV对接支付宝+小猎系统
  • DataFun联合开源AllData社区和开源Gravitino社区将在8月9日相聚数据治理峰会论坛
  • Blob File Buffer ArrayBuffer uint8Array DataView 的关联
  • 使用pytest对接口进行自动化测试
  • 5. 缓存-Redis
  • Java文件操作与IO流核心技术解析
  • 【matlab】采样信号的低通滤波、高通滤波
  • PeiQi网络安全知识文库PeiQi-WIKI-Book保姆式搭建部署教程
  • 【探展WAIC】从“眼见为虚”到“AI识真”:如何用大模型筑造多模态鉴伪盾牌
  • PyQt简介
  • 本地开发penpot源码支持AI原型设计(一)
  • 深圳市天正达电子股份有限公司参展AUTO TECH China 2025 广州国际汽车技术展览会
  • 【感知机】感知机(perceptron)学习算法知识点汇总
  • 使用pybind11封装C++API
  • 智能体协同作战:实现工具调用成功率提升47%的架构奥秘
  • C语言学习笔记——编译和链接