Nginx如何自動封禁可疑Ip
一、Nginx封禁ip
1、簡介
在網(wǎng)站維護過程中,有時候我們需要對一些IP地址或是一些IP段進行封鎖拉黑,使其不能訪問網(wǎng)站。
如果你的網(wǎng)站服務(wù)器的網(wǎng)站運行環(huán)境是由nginx搭建的,那么nginx中禁止ip的方法可以有效的防止網(wǎng)站被黑。
2、nignx 禁止IP訪問
2.1 方法一
- 在 nginx 的安裝目錄中(一般在
/etc/nginx/
),找到 nginx.conf 文件(可以看一下access.log
日志在哪,后面腳本要用),并在當(dāng)前目錄創(chuàng)建blocksip.conf
文件 - 編輯
blocksip.conf
文件,并加入以下代碼
deny 127.0.0.1; # 127.0.0.1 為要封禁的 IP 地址
- 編輯 nginx.conf 文件,在ngnix的HTTP的配置中添加如下內(nèi)容
# 根據(jù)自己實際需求修改實際路徑,這里暫時是當(dāng)前目錄 include blocksip.conf;
- 重啟 nginx 即可,然后你就會看到IP被封禁了,喜提403
/usr/local/nginx/sbin/nginx -s reload
2.2 方法二
編輯 配置目錄下的 nginx.conf
文件,在** http{} 或 server{}** 中添加以下代碼
deny 127.0.0.1; # 127.0.0.1:為要封禁的 IP 地址 # 單個網(wǎng)站屏蔽IP的方法,放到網(wǎng)址對應(yīng)的server{}模塊 # 所有網(wǎng)站屏蔽IP的方法,放到http {}模塊
最后重啟 nginx 即可
3、關(guān)于 deny 的使用
# nginx封鎖禁止單個IP deny 127.0.0.1; # nginx 封鎖禁止多個IP,多個IP地址由空格分開 deny 127.0.0.1 196.0.0.1; # nginx封整個段即從127.0.0.1到127.255.255.254的命令 deny 127.0.0.0/8; # nginx 封IP段即從127.255.0.1到127.255.255.254的命令 deny 127.255.0.0/16 # nginx 封IP段即從127.255.255.1到127.255.255.254的命令是 deny 127.255.255.0/24 # 屏蔽所有ip訪問 deny all; # 允許單個ip訪問,和上面同理 allow IP; # 允許所有ip訪問 allow all;
二、腳本自動封禁Ip
1、流程介紹
- AWK統(tǒng)計
access.log
(/var/log/nginx/),記錄每分鐘訪問超過60次的ip,然后配合nginx進行封禁 - 編寫shell腳本
- crontab定時跑腳本
2、腳本實戰(zhàn)
2.1 核心腳本解釋
awk '{print $1}' access.log | sort | uniq -cd | awk '{if($1>60)print $0}'
- AWK統(tǒng)計
access.log
,記錄每分鐘訪問超過60次的ip awk '{print $1}' access.log
取出access.log的第一列即為ipsort | uniq -cd
去重和排序awk '{if($1>60)print $0}'
判斷重復(fù)的數(shù)量是否超過60個,超過60個就展示出來
2.2 編寫shell腳本
#不能把別人IP一直封著吧,這里就清除掉了 echo "" > /usr/local/nginx/conf/blockip.conf #前面最開始編寫的統(tǒng)計數(shù)據(jù)功能 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 #因為前面攜帶了行數(shù),所有我們需要去除掉前面的行數(shù),寫入后在讀取一次 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
2.3 crontab定時
crontab -e * * * * * cd /usr/local/nginx/logs/ && sh ip_test.sh #每一分鐘運行一次 systemctl restart crond.service #重啟一下配置既可
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx stub_status 監(jiān)控模塊的功能實現(xiàn)
本篇文章主要介紹了Nginx stub_status 監(jiān)控模塊的功能實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03Nginx?Rewrite及Location的使用與區(qū)別
rewrite和location的功能有點相像,都能實現(xiàn)跳轉(zhuǎn),本文主要介紹了Nginx?Rewrite及Location的使用與區(qū)別,具有一定的參考價值,感興趣的可以了解一下2023-08-08通過lua來配置實現(xiàn)Nginx服務(wù)器的防盜鏈功能
這篇文章主要介紹了通過lua來配置實現(xiàn)Nginx服務(wù)器的防盜鏈功能的方法,這里主要講解生成鏈接的Nginx配置,需要的朋友可以參考下2016-01-01阿里云Nginx配置https實現(xiàn)域名訪問項目(圖文教程)
這篇文章主要介紹了阿里云Nginx配置https實現(xiàn)域名訪問項目(圖文教程),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Nginx學(xué)習(xí)之靜態(tài)文件服務(wù)器配置方法
本篇文章主要介紹了Nginx學(xué)習(xí)之靜態(tài)文件服務(wù)器配置方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02