Bagaimana untuk mengkonfigurasi fungsi senarai hitam atau senarai putih untuk pelayan Nginx

王林
Lepaskan: 2023-05-17 15:40:06
ke hadapan
2298 orang telah melayarinya

1. Kaedah menentukan senarai hitam atau senarai putih:
1 Format konfigurasi
Konfigurasikan senarai hitam kata kunci atau senarai putih ruang storan
white_black_list_conf conf/white.list zone =white:2m ;
|. --Saiz ruang simpanan di sini ialah 2m Saiz ruang menentukan kapasiti senarai hitam dan putih
|. ------------------------------------------------- --------------------Nama ruang storan
|. -------------------------------------------------Senarai hitam atau laluan fail konfigurasi senarai putih
- ------------------------------------------ --------Arahan konfigurasi
2. Konfigurasikan kata kunci white_black_list_conf.
3. Hanya boleh digunakan dalam http{}
4. White_black_list_conf boleh dikonfigurasikan dengan berbilang nilai selagi zon=nilai berbeza
5

2. Skop senarai hitam dan putih

1. Format konfigurasiKata kunci konfigurasi hidup/mati
Kata kunci konfigurasi ialah: white_list dan black_list digunakan untuk mewakili senarai putih dan hitam senarai masing-masing
2. Boleh digunakan di bawah http{}, pelayan{}, lokasi{}, fungsi dimatikan secara lalai
3 Contoh konfigurasi:

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

4. Penerangan antara muka konfigurasi http:
(1) Antara muka konfigurasi konfigurasi

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{} 中都开启
        }
        .......
    }
    .......
}
Salin selepas log masuk

(2) Kaedah konfigurasi:
a http://xxx/sec_config Semak definisi senarai hitam putih

Hasil yang dikembalikan adalah seperti berikut


http{
    .......
    server{
        ......
        location /sec_config{
            sec_config on;
        }
        ......
    }
    .......
}
Salin selepas log masuk

b http://xxx/sec_config?zone_name=white Lihat kandungan tertentu dalam list_path di mana zone_name berwarna putih
c. /xxx/sec_config?zone_name=white&add_item=192.168.141.23 Tambahkan 192.168.141.23

d ke zone_name adalah putih. 🎜>Lihat kaedah konfigurasi 2:

http://xxx/sec_config?for_each

3 Kandungan fail senarai hitam putih

conf/black.list kandungan fail adalah seperti berikut

{
    "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"
    }
}
Salin selepas log masuk

4. Senarai hitam dinamik

Untuk menggunakan fungsi ini, anda mesti menampal ngx_http_limit_req_module.c

Dalam ngx_http_limit_req_module.c Tambah #white_de_black.
dan ubah suai kod untuk mencari:

2.2.2.2
192.168.141.1
3.3.3.3
4.4.4.5
2.3.4.4
Salin selepas log masuk

Tambah di bawahnya:

  "
  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);
    "
Salin selepas log masuk

Dilengkapi dengan kata kunci:

dyn_black
Format:

dyn_ black $zone_name time;

Contohnya:< L> Dyn_black Black 60; // Akses dilarang untuk akses selama 60 saat, dan secara automatik mengetepikan
Nota:
mesti mengkonfigurasi Black_list
Contoh Konfigurasi:

  ngx_black_add_item_interface(r, 1);
Salin selepas log masuk


PS> PS : ngx_lua_waf firewall berdasarkan modul lua-nginx

Alamat projek: https://github.com/loveshell/ngx_lua_waf?utm_source =tuicool&utm_medium=referral

Pemasangan yang disyorkan:Adalah disyorkan untuk menggunakan lujit2.1 untuk sokongan Lua

Jika ngx_lua ialah versi 0.9.2 ke atas, adalah disyorkan untuk menukar yang biasa fungsi penapis ke ngx.re.find, yang akan meningkatkan kecekapan pemadanan kira-kira tiga kali ganda.

Arahan penggunaan:

Laluan pemasangan nginx diandaikan sebagai:/usr/local/nginx/conf/

Muat turun ngx_lua_waf ke direktori conf, nyahzipnya dan namakannya waf

Tambah

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;
         }
         ...
            }
            ...
        }
Salin selepas log masuk

dalam bahagian http nginx.conf untuk mengkonfigurasi direktori peraturan waf dalam config.lua (biasanya dalam direktori 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;
Salin selepas log masuk

Laluan mutlak tertakluk kepada perubahan , anda perlu mengubah suai dengan sewajarnya

dan kemudian mulakan semula nginx

Butiran fail konfigurasi:

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
Salin selepas log masuk

    返回"please go away~~"字样,说明规则生效。
注意:默认,本机在白名单不过滤,可自行调整config.lua配置

Bagaimana untuk mengkonfigurasi fungsi senarai hitam atau senarai putih untuk pelayan Nginx

Bagaimana untuk mengkonfigurasi fungsi senarai hitam atau senarai putih untuk pelayan 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

Atas ialah kandungan terperinci Bagaimana untuk mengkonfigurasi fungsi senarai hitam atau senarai putih untuk pelayan Nginx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!