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

从实列中学习linux shell6: 写一个 shell 脚本 过滤 恶意ip 攻击

下面是检测和过滤恶意IP攻击的Shell脚本,包含自动分析日志、封锁IP、白名单管理等功能:

第一步:过滤脚本

#!/bin/bash# 配置区域(根据需求修改)
LOG_FILES=(/var/log/auth.log /var/log/nginx/access.log)  # 监控的日志文件
THRESHOLD=10              # 触发封锁的请求阈值
TIME_RANGE=300           # 统计时间范围(秒)
WHITELIST=(127.0.0.1 192.168.1.0/24) # IP白名单
FIREWALL_TOOL="auto"     # 防火墙工具 auto/iptables/firewalld
BAN_TIME="86400"         # 封锁时间(秒)86400=24小时
MAIL_TO="admin@example.com" # 报警通知邮箱# 全局变量
BAD_IPS=()
CURRENT_IPS=()
TMP_DIR="/tmp/ipshield"
mkdir -p $TMP_DIR# 日志函数
log() {echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a /var/log/ipshield.log
}# 获取系统防火墙工具
detect_firewall() {if [ "$FIREWALL_TOOL" = "auto" ]; thenif systemctl status firewalld &> /dev/null; thenecho "firewalld"elif which iptables &> /dev/null; thenecho "iptables"elselog "错误:未找到可用的防火墙工具"exit 1fielseecho $FIREWALL_TOOLfi
}# 防火墙管理函数
block_ip() {local ip=$1local fw_tool=$(detect_firewall)# 检查是否已存在封锁规则case $fw_tool in"iptables")if ! iptables -nL | grep -q $ip; theniptables -A INPUT -s $ip -j DROPlog "已通过iptables封锁IP: $ip"fi;;"firewalld")if ! firewall-cmd --list-rich-rules | grep -q $ip; thenfirewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='$ip' reject"firewall-cmd --reloadlog "已通过firewalld封锁IP: $ip"fi;;esac
}# 分析SSH暴力破解
analyze_ssh() {log "正在分析SSH日志..."local logfile=$1local cutoff_time=$(date -d "-${TIME_RANGE} seconds" +"%Y-%m-%d %H:%M:%S")grep "Failed password" $logfile | awk -v ct="$cutoff_time" '$1" "$2 >= ct {for(i=1;i<=NF;i++){if($i=="from") {print $(i+1); break}}}' | tr -d '()' | sort | uniq -c | while read count ip; doif [ $count -ge $THRESHOLD ]; thenBAD_IPS+=($ip)fidone
}# 分析HTTP攻击
analyze_http() {log "正在分析HTTP访问日志..."local logfile=$1local cutoff_time=$(date -d "-${TIME_RANGE} seconds" +"%d/%b/%Y:%H:%M")awk -v ct="$cutoff_time" -v thr=$THRESHOLD '$4 >= "["ct {if($9 ~ /40[0-9]/ || $7 ~ /(wp-login|admin|sql)/) {print $1}}' $logfile | sort | uniq -c | while read count ip; doif [ $count -ge $thr ]; thenBAD_IPS+=($ip)fidone
}# 主检测函数
detect_malicious_ips() {for logfile in "${LOG_FILES[@]}"; do[ ! -f $logfile ] && continuecase $logfile in*auth.log*) analyze_ssh $logfile ;;*access.log*) analyze_http $logfile ;;esacdone# 去重处理BAD_IPS=($(printf "%s\n" "${BAD_IPS[@]}" | sort -u))
}# 白名单过滤
filter_whitelist() {for ip in "${BAD_IPS[@]}"; dolocal is_whitelisted=0for white_ip in "${WHITELIST[@]}"; doif ipcalc -n "$white_ip" | grep -q "$ip"; thenis_whitelisted=1breakfidone[ $is_whitelisted -eq 0 ] && CURRENT_IPS+=($ip)done
}# 发送邮件通知
send_alert() {[ -z "$MAIL_TO" ] && returnlocal subject="[安全警报] 检测到恶意IP攻击"local body="已封锁以下恶意IP:\n${CURRENT_IPS[@]}\n\n详细信息请查看系统日志"echo -e $body | mail -s "$subject" $MAIL_TO
}# 主程序
main() {log "====== 开始恶意IP检测 ======"detect_malicious_ipsfilter_whitelistif [ ${#CURRENT_IPS[@]} -gt 0 ]; thenlog "检测到可疑IP:${CURRENT_IPS[*]}"for ip in "${CURRENT_IPS[@]}"; doblock_ip $ipdonesend_alertelselog "未发现可疑IP"filog "====== 检测完成 ======"
}# 执行主程序
main

第二步:功能说明

  1. 多日志分析

    • 支持分析SSH暴力破解(/var/log/auth.log)
    • 支持分析Web攻击(/var/log/nginx/access.log)
    • 自动识别40x错误请求和敏感路径访问
  2. 智能防火墙管理

    • 自动检测系统使用的防火墙工具(iptables/firewalld)
    • 防止重复添加封锁规则
    • 支持IPv4地址和CIDR格式白名单
  3. 高级特性

    • 基于时间的日志分析(默认检测5分钟内的攻击)
    • 频率阈值设置(默认10次触发封锁)
    • 邮件报警通知功能
    • 自动去重处理

第三步:使用方法

  1. 保存脚本为ipshield.sh

  2. 赋予执行权限:

    chmod +x ipshield.sh
    
  3. 安装依赖工具:

    # CentOS/RHEL
    sudo yum install ipcalc mailx# Debian/Ubuntu
    sudo apt-get install ipcalc mailutils
    
  4. 配置参数:

    • 修改LOG_FILES添加需要监控的日志
    • 调整THRESHOLDTIME_RANGE
    • 设置WHITELIST白名单
  5. 测试运行:

    sudo ./ipshield.sh
    

设置定时任务(每5分钟检测一次):

sudo crontab -e
# 添加:
*/5 * * * * /path/to/ipshield.sh

第四步:增强功能建议

  1. 自动解封功能

    # 在block_ip函数中添加:
    echo "$(date +%s) $ip" >> $TMP_DIR/banned_ips.log# 添加定时清理任务:
    find $TMP_DIR/banned_ips.log -type f -mtime +$((BAN_TIME/86400)) -exec rm {} \;
    
  2. 可视化报表

    # 在日志分析后添加:
    echo "检测统计:" | mail -a /var/log/ipshield.log -s "安全周报" $MAIL_TO
    
  3. Cloudflare API集成(需要jq工具):

    block_ip() {# 原有防火墙代码...curl -X POST "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/firewall/access_rules/rules" \-H "Authorization: Bearer YOUR_API_TOKEN" \-H "Content-Type: application/json" \--data '{"mode":"block","configuration":{"target":"ip","value":"'$ip'"},"notes":"Blocked by IPSHIELD"}'
    }
    

第五步:注意事项

  1. 需要root权限运行
  2. 首次使用前建议先测试白名单功能
  3. 生产环境建议将日志文件与监控系统集成
  4. 重要服务器建议配合fail2ban使用
  5. 定期检查/var/log/ipshield.log查看运行情况

这个脚本可以防御以下类型攻击:

  • SSH暴力破解
  • HTTP洪水攻击
  • 目录扫描
  • SQL注入探测
  • 高频错误请求攻击

相关文章:

  • 基于Docker Compose的Prometheus监控系统一键部署方案
  • Kafka的Topic分区数如何合理设置?
  • 【数据链路层】网络通信的“桥梁建设者”
  • ComputeShader绘制全屏纯色纹理
  • 【C到Java的深度跃迁:从指针到对象,从过程到生态】第五模块·生态征服篇 —— 第十八章 JVM调优:内存管理的权力游戏
  • 【25软考网工】第四章(4)无线局域网WLAN安全技术、无线个人网WPAN
  • 泰迪杯特等奖案例学习资料:基于多模态数据融合与边缘计算的工业设备健康监测与预测性维护系统
  • 搜索时如何排除一些垃圾站点,比如csdn.net
  • YPay标准版系统-五彩绚丽首页主题V1.0.0
  • pip使用本地缓存
  • 人格伤疤测试:发现内心深处的情感创伤
  • Best Video下载器——全能高清无水印视频下载工具
  • C++从入门到实战(十一)详细讲解C/C++语言中内存分布与C与C++内存管理对比
  • 【数学】角谷猜想
  • 【NumPy完全指南】从基础操作到高性能计算实战
  • 【Hive入门】Hive性能优化:执行计划分析EXPLAIN命令的使用
  • 推荐一款靠谱的声学成像仪
  • 从边缘到云端:边缘计算与云计算的协同未来
  • PDM协议---音频数据接收
  • 分治算法求序列中第K小数
  • 马上评|启动最高层级医政调查,维护医学一方净土
  • 此前显示售罄的火车票“五一”前大量放出来了?12306回应
  • 山西太原一小区发生爆炸,造成1人遇难21人受伤2人失联
  • 徐徕任上海浦东新区副区长
  • 美国清洗政治:一幅残酷新世界的蓝图正在展开
  • 我国首部《人工智能气象应用服务办法》今天发布