En lisant la documentation du serveur Web nginx, je suis tombé sur un module intéressant appelé module de référencement http . Cela vous permet de bloquer l'accès au site, ou à ses sections, si la requête n'a pas le bon en-tête de référent.
Ce module peut être utilisé pour protéger l’administrateur de n’importe quel site de la force brute. Par exemple, le site fonctionne sur WordPress, mais le blocage de l'accès par ip sera inapproprié si le site a enregistré des utilisateurs. Ils doivent également s'authentifier et collecter leur adresse IP est un exercice dépourvu de sens. :)
Le principe de fonctionnement est simple: le site affiche un lien vers la page de connexion wp-login.php, et dans le fichier de configuration nginx, nous définissons la vérification des demandes sur wp-login.php et / wp-admin / pour la présence de l'adresse de notre site dans l'en-tête de la personne référente.
Tout d’abord, créez un emplacement dédié pour les pages souhaitées. Par exemple:
serveur {
...
emplacement ~ * (wp-login \ .php | wp-admin (. *)) $ {
try_files $ uri = 404;
fastcgi_pass unix: /run/php-www.sock;
emplacement ~ \ .php $ {
inclure fastcgi_params;
fastcgi_param SCRIPT_FILENAME $ racine_documentaire $ fastcgi_script_name;
fastcgi_ignore_client_abort off;
fastcgi_param PHP_VALUE "sendmail_path = / usr / sbin / sendmail -t -i -fmail@example.com";
fastcgi_param PHP_ADMIN_VALUE "open_basedir = / var / www / example.com /: / var / save_path /: / var / tmp_dir /";
}
}
...
}
Comme vous pouvez le constater, les paramètres de traitement des scripts php sont également spécifiés (sinon, les scripts spécifiés à l'emplacement ne fonctionneront pas).
La configuration du module peut être enregistrée immédiatement après l' location ~* (wp-login\.php|wp-admin(.*))$ { .
Première ligne:
valid_referers noms_serveur
Il indique que le référent de site doit être considéré comme le champ de référent correct.
Et aussi nous enregistrons la condition de test. Si le champ référant est incorrect, le serveur affichera une erreur 403 (accès refusé).
if ($ invalid_referer) {
retourne 403;
}
En conséquence, la configuration ressemblera à ceci:
serveur {
...
emplacement ~ * (wp-login \ .php | wp-admin (. *)) $ {
valid_referers noms_serveur
if ($ invalid_referer) {
retourne 403;
}
(paramètres fastcgi)
}
...
}
Enfin, sur le site, ajoutez un lien vers la page de connexion (wp-login.php ou quelque chose d'autre ici). Si un visiteur clique sur ce lien, il reçoit un formulaire d'autorisation. Mais si le bot frappe directement dans ce fichier, il recevra une erreur d'accès.
Oui, il convient de noter que le référent d’en-tête peut être falsifié. Mais pour moi personnellement, les robots avec un champ de référencement correctement rempli ne sont que très rarement rencontrés et ont été bannis par ip. :) Donc, cette méthode peut être tout à fait appropriée.

