1.在Nginx的conf目錄下創建一個blockip.conf文件
2.里面放需要封禁的IP,格式如下
deny 1.2.3.4;
3.在Nginx的HTTP的配置中添加如下內容
include blockips.conf;
4.重啟 Nginx
/usr/local/nginx/sbin/nginx -s reload
然后你就會看到IP被封禁了,你會喜提403;
7.小思考:如何實現使用Nginx自動封禁ip的功能
1.AWK統計access.log,記錄每分鐘訪問超過60次的ip,然后配合nginx進行封禁
2.編寫shell腳本
3.crontab定時跑腳本
好了上面操作步驟列出來了,那我們先來實現第一個吧
操作一: AWK統計access.log,記錄每分鐘訪問超過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}' 判斷重復的數量是否超過60個,超過60個就展示出來
操作二:編寫shell腳本,實現整體功能(寫了注釋代碼)
#不能把別人IP一直封著吧,這里就清除掉了 echo "" > /usr/local/nginx/conf/blockip.conf #前面最開始編寫的統計數據功能 ip_list=$(awk '{print $1}' access.log | sort | uniq -cd | awk '{if($1>60)print $0}') #判斷這個變量是否為空 if test -z "$ip_list" then #為空寫入 11.log中,并重新啟動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 #因為前面攜帶了行數,所有我們需要去除掉前面的行數,寫入后在讀取一次 ip_list2=$(awk '{print $3}' /usr/local/nginx/conf/blockip.conf) #最后再把讀取出來的值,在次寫入到blockip.conf中 echo "deny" $ip_list2";"> /usr/local/nginx/conf/blockip.conf #重啟ngnix /usr/local/nginx/sbin/nginx -s reload #清空之前的日志,從最新的開始截取 echo "" > /usr/local/nginx/logs/access.log fi
操作三:使用crontab定時,來實現訪問每分鐘超過60的
這個crontab 就不多講的,不會的可以去看看我之前的博客地址如下 https://www.jb51.net/article/144881.htm
直接實操吧:
crontab -e * * * * * cd /usr/local/nginx/logs/ && sh ip_test.sh 每一分鐘運行一次 systemctl restart crond.service 重啟一下配置既可