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