Nginx如何自動(dòng)封禁可疑Ip
一、Nginx封禁ip
1、簡(jiǎn)介
在網(wǎng)站維護(hù)過程中,有時(shí)候我們需要對(duì)一些IP地址或是一些IP段進(jìn)行封鎖拉黑,使其不能訪問網(wǎng)站。
如果你的網(wǎng)站服務(wù)器的網(wǎng)站運(yùn)行環(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ù)自己實(shí)際需求修改實(shí)際路徑,這里暫時(shí)是當(dāng)前目錄 include blocksip.conf;
- 重啟 nginx 即可,然后你就會(huì)看到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 地址
# 單個(gè)網(wǎng)站屏蔽IP的方法,放到網(wǎng)址對(duì)應(yīng)的server{}模塊
# 所有網(wǎng)站屏蔽IP的方法,放到http {}模塊
最后重啟 nginx 即可
3、關(guān)于 deny 的使用
# nginx封鎖禁止單個(gè)IP deny 127.0.0.1; # nginx 封鎖禁止多個(gè)IP,多個(gè)IP地址由空格分開 deny 127.0.0.1 196.0.0.1; # nginx封整個(gè)段即從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; # 允許單個(gè)ip訪問,和上面同理 allow IP; # 允許所有ip訪問 allow all;
二、腳本自動(dòng)封禁Ip
1、流程介紹
- AWK統(tǒng)計(jì)
access.log(/var/log/nginx/),記錄每分鐘訪問超過60次的ip,然后配合nginx進(jìn)行封禁 - 編寫shell腳本
- crontab定時(shí)跑腳本
2、腳本實(shí)戰(zhàn)
2.1 核心腳本解釋
awk '{print $1}' access.log | sort | uniq -cd | awk '{if($1>60)print $0}' - AWK統(tǒng)計(jì)
access.log,記錄每分鐘訪問超過60次的ip awk '{print $1}' access.log取出access.log的第一列即為ipsort | uniq -cd去重和排序awk '{if($1>60)print $0}'判斷重復(fù)的數(shù)量是否超過60個(gè),超過60個(gè)就展示出來
2.2 編寫shell腳本
#不能把別人IP一直封著吧,這里就清除掉了
echo "" > /usr/local/nginx/conf/blockip.conf
#前面最開始編寫的統(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)
#最后再把讀取出來的值,在次寫入到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
fi2.3 crontab定時(shí)
crontab -e * * * * * cd /usr/local/nginx/logs/ && sh ip_test.sh #每一分鐘運(yùn)行一次 systemctl restart crond.service #重啟一下配置既可
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Nginx作為反向代理時(shí)傳遞客戶端IP的設(shè)置方法
因?yàn)閚ginx的優(yōu)越性,現(xiàn)在越來越多的用戶在生產(chǎn)環(huán)境中使用nginx作為前端,不管nginx在前端是做負(fù)載均衡還是只做簡(jiǎn)單的反向代理,都需要把日志轉(zhuǎn)發(fā)到后端real server,以方便我們檢查程序的各種故障2014-08-08
Nginx stub_status 監(jiān)控模塊的功能實(shí)現(xiàn)
本篇文章主要介紹了Nginx stub_status 監(jiān)控模塊的功能實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03
Nginx?Rewrite及Location的使用與區(qū)別
rewrite和location的功能有點(diǎn)相像,都能實(shí)現(xiàn)跳轉(zhuǎn),本文主要介紹了Nginx?Rewrite及Location的使用與區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08
通過lua來配置實(shí)現(xiàn)Nginx服務(wù)器的防盜鏈功能
這篇文章主要介紹了通過lua來配置實(shí)現(xiàn)Nginx服務(wù)器的防盜鏈功能的方法,這里主要講解生成鏈接的Nginx配置,需要的朋友可以參考下2016-01-01
阿里云Nginx配置https實(shí)現(xiàn)域名訪問項(xiàng)目(圖文教程)
這篇文章主要介紹了阿里云Nginx配置https實(shí)現(xiàn)域名訪問項(xiàng)目(圖文教程),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Nginx本地目錄映射實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Nginx本地目錄映射實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Nginx實(shí)現(xiàn)動(dòng)靜分離的示例代碼
Nginx動(dòng)靜分離是旨在將靜態(tài)頁面與動(dòng)態(tài)頁面或靜態(tài)內(nèi)容接口與動(dòng)態(tài)內(nèi)容接口分開,本文主要介紹了Nginx實(shí)現(xiàn)動(dòng)靜分離的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
Nginx學(xué)習(xí)之靜態(tài)文件服務(wù)器配置方法
本篇文章主要介紹了Nginx學(xué)習(xí)之靜態(tài)文件服務(wù)器配置方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02

