南琴浪博客

Nginx 连接日志的封禁 IP 脚本

11/08/2017

前面的文章 中,我提到过我的 log_format 是这样写的:

log_format main '[$time_local] [ $remote_addr $http_user_agent] [$status $request_time $request]';

所以我可以用下面这行命令来获取我要封禁的关键词(例如爬虫)的 IP 列表

cat /home/site/access-log/access.log |grep ${name} | awk '{print $4}'

其中,${name} 是你要过滤出来的关键词

以下就是完整的脚本,以我正在使用的为例:

#! /bin/bash
# ban-accesslog.sh

ban(){
name=$1
ips=`cat /home/site/access-log/access.log |grep ${name} | awk '{print $4}'`

if [[ ! -z ${ips} ]]; then
for ip in ${ips}
do
exist=`iptables -nL | grep ${ip}`
[[ -z ${exist} ]] && iptables -I INPUT -s ${ip} -j DROP && date=`date +%Y.%m.%d-%H:%M:%S` && echo "${date}    ${name}    ${ip}" >> /home/ban/ban-accesslog.conf
done
fi
}

ban 'wp-login'
ban 'UptimeRobot'

其中,我把关键词设定为 wp-login 和 UptimeRobot(这俩天天都在抓我),如果你想添加关键词只需在脚本末尾加上一行:

ban '关键词'

下面这行用于输出封禁 IP 的记录,可根据自己需要自行修改。

echo "${date}    ${name}    ${ip}" >> /home/ban/ban-accesslog.conf

下面列出所有我已经写入的关键词,其实绝大多数是国内外的搜索引擎爬虫,特别是国内爬虫我一个都不想要

## 两个扫我的
ban 'wp-login'
ban 'UptimeRobot'

## 爬虫 bot
ban 'qihoobot'
ban 'Baiduspider'
ban 'Mediapartners-Google'
ban 'Adsbot-Google'
ban 'Feedfetcher-Google'
ban 'Yahoo'
ban 'Slurp'
ban 'YoudaoBot'
ban 'Sosospider'
ban 'Sogou'
ban 'MSNBot'
ban 'ia_archiver'
ban 'Tomato'
ban 'FeedDemon'
ban 'JikeSpider'
ban 'Library'
ban 'Alexa'
ban 'Toolbar'
ban 'AskTbFXTV'
ban 'AhrefsBot'
ban 'CrawlDaddy'
ban 'CoolpadWebkit'
ban 'Feedly'
ban 'UniversalFeedParser'
ban 'ApacheBench'
ban 'Swiftbot'
ban 'ZmEuoBot'
ban 'jaunty'
ban 'Python-urllib'
ban 'lightDeckReports'
ban 'YYSpider'
ban 'DigExt'
ban 'Yisou'
ban 'MJ12bot'
ban 'heritrix'
ban 'Easou'
ban 'Ezooms'
ban 'Yodao'
ban 'Bingbot'
ban 'Teoma'
ban 'twiceler'
ban 'Scrubby'
ban 'Robozilla'
ban 'Gigabot'
ban 'Googlebot-image'
ban 'Googlebot-mobile'
ban 'psbot'
ban 'DuckDuckBot'
ban 'YandexBot'
ban 'Exabot'
ban 'facebot'
ban 'facebookexternalhit'

## 下载器
ban 'Scrapy'
ban 'HttpClient'
ban 'Curl'
ban 'Wget'
ban 'Idm'
ban 'Aria2'
ban 'Axel'
ban 'Thunder'
ban 'Movgrab'
ban 'torrent'
ban 'Transmission'
ban 'vuze'

## 采集的
ban 'blogspot'