每天解析一个脚本(五)

简介: 【4月更文挑战第14天】shell脚本解析及训练(五)

在当今数字化时代,运维工作的重要性日益凸显。面对复杂多变的IT环境,高效的自动化工具和脚本成为每一位运维人员提升工作效率、保障系统稳定的关键利器。为了助力广大运维同行在日常工作中更加得心应手,我特此精心整理了一份实用的Shell脚本合集,旨在为大家提供一份“运维人的福利”,以期在繁琐的任务处理与系统管理中,助您一臂之力。

这份脚本集合凝聚了我个人在实际运维工作中积累的经验与智慧,涵盖了诸如服务器监控、故障排查、备份恢复、性能调优、自动化部署等诸多核心场景。每一行代码都经过实战打磨,力求简洁高效,易读易用,旨在适应各种复杂的运维环境,满足不同层次运维需求。无论您是初入运维领域的新人,还是经验丰富的资深专家,都能从中找到适合自己的工具,让繁杂的运维工作化繁为简,事半功倍。

在这里,我诚挚地邀请各位运维同仁随意拿取、自由分享这份Shell脚本资源。它们不仅是您日常工作的得力助手,更是交流学习、提升技能的良好素材。让我们共同携手,借助科技的力量,驱动运维工作的智能化、自动化进程,为构建稳定、高效的信息系统保驾护航。

今天我们要分析的是:

DOS攻击防范(自动屏蔽攻击IP)

#!/bin/bash

DATE=$(date +%d/%b/%Y:%H:%M)

#nginx日志

LOG_FILE=/usr/local/nginx/logs/demo2.access.log

#分析ip的访问情况

ABNORMAL_IP=$(tail -n5000 $LOG_FILE |grep $DATE |awk '{a[$1]++}END{for(i in

a)if(a[i]>10)print i}')

for IP in $ABNORMAL_IP; do

if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then

iptables -I INPUT -s $IP -j DROP

echo "$(date +'%F_%T') $IP" >> /tmp/drop_ip.log

fi

done

脚本实现过程:

  1. 获取当前日期和时间:
  • 使用date +%d/%b/%Y:%H:%M命令获取当前日期(日/月/年)和时间(小时:分钟),并将结果赋值给变量DATE
  1. 指定Nginx访问日志文件:
  • 设定LOG_FILE变量为Nginx服务器的访问日志路径,这里为/usr/local/nginx/logs/demo2.access.log
  1. 分析日志并找出异常IP:
  • 使用tail -n5000 $LOG_FILE获取日志文件最后5000行,以捕捉近期访问记录。
  • 通过grep $DATE筛选出包含当前日期时间的行。
  • 使用awk '{a[$1]++} END {for(i in a) if(a[i]>10) print i}'统计各IP地址出现次数,若某IP出现次数大于10(阈值可调整),则输出该IP。
  1. 结果存储在变量ABNORMAL_IP中,它包含了所有在短时间内访问次数超过阈值的IP地址。
  2. 遍历异常IP并检查是否已屏蔽:
  • 对于ABNORMAL_IP中的每一个IP地址,使用iptables -vnL | grep -c "$IP"检查当前iptables规则中是否存在针对该IP的DROP规则(即是否已被屏蔽)。
  • 如果不存在相关规则(计数结果为0),则执行以下操作:
  • 使用iptables -I INPUT -s $IP -j DROP命令在INPUT链的最前面插入一条新规则,拒绝来自该IP的所有入站流量。
  • 将屏蔽操作的时间戳和IP地址记录到/tmp/drop_ip.log日志文件中,便于后续审计和跟踪。

如何使用:

  1. 配置脚本:
  • 根据实际情况调整LOG_FILE变量,确保它指向实际Nginx服务器的访问日志文件。
  • 可以根据服务器承受能力及业务需求调整IP访问次数阈值(当前为10次)。
  1. 添加定时任务:
  • 将此脚本添加到系统的定时任务(如cron)中,以定期(如每分钟)执行。例如,在crontab中添加如下条目:
  • Bash
1* * * * * /path/to/ddos_defense.sh
  1. 监控和审计:
  • 定期检查/tmp/drop_ip.log文件,了解哪些IP已被屏蔽以及屏蔽的时间点。
  • 结合系统监控工具,观察服务器负载、网络流量等指标,验证脚本的有效性。
  1. 恢复访问:
  • 当确定某个被屏蔽的IP不再构成威胁时,可手动使用iptables -D INPUT -s IP_ADDRESS -j DROP命令删除相应的DROP规则,恢复其访问权限。

通过以上步骤够自动化地检测并应对潜在的DDoS攻击,减轻服务器压力,保护正常服务的稳定运行。同时,记录的屏蔽日志有助于事后分析和排查问题。

如果想上手操作练代码的同学们可以通过阿里云ecs服务器免费试用参与!

入口:新老同学免费试用

目录
相关文章
|
5天前
|
弹性计算 运维 Shell
每天解析一个脚本(38)
【4月更文挑战第25天】shell脚本解析及训练(38)
10 1
|
8天前
|
存储 弹性计算 运维
每天解析一个脚本(25)
【4月更文挑战第22天】shell脚本解析及训练(25)
27 0
|
8天前
|
存储 运维 监控
每天解析一个脚本(26)
【4月更文挑战第22天】shell脚本解析及训练(26)
12 0
|
8天前
|
运维 监控 Shell
每天解析一个脚本(30)
【4月更文挑战第22天】shell脚本解析及训练(30)
14 0
|
4天前
|
弹性计算 运维 搜索推荐
每天解析一个脚本(46)
【4月更文挑战第25天】shell脚本解析及训练(46)
11 1
|
4天前
|
弹性计算 运维 监控
每天解析一个脚本(52)
【4月更文挑战第26天】shell脚本解析及训练(52)
20 3
|
5天前
|
运维 关系型数据库 MySQL
每天解析一个脚本(45)
【4月更文挑战第25天】shell脚本解析及训练(45)
8 0
|
5天前
|
弹性计算 运维 Shell
每天解析一个脚本(42)
【4月更文挑战第25天】shell脚本解析及训练(42)
9 1
|
5天前
|
存储 运维 关系型数据库
每天解析一个脚本(39)
【4月更文挑战第25天】shell脚本解析及训练(39)
7 0
|
6天前
|
运维 监控 Shell
每天解析一个脚本(36)
【4月更文挑战第24天】shell脚本解析及训练(36)
10 0

热门文章

最新文章