Faire répondre le serveur Nginx lentement

8

J'ai donc un spammeur sur mon site. Je pourrais bloquer son adresse IP en utilisant «refuser», mais il changera simplement son adresse IP et je devrai continuer à jouer au chat et à la souris avec lui.

Au lieu de cela, je suis curieux de savoir s'il existe un moyen de configurer nginx pour répondre plus lentement à son IP.

De cette façon, peut-être qu'il décidera simplement que le site ne fonctionne pas correctement et me laissera tranquille.

Merci

vinhboy
la source

Réponses:

7

La directive Nginx limit_ratevous permet de spécifier la vitesse à laquelle vous souhaitez évaluer les réponses limites, par exemple

location / {
  if ($slow) {
    limit_rate 4k;
  }
}

La documentation Nginx est ici . (à partir de la documentation, vous verrez que votre backend peut prendre la décision et demander à Nginx de limiter le taux du client)

La façon dont vous obtenez cet $slowensemble de variables dépend de votre configuration. Le plus simple serait de le définir via la geocartographie:

geo $slow {
  default    0;

  1.2.3.0/24 1;
}

Le mappage "Geo" est une dépendance $slowbasée sur l'adresse IP du client. C'est 0 par défaut et 1 si une adresse IP client est dans le 1.2.3.0/24sous-réseau. Voir la documentation Nginx sur "geo" ici

L'utilisation de "fail2ban" est une évolution raisonnable de toute cette solution. Vous pouvez utiliser «fail2ban» pour détecter automatiquement les activités inhabituelles et collecter les adresses IP pour Nginx, puis recharger Nginx afin qu'il relise les listes d'adresses IP qui doivent être ralenties et / ou bloquées.

Alexander Azarov
la source
5

Si vous voulez inciter l'utilisateur incriminé à penser qu'il passe toujours inaperçu de votre part, vous pouvez utiliser le module de limitation des demandes de nginx ( http://wiki.nginx.org/HttpLimitReqModule ).

Définissez d'abord une zone limite de demande:

http {
    limit_req_zone  $binary_remote_addr  zone=spammers:1m   rate=30r/m;
}

Cette zone utilisera l'adresse IP du délinquant afin d'identifier et de limiter les demandes à 30 par minute (1/2 seconde). Veuillez noter que la taille de la mémoire de la zone est définie sur 1 Mio, ce qui signifie qu'elle peut gérer 1 Mio / 64 octets par compartiment de demande = 16384 adresses de spammeurs (ce qui est peut-être une surpuissance pour notre cas). Ajustez respectivement, si vous le devez.

Ensuite, nous définissons la directive qui acheminera réellement le délinquant à travers le limiteur en utilisant un (mal, malheureusement) si cas:

location / {
    if ($remote_addr = 1.2.3.4) {
        limit_req   zone=spammer  burst=5;
    }
}

Vous pouvez voir les fruits de votre travail dans le journal d'accès du serveur.

Notez que ce hack n'est pas bien évolutif, car vous devrez mettre à jour le fichier de configuration à chaque fois que le délinquant change d'IP (sans parler d'inclure plus d'adresses IP, ce qui signifie plus de cas), mais cela fonctionne.

Panagiotis PJ Papadomitsos
la source
1
Vous pouvez également combiner ma réponse avec le bloc géographique d'Alexander Azarov et le rendre plus évolutif!
Panagiotis PJ Papadomitsos
2

La meilleure façon de traiter ce spammeur est d'installer et de configurer correctement fail2ban. Fail2ban recherchera les modèles dans les fichiers journaux et bloquera tous les ips qui spamment votre site. Bien sûr, vous devez le configurer pour rechercher le modèle approprié.

B14D3
la source