国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > Nginx > 正文

為Nginx服務器配置黑名單或白名單功能的防火墻

2024-08-30 12:28:00
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了為Nginx服務器配置黑名單或白名單功能的防火墻的方法,文中還附帶介紹了一個基于lua的第三方防火墻模塊,需要的朋友可以參考下
 

功能描述:
處在黑名單中的ip與網絡,將無法訪問web服務。
處在白名單中的ip,訪問web服務時,將不受nginx所有安全模塊的限制。
支持動態黑名單(需要與ngx_http_limit_req 配合)
具體詳見下面的說明
文件配置方法說明
一、定義黑名單或白名單方法:
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.2192.168.141.13.3.3.34.4.4.52.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配置

為Nginx服務器配置黑名單或白名單功能的防火墻

為Nginx服務器配置黑名單或白名單功能的防火墻

規則更新:

考慮到正則的緩存問題,動態規則會影響性能,所以暫沒用共享內存字典和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



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武城县| 鹿泉市| 郎溪县| 通渭县| 德庆县| 水富县| 交城县| 新和县| 绵竹市| 年辖:市辖区| 湛江市| 葫芦岛市| 大埔区| 平阴县| 砀山县| 华阴市| 深泽县| 余干县| 临猗县| 大同市| 昌都县| 广昌县| 高淳县| 安岳县| 休宁县| 平阳县| 城口县| 巨野县| 神农架林区| 贺兰县| 明星| 澳门| 杭锦后旗| 汶上县| 兴城市| 白河县| 疏附县| 湖北省| 青铜峡市| 本溪市| 徐州市|