nginx限制IP惡意呼叫簡訊介面處理方法

2022-09-28 04:39:09 字數 4002 閱讀 2009

真實案例:

檢視nginx日誌,發現別有用心的人惡意呼叫api介面刷簡訊:

思考了幾種方案,最終考慮使用ip黑名單的方式:

處理方法:

一、nginx黑名單方式:

1、過濾日誌訪問api介面的ip,統計每10分鐘呼叫超過100次的ip,直接丟進nginx的訪問黑名單

2、具體步驟:

編寫shell指令碼:

vim /shell/nginx_cutaccesslog.sh

#!/bin/bash

log_path=/***/nginx/logs

date=`date -d "10 min ago" +%y%m%d-%h:%程式設計客棧m:%s`

nginxpid=`cat $/nginx.pid`

cd $

#過濾access.log中正常訪問api介面並在10分鐘(下面是日誌切割,再做個定時任務每10分鐘執行一次,就可以實現了)內訪問量最高的30個ip,取值如果此ip訪問量大於100次,則把此ip放入黑名單

cat access.log | grep sendcheckcode | grep -v 403 | awk ''|sort|uniq -c | sort -k1 -n | tail -30 | awk '' > ../conf/denyip.conf

#日誌切割,做定時任務,每10分鐘執行一次

mv $/access.log $/accesslog.bak/access_$.log

../sbin/nginx -s reload

可自己定義時間間隔和訪問量,也可取消篩選訪問量最高的30個,直接取值每10分鐘訪問介面超過100次的

其中:"grep -v 403" 是把已經禁止訪問的ip給過濾掉,只篩選正常訪問的

3、修改nginx.conf

在http模組加入:

include       denyip.conf;

重新載入nginx生效。

4、新增計畫任務:

*/10 * * * * /bin/bash /shell/nginx_cutaccesslog.sh > /dev/null 2>&1

5、驗證:

[root@*** logs]# ll accesslog.bak/

-rw-r--r-- 1 root root 2663901 jun 5 15:10 access_

-rw-r--r-- 1 root root 13696947 jun 5 15:20 access_20180605-15:10:01.log

-rw-r--r-- 1 root root 13265509 jun 5 15:30 access_20180605-15:20:01.log

-rw-r--r-- 1 root root 1www.cppcns.com3846297 jun 5 15:40 access_20180605-15:30:01.log

[root@*** logs]# cat ../conf/denyip.conf

…………

…………

deny 112.12.137.28;

deny 183.167.237.229;

deny 111.41.43.58;

deny 115.217.117.159;

deny 219.133.100.133;

deny 171.221.254.115;

deny 60.184.131.6;

…………

…………

再檢視已經禁用ip的訪問日誌,則會返回403錯誤:

31268622 60.184.131.6 "-" [05/jun/2018:15:47:35 +0800] 0.000 ******.com "post /******/sendcheckcode http/1.1" 377 403程式設計客棧 168 - - - "mozilla/5.0 (windows nt 6.1; wow64; rv:27.0) gecko/20100101 firefox/27.0" https://******/sendcheckcode

二、限制ip請求數:

處理這種情況的方法還有一種是限制單 ip 單位時間的請求數,以及單 ip 的併發連線數

此方法沒有實際運用,因為感覺這種方法會誤殺正常的訪問使用者

寫一下此方法的大概配置,http模組加入:

如何估算 limit_req_zone size:

一兆位元組區域可以保持大約1萬6064位元組的狀態。

那麼 10m 就可以儲存 16 萬的 ip 統計資訊, 這個對普通應用足夠了,16 萬每秒的 uv,已經超級厲害了。

如果 size 的大小如果設定小了, 例如設定成 1m,那麼當一秒內的請求 ip 數超過 16000 的時候,超出的 ip 對應的使用者看到的均為 503 service temporarily un**ailable 頁面了。參考, 漏桶演算法 leaky bucket。 同時,rate 的單位用 r/s 非常合適,如果換成按天,按小時計數,10m 的記憶體肯定不夠用。

如何估算 limit_req_zone rate:

首先需要知道的是,普通瀏覽器的同時併發數量。按照 dropbox 技術部落格裡所談到的,目前主流瀏覽器限制 ajax 對同乙個子網域名稱的併發連線數是6個。ie 6,ie 7 是兩個。

大多數瀏覽器每個主機名都有6個併發連線的限制。

總結本文標題: nginx限制ip惡意呼叫簡訊介面處理方法

本文位址:

Nginx封禁惡意IP

網路攻擊時有發生,tcp洪水攻擊 注入攻擊 dos等 比較難防的有ddos等 資料安全,防止對手爬蟲惡意爬取,封禁ip 一般就是封禁ip linux server的層面封ip iptables nginx的層面封ip 方式多種 但 req還是會打進來,讓nginx 返回 403,占用資源 拓展 自動...

nginx 限制 ip 訪問

環境 centos7.6 nginx 1.16.1 背景 nginx 伺服器已經配置好了公網 ip 和 網域名稱證書 公網 ip 對我來說是透明的,沒有管理許可權,所以只好在 nginx 伺服器上做 ip 限制 未修改之前,登入日誌的 remote addr 總是為 192.12.182.3,猜測這...

nginx限制ip訪問

nginx限制ip,目前從網上發現了兩種解決方法 1 是採用原生的方式來實現 set flag f if remote addr 10.1.20.35 if flag 1 2 是採用geo模組來實現,預設1.16.1是自帶的有這個模組 http中增加如下 geo bad user location中...