怎么為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 查看黑白名單定義情況
返回結(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

四、動態(tài)黑名單
??? 要使用該功能必須對 ngx_http_limit_req_module.c 進行patch
??? 在ngx_http_limit_req_module.c中
??? 增加#include
??? 并修改代碼找到:

??" ??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以上版本,建議正則過濾函數(shù)改為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規(guī)則目錄(一般在waf/conf/目錄下)

??rulepath?=?"/usr/local/nginx/conf/waf/wafconf/"

絕對路徑如有變動,需對應修改

然后重啟nginx即可

配置文件詳細說明:

? rulepath = “/usr/local/nginx/conf/waf/wafconf/”
? –規(guī)則存放目錄
? attacklog = “off”
? –是否開啟攻擊信息記錄,需要配置logdir
? logdir = “/usr/local/nginx/logs/hack/”
? –log存儲目錄,該目錄需要用戶自己新建,切需要nginx用戶的可寫權(quán)限
? 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~~]]
? –警告內(nèi)容,可在中括號內(nèi)自定義
? 備注:不要亂動雙引號,區(qū)分大小寫

檢查規(guī)則是否生效

部署完畢可以嘗試如下命令:

??curl?http://xxxx/test.php?id=../etc/passwd

??? 返回”please go away~~”字樣,說明規(guī)則生效。
注意:默認,本機在白名單不過濾,可自行調(diào)整config.lua配置

怎么為Nginx服務器配置黑名單或白名單功能

怎么為Nginx服務器配置黑名單或白名單功能

規(guī)則更新:

考慮到正則的緩存問題,動態(tài)規(guī)則會影響性能,所以暫沒用共享內(nèi)存字典和redis之類東西做動態(tài)管理。

規(guī)則更新可以把規(guī)則文件放置到其他服務器,通過crontab任務定時下載來更新規(guī)則,nginx reload即可生效。以保障ngx lua waf的高性能。

只記錄過濾日志,不開啟過濾,在代碼里在check前面加上–注釋即可,如果需要過濾,反之

一些說明:

過濾規(guī)則在wafconf下,可根據(jù)需求自行調(diào)整,每條規(guī)則需換行,或者用|分割

  • ? global是全局過濾文件,里面的規(guī)則對post和get都過濾?

  • ? get是只在get請求過濾的規(guī)則??

  • ? post是只在post請求過濾的規(guī)則??

  • ? whitelist是白名單,里面的url匹配到不做過濾???

  • ? user-agent是對user-agent的過濾規(guī)則

默認開啟了get和post過濾,需要開啟cookie過濾的,編輯waf.lua取消部分–注釋即可

日志文件名稱格式如下:虛擬主機名_sec.log

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊14 分享