為Nginx服務(wù)器配置黑名單或白名單功能的防火墻
功能描述:
處在黑名單中的ip與網(wǎng)絡(luò),將無法訪問web服務(wù)。
處在白名單中的ip,訪問web服務(wù)時(shí),將不受nginx所有安全模塊的限制。
支持動(dòng)態(tài)黑名單(需要與ngx_http_limit_req 配合)
具體詳見下面的說明
文件配置方法說明
一、定義黑名單或白名單方法:
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
相關(guān)文章
使用nginx同域名下部署多個(gè)vue項(xiàng)目并使用反向代理的方法
這篇文章主要介紹了使用nginx同域名下部署多個(gè)vue項(xiàng)目并使用反向代理的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-02-02Nginx正向代理實(shí)現(xiàn)局域網(wǎng)電腦訪問外網(wǎng)的過程詳解
在工作中我遇到了一個(gè)類似的情況:在公司網(wǎng)絡(luò)中,由于管理要求,局域網(wǎng)內(nèi)的電腦不能直接訪問外網(wǎng),但是,工作上領(lǐng)導(dǎo)吩咐需要讓局域網(wǎng)內(nèi)的電腦能夠訪問外網(wǎng)上的某個(gè)網(wǎng)站,這時(shí)候就需要用到正向代理,本文將介紹如何配置 Nginx 實(shí)現(xiàn)這一功能,需要的朋友可以參考下2024-03-03Nginx服務(wù)器中配置GeoIP模塊來攔截指定國家IP
Nginx中自帶GeoIP模塊可以屏蔽指定IP的請(qǐng)求,只不過默認(rèn)沒有被編譯,打開以后我們只要再下載一個(gè)IP規(guī)則就行,Nginx服務(wù)器中配置GeoIP模塊來攔截指定國家IP2016-06-06NGINX服務(wù)器配置404錯(cuò)誤頁面轉(zhuǎn)向的方法
這篇文章主要為大家詳細(xì)介紹了NGINX服務(wù)器配置404錯(cuò)誤頁面轉(zhuǎn)向的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12nginx反向代理二級(jí)域名綁定方法及注意事項(xiàng)
本文介紹了利用nginx實(shí)現(xiàn)多域名和多站點(diǎn)的綁定的方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2018-04-04