1.在ngnix的conf目錄下創(chuàng)建一個(gè)blockip.conf文件
2.里面放需要封禁的IP,格式如下
deny 1.2.3.4;
3.在ngnix的HTTP的配置中添加如下內(nèi)容
include blockips.conf;
/usr/local/nginx/sbin/nginx -s reload
5.然后你就會(huì)看到IP被封禁了,你會(huì)喜提403;
6.小思考:如何實(shí)現(xiàn)使用ngnix自動(dòng)封禁ip的功能
1.AWK統(tǒng)計(jì)access.log,記錄每分鐘訪問(wèn)超過(guò)60次的ip,然后配合nginx進(jìn)行封禁 2.編寫shell腳本 3.crontab定時(shí)跑腳本
好了上面操作步驟列出來(lái)了,那我們先來(lái)實(shí)現(xiàn)第一個(gè)吧
操作一:AWK統(tǒng)計(jì)access.log,記錄每分鐘訪問(wèn)超過(guò)60次的ip
awk?'{print?$1}'?access.log?|?sort?|?uniq?-cd?|?awk?'{if($1>60)print?$0}' 1.?awk?'{print?$1}'?access.log ??取出access.log的第一列即為ip。 2.?sort?|?uniq?-cd??去重和排序 3.?awk?'{if($1>60)print?$0}'?判斷重復(fù)的數(shù)量是否超過(guò)60個(gè),超過(guò)60個(gè)就展示出來(lái)
操作二:編寫shell腳本,實(shí)現(xiàn)整體功能(寫了注釋代碼)
#不能把別人IP一直封著吧,這里就清除掉了 echo "" > /usr/local/nginx/conf/blockip.conf #前面最開(kāi)始編寫的統(tǒng)計(jì)數(shù)據(jù)功能 ip_list=$(awk '{print $1}' access.log | sort | uniq -cd | awk '{if($1>60)print $0}') #判斷這個(gè)變量是否為空 if test -z "$ip_list" then #為空寫入 11.log中,并重新啟動(dòng)ngnix echo "為空" >> /usr/local/nginx/logs/11.log /usr/local/nginx/sbin/nginx -s reload else #如果不為空 前面加上 deny格式和ip寫入blockip.conf中 echo "deny" $ip_list > /usr/local/nginx/conf/blockip.conf #因?yàn)榍懊鏀y帶了行數(shù),所有我們需要去除掉前面的行數(shù),寫入后在讀取一次 ip_list2=$(awk '{print $3}' /usr/local/nginx/conf/blockip.conf) #最后再把讀取出來(lái)的值,在次寫入到blockip.conf中 echo "deny" $ip_list2";"> /usr/local/nginx/conf/blockip.conf #重啟ngnix /usr/local/nginx/sbin/nginx -s reload #清空之前的日志,從最新的開(kāi)始截取 echo "" > /usr/local/nginx/logs/access.log fi
操作三:使用crontab定時(shí),來(lái)實(shí)現(xiàn)訪問(wèn)每分鐘超過(guò)60的
crontab -e * * * * * cd /usr/local/nginx/logs/ && sh ip_test.sh 每一分鐘運(yùn)行一次 systemctl restart crond.service 重啟一下配置既可
版權(quán)聲明:文章圖片資源來(lái)源于網(wǎng)絡(luò),如有侵權(quán),請(qǐng)留言刪除!!!
評(píng)論