溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2022-04-29 16:37:59 來源:億速云 閱讀:2159 作者:iii 欄目:大數(shù)據(jù)

本篇內(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配置

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

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

規(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í)用文章!

向AI問一下細(xì)節(jié)

免責(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)容。

AI