>  기사  >  운영 및 유지보수  >  Nginx 서버에 대한 블랙리스트 또는 화이트리스트 기능을 구성하는 방법

Nginx 서버에 대한 블랙리스트 또는 화이트리스트 기능을 구성하는 방법

王林
王林앞으로
2023-05-17 15:40:062322검색

1. 블랙리스트 또는 화이트리스트 정의 방법:
키워드 블랙리스트 또는 화이트리스트 파일 저장 공간 구성
white.list zone=white:2m;
| --------------------------------저장 공간 크기는 여기 2m입니다. 공간 크기에 따라 흑백 목록의 용량이 결정됩니다.
| ------------- ----------- ------------- 저장공간 이름
------------------- ------------- -----블랙리스트 또는 화이트리스트 구성 파일 경로
------------ --- -----------구성 명령
2.white_black_list_conf 키워드를 구성합니다.
3. http{}에서만 사용할 수 있습니다.
4. zone=value가 다른 한 ​​White_black_list_conf는 여러 값으로 구성할 수 있습니다.
5. 구성 예:

http{
    ......
    white_black_list_conf conf/white.list zone=white:4m;
    white_black_list_conf conf/black.list zone=black:4m;
    ......
    server{
    .......
    }
    .......
}


2. 블랙리스트와 화이트리스트의 범위

1. 구성 형식구성 키워드 on/off
구성 키워드는 각각 화이트리스트와 블랙리스트를 나타내는 데 사용됩니다.
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) 구성 방법: 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
c.http://xxx/sec_config?zone_name인 list_path에서 특정 내용을 봅니다. =white&add_item=192.168.141.23 zone_name에 192.168.141.23
d를 추가하면 흰색입니다. http://xxx/sec_config?zone_name=white&delete_item=192.168.141.23 zone_name에 192.168.141.23을 삭제하면 흰색입니다

구성 방법 보기 2:

http: / /xxx/sec_config?for_each

3. 흑백 목록 파일

conf/black.list 파일 내용은 다음과 같습니다

2.2.2.2
192.168.141.1
3.3.3.3
4.4.4.5
2.3.4.4

4. 동적 블랙리스트

이 기능을 사용하려면 패치가 필요합니다. ngx_http_limit_req_module.c

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 $zone_name 시간;

                                                                                                 |
ps: ngx_lua_waf 방화벽 프로젝트 기반 lua-nginx-module 주소: https://github.com/loveshell/ngx_lua_waf?utm_source=tuicool&utm_medium=referral

권장 설치:


Lua 지원을 위해 lujit2.1을 사용하는 것이 좋습니다

ngx_lua 버전이 0.9인 경우. 2 이상에서는 일반 필터 기능을 ngx.re.find로 변경하는 것이 좋습니다. 매칭 효율이 약 3배 정도 높아집니다.

사용 지침:

nginx 설치 경로는 다음과 같습니다:/usr/local/nginx/conf/

ngx_lua_waf를 conf 디렉터리에 다운로드하고 압축을 풀고 이름을 waf로 지정합니다.

http에

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;
         }
         ...
            }
            ...
        }
구성을 추가합니다. nginx.conf 섹션 config.lua의 waf 규칙 디렉터리(보통 waf/conf/ 디렉터리 아래)

  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;

절대 경로가 변경되면 그에 따라 수정해야 합니다

그런 다음 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

위 내용은 Nginx 서버에 대한 블랙리스트 또는 화이트리스트 기능을 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제