在当今数字化时代,运维工作的重要性日益凸显。面对复杂多变的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
脚本实现过程:
- 获取当前日期和时间:
- 使用
date +%d/%b/%Y:%H:%M
命令获取当前日期(日/月/年)和时间(小时:分钟),并将结果赋值给变量DATE
。
- 指定Nginx访问日志文件:
- 设定
LOG_FILE
变量为Nginx服务器的访问日志路径,这里为/usr/local/nginx/logs/demo2.access.log
。
- 分析日志并找出异常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。
- 结果存储在变量
ABNORMAL_IP
中,它包含了所有在短时间内访问次数超过阈值的IP地址。 - 遍历异常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
日志文件中,便于后续审计和跟踪。
如何使用:
- 配置脚本:
- 根据实际情况调整
LOG_FILE
变量,确保它指向实际Nginx服务器的访问日志文件。 - 可以根据服务器承受能力及业务需求调整IP访问次数阈值(当前为10次)。
- 添加定时任务:
- 将此脚本添加到系统的定时任务(如cron)中,以定期(如每分钟)执行。例如,在crontab中添加如下条目:
- Bash
1* * * * * /path/to/ddos_defense.sh
- 监控和审计:
- 定期检查
/tmp/drop_ip.log
文件,了解哪些IP已被屏蔽以及屏蔽的时间点。 - 结合系统监控工具,观察服务器负载、网络流量等指标,验证脚本的有效性。
- 恢复访问:
- 当确定某个被屏蔽的IP不再构成威胁时,可手动使用
iptables -D INPUT -s IP_ADDRESS -j DROP
命令删除相应的DROP规则,恢复其访问权限。
通过以上步骤够自动化地检测并应对潜在的DDoS攻击,减轻服务器压力,保护正常服务的稳定运行。同时,记录的屏蔽日志有助于事后分析和排查问题。
如果想上手操作练代码的同学们可以通过阿里云ecs服务器免费试用参与!
入口:新老同学免费试用