Heim  >  Fragen und Antworten  >  Hauptteil

So veranlassen Sie Nginx, eine bestimmte IP innerhalb eines bestimmten Zeitraums umzuleiten

Wie man Nginx dazu bringt, eine bestimmte IP innerhalb eines bestimmten Zeitraums umzuleiten
Ich habe eine Filterregel geschrieben:

set $trigger 0;
if ($request_body ~ "woaini|admin"){
    set $trigger 1;
}
if ($trigger = 1) {
    重定向命令
}

Hier liegt ein Problem vor, das heißt, wenn die andere Partei die Bedingungen erfüllt, wird sie umgeleitet, aber wenn Sie sie nach mehreren zehn Sekunden oder einigen Sekunden erneut besuchen, funktioniert die Umleitung nicht.
Was ich möchte ist, dass, wenn die andere Partei diese Regeln zum ersten Mal auslöst, die IP der anderen Partei am nächsten Tag umgeleitet wird, unabhängig davon, ob die Regeln als nächstes ausgelöst werden. Wenn 24 Stunden vergangen sind, dann 解封, wenn die andere Partei es einen Tag später erneut auslöst, dann leiten Sie es für einen anderen Tag um.

Im Internet heißt es, dass das Modul ngx_white_black_list verwendet wird, aber es ist nicht klar, wo im Quellcode der von der Blacklist auszuführende Befehl geschrieben (umgeschrieben) werden soll. Hier sind die Antworten online:

动态黑名单
    要使用该功能必须对 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;
                 }
                 ...
                        }
                        ...
                }

Hier wird nur 禁止访问 angegeben. Ich bin mir nicht sicher, ob es als Weiterleitung umgeschrieben werden sollte

漂亮男人漂亮男人2713 Tage vor496

Antworte allen(1)Ich werde antworten

  • 迷茫

    迷茫2017-05-16 17:22:44

    如果要防攻击,应该用iptables,隔断时间清空即可。
    如果用Openresty,可以用rewrite_by_lua

    Antwort
    0
  • StornierenAntwort