最近有點忙,一段時間沒管博客了,今天上來看了一下access.log,多了一些牛鬼蛇神,之前因為博客訪問量少,沒怎么弄,看來是時候帶一波節(jié)奏了。
之前的做法
以前就已經(jīng)陸續(xù)發(fā)現(xiàn)一些惡意用戶訪問了,比如:
– 認為后端是java對tomcat的/manager進行訪問的,
– 認為后端是php做一些eval或者爆破操作的,
– 一些獨狼/個人蜘蛛用戶不分時段對網(wǎng)站進行大規(guī)模爬取的
由于都是一些零散的訪問,針對這些行為 在nginx.conf同目錄下創(chuàng)建了一個denyIpList.conf配置文件,內(nèi)容形式如下:
# 針對單個ip的形式
deny 171.94.171.205;
deny 115.29.166.101;
deny 182.247.251.48;
deny 61.147.89.17;
# 針對網(wǎng)段的形式
deny 66.249.227.0/24;
然后在nginx.conf合適的位置引入此配置文件:
http {
include mime.types;
include denyIpList.conf;
default_type application/octet-stream;
...以下省略
重啟nginx后生效,這樣,當這些ip/網(wǎng)段發(fā)起訪問后,直接返回403;
現(xiàn)在的做法
現(xiàn)象
今早上來看了一下訪問記錄后,發(fā)現(xiàn)了幾組喪心病狂的內(nèi)容:
1. user-agent為 Baidu-YunGuanCe-SLABot(ce.baidu.com) 的訪問;
2. 來自美國66.249.*.*網(wǎng)段的訪問;
3. user-agent為 Mozilla/5.0 (compatible; MJ12bot/v1.4.7; … 的訪問
4. user-agent為空(正常瀏覽器訪問不會為空的)
分析
其中第一個我剛開始以為是我配的百度云觀測網(wǎng)站定期健康檢查的訪問記錄,但是簡單統(tǒng)計了一下,數(shù)量也太大了,而且不分時段都有,初步懷疑是有人閑著無聊借用百度云觀測提供的工具對本站進行了友e情yi壓測…即便不是,我也不需要云觀測提供的特殊服務(wù),準備直接ban掉;
第二個,應(yīng)該是谷歌的爬蟲(ua判斷),以前也看到過訪問記錄,頻率比較低,直接deny訪問地址的,但是最近訪問的ip也太多了,根本ban不過來;
第三個,MJ12bot比較常用的爬蟲工具,訪問ip也是來自世界各地;
解決方案
根據(jù)以上分析,發(fā)現(xiàn)大部分惡意請求可以通過user-agent來判斷,因此,考慮通過nginx提供的一些內(nèi)置變量進行配置:
首先我們還是新建一個文件denyUaList.conf在nginx.conf同目錄下;
編寫denyUaList.conf規(guī)則內(nèi)容:
#禁止常用工具的抓取 if ($http_user_agent ~* (Scrapy|Curl|HttpClient|Java)) {
return 403;
}
#禁止指定UA及UA為空的訪問
if ($http_user_agent ~* "Baidu-YunGuanCe|FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|^$" )
{
return 403;
}
tips:注意書寫格式if和(之間有空格,|Ezooms|最后面有個|破折號,用于禁止空ua訪問
在nginx.conf中合適的位置引入denyUaList.conf
...以上省略
server {
listen 443 ssl;
server_name example.com;#你的域名
...ssl配置省略...
include denyUaList.conf;...以下省略
tips:注意因為denyUaList.conf包含if等控制語句,因此不能和denyIpList.conf一樣放在根節(jié)點,需要自行根據(jù)需要放在server節(jié)點中
以上就是目前的配置方案,如果后續(xù)有優(yōu)化升級,會在本帖更新,如果有朋友有更合適的方案,請在留言中回復(fù)!
測試
在Baidu-YunGuanCe前增加chrome|,然后使用谷歌瀏覽器訪問博客地址,返回403forbidden,切換為ie訪問,正常進入(不過d大@88250竟然給了一個超low的提示(/ □ )),測試通過,去掉chrome|,重啟nginx,收工!
本文由網(wǎng)上采集發(fā)布,不代表我們立場,轉(zhuǎn)載聯(lián)系作者并注明出處:http://m.zltfw.cn/shbk/38932.html