您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么為Nginx服務器配置黑名單或白名單功能”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
一、定義黑名單或白名單方法:
1. 配置格式
配置關鍵字 黑名單或白名單文件 存儲空間
white_black_list_conf conf/white.list zone=white:2m;
| | | |
| | | --------------------------------------存儲空間大小 這里是2m. 空間大小決定黑白名單的容量
| | ---------------------------------------------------------------------------------------------存儲空間名
| ---------------------------------------------------------------黑名單或白名單配置文件路徑
------------------------------------------------配置命令
2. 配置關鍵字 white_black_list_conf。
3. 只能在http{} 中使用
4. white_black_list_conf可以配置多個 只需 zone=value 其中的value不同就可
5. 配置示例:
http{ ...... white_black_list_conf conf/white.list zone=white:4m; white_black_list_conf conf/black.list zone=black:4m; ...... server{ ....... } ....... }
二、黑白名單作用范圍
1. 配置格式
配置關鍵字 on/off
配置關鍵字有:white_list 與 black_list 分別用來表示白名單與黑名單
2. 能在http{}、server{}、location{}下使用, 功能默認是關閉
3. 配置示例:
http{ ...... white_black_list_conf conf/white.list zone=white1:4m; white_black_list_conf conf/black.list zone=black1:4m; white_list white1 on; #白名單 white1 在整個http{} 中都開啟 black_list black1 on; #黑名單 black1 在整個http{} 中都開啟 server{ ....... } ....... } http{ ...... white_black_list_conf conf/white.list zone=white2:4m; white_black_list_conf conf/black.list zone=black2:4m; server{ ....... white_list white2 on; #白名單 white1 在整個server{} 中都開啟 black_list black2 on; #黑名單 black1 在整個server{} 中都開啟 ....... } ....... } http{ ...... white_black_list_conf conf/white.list zone=white3:4m; white_black_list_conf conf/black.list zone=black3:4m; white_black_list_conf conf/black.list zone=black2:4m; white_black_list_conf conf/white.list zone=white2:4m; server{ ....... location /do { ........ white_list white3 on; #白名單 white3 在location /do{} 中開啟 black_list black3 on; #黑名單 black3 在location /do{} 中開啟 ........ } location /do1{ white_list white2 on; #白名單 white2 在整個server{} 中都開啟 black_list black2 on; #黑名單 black2 在整個server{} 中都開啟 } ....... } ....... }
4.http配置接口說明:
(1)配置配置接口
http{ ....... server{ ...... location /sec_config{ sec_config on; } ...... } ....... }
(2)配置方法:
a. http://xxx/sec_config 查看黑白名單定義情況
返回結果如下
{ "version": "nginx/1.3.0", "code": "0", "item": { "conf_type": "white_black_list_conf", "zone_name": "white", "list_path": "/home/john/nginx/conf/white.list" }, "item": { "conf_type": "white_black_list_conf", "zone_name": "black", "list_path": "/home/john/nginx/conf/black.list" }, "item": { "conf_type": "white_black_list_conf", "zone_name": "ex", "list_path": "/home/john/nginx/conf/status_ex" } }
b. http://xxx/sec_config?zone_name=white 查看zone_name 為white 的 list_path中的具體內容
c.http://xxx/sec_config?zone_name=white&add_item=192.168.141.23 向 zone_name 為white 中增加192.168.141.23
d. http://xxx/sec_config?zone_name=white&delete_item=192.168.141.23 在 zone_name 為white 中刪除192.168.141.23
查看配置方法2:
http://xxx/sec_config?for_each
三、黑白名單文件內容
conf/black.list 文件內容如下
2.2.2.2 192.168.141.1 3.3.3.3 4.4.4.5 2.3.4.4
四、動態黑名單
要使用該功能必須對 ngx_http_limit_req_module.c 進行patch
在ngx_http_limit_req_module.c中
增加#include <white_black_list.h>
并修改代碼找到:
" if (rc == ngx_busy) { ngx_log_error(lrcf->limit_log_level, r->connection->log, 0, "limiting requests, excess: %ui.%03ui by zone \"%v\"", excess / 1000, excess % 1000, &limit->shm_zone->shm.name); "
在其下面增加:
ngx_black_add_item_interface(r, 1);
配備關鍵字:
dyn_black
格式:
dyn_black $zone_name time;
比如:
dyn_black black 60; //禁止訪問60秒,60秒后自動解除
注意:
必須要配置black_list
配置示例:
http{ .... white_black_list_conf conf/black.list zone=black:4m; limit_req_zone $binary_remote_addr zone=one:8m rate=4r/s; ... server { location / { black_list black on; limit_req zone=one burst=6; dyn_black black 60; //禁止訪問60秒,60秒后自動解除 ... } location /xxx { sec_config on; } ... } ... }
ps:基于lua-nginx-module的ngx_lua_waf防火墻
項目地址:https://github.com/loveshell/ngx_lua_waf?utm_source=tuicool&utm_medium=referral
推薦安裝:
推薦使用lujit2.1做lua支持
ngx_lua如果是0.9.2以上版本,建議正則過濾函數改為ngx.re.find,匹配效率會提高三倍左右。
使用說明:
nginx安裝路徑假設為:/usr/local/nginx/conf/
把ngx_lua_waf下載到conf目錄下,解壓命名為waf
在nginx.conf的http段添加
lua_package_path "/usr/local/nginx/conf/waf/?.lua"; lua_shared_dict limit 10m; init_by_lua_file /usr/local/nginx/conf/waf/init.lua; access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;
配置config.lua里的waf規則目錄(一般在waf/conf/目錄下)
rulepath = "/usr/local/nginx/conf/waf/wafconf/"
絕對路徑如有變動,需對應修改
然后重啟nginx即可
配置文件詳細說明:
rulepath = "/usr/local/nginx/conf/waf/wafconf/"
--規則存放目錄
attacklog = "off"
--是否開啟攻擊信息記錄,需要配置logdir
logdir = "/usr/local/nginx/logs/hack/"
--log存儲目錄,該目錄需要用戶自己新建,切需要nginx用戶的可寫權限
urldeny="on"
--是否攔截url訪問
redirect="on"
--是否攔截后重定向
cookiematch = "on"
--是否攔截cookie攻擊
postmatch = "on"
--是否攔截post攻擊
whitemodule = "on"
--是否開啟url白名單
ipwhitelist={"127.0.0.1"}
--ip白名單,多個ip用逗號分隔
ipblocklist={"1.0.0.1"}
--ip黑名單,多個ip用逗號分隔
ccdeny="on"
--是否開啟攔截cc攻擊(需要nginx.conf的http段增加lua_shared_dict limit 10m;)
ccrate = "100/60"
--設置cc攻擊頻率,單位為秒.
--默認1分鐘同一個ip只能請求同一個地址100次
html=[[please go away~~]]
--警告內容,可在中括號內自定義
備注:不要亂動雙引號,區分大小寫
檢查規則是否生效
部署完畢可以嘗試如下命令:
curl http://xxxx/test.php?id=../etc/passwd
返回"please go away~~"字樣,說明規則生效。
注意:默認,本機在白名單不過濾,可自行調整config.lua配置
規則更新:
考慮到正則的緩存問題,動態規則會影響性能,所以暫沒用共享內存字典和redis之類東西做動態管理。
規則更新可以把規則文件放置到其他服務器,通過crontab任務定時下載來更新規則,nginx reload即可生效。以保障ngx lua waf的高性能。
只記錄過濾日志,不開啟過濾,在代碼里在check前面加上--注釋即可,如果需要過濾,反之
一些說明:
過濾規則在wafconf下,可根據需求自行調整,每條規則需換行,或者用|分割
global是全局過濾文件,里面的規則對post和get都過濾
get是只在get請求過濾的規則
post是只在post請求過濾的規則
whitelist是白名單,里面的url匹配到不做過濾
user-agent是對user-agent的過濾規則
默認開啟了get和post過濾,需要開啟cookie過濾的,編輯waf.lua取消部分--注釋即可
日志文件名稱格式如下:虛擬主機名_sec.log
“怎么為Nginx服務器配置黑名單或白名單功能”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。