Comme tous les routeurs du monde exposés à internet le mien reçoit des dizaines de milliers de scan de ports ou de tentatives de connexions chaque jour. La plupart d’entre elles se retrouve immédiatement bloquée par le firewall selon les règles en place.
Des ports TCP forcément ouverts
Plusieurs milliers passent néanmoins par les ports tcp/80 et tcp/443 ouverts qui sont indispensables pour atteindre le serveur web Apache qui héberge ce WordPress.
Une extension indispensable…
J’ai mis en place l’extension « WPS Limit Login » qui sert à protéger l’interface de connexion des attaques de type Brute Force en bloquant l’adresse IP qui attaque après quelques tentatives pour une durée choisie. Deux essais en 1 heures avant 24 heures de blocage puis 48 heures de blocage si un 3eme essai non concluant est effectué durant ces 24 heures, cela limite grandement les risques d’intrusion!


…mais insuffisante
Extension efficace, merci aux développeurs, mais l’afflux constant de mails d’avertissement prouve bien que les tentatives sont permanentes.

Pourquoi laisser la possibilité aux hackers et robots spammeurs de non seulement continuer à tenter de rentrer à force de tentatives et en plus de solliciter le serveur, la base de données, et donc gaspiller du temps CPU ?
Trouver la parade
Il est donc nécessaire d’ajouter une couche de protection supplémentaire.
Comme je n’ai jamais besoin de publier depuis une adresse IP autre que locale ou via mon VPN, il n’est pas nécessaire d’autoriser d’autres adresses se connecter.
Les tentatives de connexion que j’ai pu observer se font via le répertoire /wp-admin ou directement en attaquant les fichiers wp-login.php et xmlrpc.php
Paramétrage au niveau du serveur Apache
La solution pour bloquer ces attaques est donc de n’autoriser le serveur Apache à servir uniquement les adresses locales LAN et VPN (192.168.0.0/24) et les adresse IPv6 statique de chacun de mes clients. Cela se paramètre en utilisant des directives au niveau du serveur Apache
<Files /var/www/wp/wp-login.php>
Require ip 192.168
Require ip 1a02:3456:7890:ab00::/56
ErrorDocument 403 "Page not found"
</Files>
<Files /var/www/wp/wp-signup.php>
Require ip 192.168
Require ip 1a02:3456:7890:ab00::/56
ErrorDocument 403 "Page not found"
</Files>
<Files /var/www/wp/xmlrpc.php>
Require ip 192.168
Require ip 1a02:3456:7890:ab00::/56
ErrorDocument 403 "Page not found"
</Files>
<Directory /var/www/wp/wp-admin>
Require ip 192.168
Require ip 1a02:3456:7890:ab00::/56
ErrorDocument 403 "Page not found"
</Files>
On en profite pour tricher un peu et mettre un message d’erreur de type 404 « Page not found » pour une erreur d’accès non autorisé 403 😉.
Bilan
Cette menace cesse instantanément et hasard ou pas, les attaques aussi comme si les robots avaient abandonné en l’absence de réponse cohérente à leurs sollicitations. En effet les fichiers leur étant désormais inaccessibles, inexistants de leur point de vue, il est vain de poursuivre ces attaques.