Cara membuat nginx mengubah hala IP tertentu dalam tempoh masa tertentu
Saya menulis peraturan penapisan:
set $trigger 0;
if ($request_body ~ "woaini|admin"){
set $trigger 1;
}
if ($trigger = 1) {
重定向命令
}
Ada masalah di sini, iaitu, jika pihak lain memenuhi syarat, ia akan diubah hala, tetapi apabila anda melawat semula selepas berpuluh-puluh saat atau beberapa saat, pengalihan tidak akan berfungsi.
Apa yang saya mahu ialah apabila pihak yang satu lagi mencetuskan peraturan ini buat kali pertama, IP pihak yang satu lagi akan diubah hala pada hari berikutnya, tidak kira sama ada peraturan tersebut dicetuskan seterusnya. Apabila 24 jam telah berlalu, maka 解封
, jika pihak yang satu lagi mencetuskannya lagi satu hari kemudian, kemudian ubah halanya untuk hari lain.
Di Internet, dikatakan modul ngx_white_black_list digunakan, tetapi tidak jelas di mana dalam kod sumber untuk menulis (menulis semula) arahan yang akan dijalankan oleh senarai hitam. Berikut adalah jawapan yang diberikan dalam talian:
动态黑名单
要使用该功能必须对 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;
}
...
}
...
}
Hanya 禁止访问
diberikan di sini. Tidak pasti sama ada ia perlu ditulis semula sebagai ubah hala
Jika anda ingin menghalang serangan, anda harus menggunakan iptables dan mengosongkannya selepas tempoh masa tertentu.
Jika anda menggunakan Openresty, anda boleh menggunakan rewrite_by_lua