最近有骚扰!!不间断会在某个时间突然被海量 IP 袭击,导致宽带耗尽而挂。因此写了个脚本!用于分析 Nginx / Apache 日志,识别出一定记录行数内超过某个数量的IP。然后用 Nginx 的 deny 拒绝访问。 [Shell/批处理]代码 #!/bin/sh ######################################## nginx_home="/opt/nginx/conf" #你的nginx配置目录 log_path="/data/logs/web_log/www_gznow_cn_access.log" #你的日志路径 ######################################## tail -100 ${log_path} \ |grep -i -v -E "dnspod|google|yahoo|baidu|msnbot|FeedSky|sogo" \ |awk '{print $1}' |sort |uniq -c|sort -nr|head \ |awk '{if($1>80)print "deny "$2";"}' > ${nginx_home}/safe_block_deny.conf #关键变量解释 #tail -100 ${log_path} 读取日志中最近100行记录 #|grep -i -v -E "dnspod|google|yahoo|baidu|msnbot|FeedSky|sogo" 搜索引擎等蜘蛛除外 #|awk '{print $1}' |sort |uniq -c|sort -nr|head 合并重复记录,并计算数量 #|awk '{if($1>80)print "deny "$2";"}' > ${nginx_home}/safe_block_deny.conf #多于80行的IP将在nginx配置目录生成 Nginx deny 语法的配置文件给予调用。 #以上变量大家使用的时候根据需要修改吧。 (责任编辑:IT) |