Site icon

Requêtes GET suspectes dans les logs Nginx : triage, blocage et durcissement VPS

Illustration de requêtes GET suspectes dans les logs Nginx avec blocage et durcissement VPS

Illustration : triage des requêtes GET suspectes, blocage des scans et durcissement d’un VPS sous Nginx.

NGINX · SÉCURITÉ · VPS

Voir apparaître des requêtes GET suspectes dans les logs Nginx n’est pas rare sur un VPS exposé. Le vrai enjeu est de trier vite, bloquer proprement et durcir sans casser le trafic légitime.

Requêtes GET suspectes dans les logs Nginx : triage, blocage et durcissement VPS

Quand un VPS est exposé sur Internet, les logs Nginx se remplissent vite de chemins improbables, de scans sur /wp-login.php, /.env, /phpmyadmin ou d’appels répétés sur des routes qui n’existent pas. Ce bruit n’est pas une surprise, mais il devient un vrai sujet d’exploitation quand il masque un début d’attaque, fait grimper la charge ou entraîne de mauvais blocages. L’objectif n’est donc pas de bannir tout ce qui bouge. Il faut d’abord lire correctement les signaux, qualifier le niveau de risque, puis mettre en place des protections graduées et maintenables.

Réponse rapide

Si vous observez des requêtes GET suspectes dans les logs Nginx, commencez par isoler les IP les plus bruyantes, les chemins ciblés et la fréquence des erreurs 404/403. Ensuite, appliquez un blocage progressif avec map, return 444, rate limiting et éventuellement Fail2ban. Enfin, durcissez le VPS en réduisant la surface exposée, en surveillant les journaux et en vérifiant que vos endpoints sensibles ne sont plus accessibles inutilement.

Contexte : pourquoi ce bruit apparaît presque toujours sur un VPS

Un serveur web public attire en permanence des robots opportunistes. Certains cherchent une faiblesse connue sur WordPress, d’autres testent des chemins d’administration génériques, d’autres encore essaient simplement de repérer la technologie derrière votre stack. Dans la pratique, un Nginx proprement configuré reçoit donc du trafic parasite même quand le site n’est pas particulièrement connu.

Le piège classique consiste à traiter tout ce bruit comme une urgence de sécurité. C’est contre-productif. Une vraie exploitation se repère plutôt par la répétition, la cohérence des chemins demandés, l’acharnement sur certains endpoints, la corrélation avec d’autres alertes et l’impact technique réel. Pour les petites équipes ops, la bonne approche ressemble à un runbook de triage, pas à une réaction émotionnelle.

💡

Ce qu’il faut retenir

Un VPS exposé reçoit du bruit en continu. L’enjeu n’est pas d’obtenir zéro scan, mais de distinguer le bruit normal des requêtes réellement problématiques puis d’abaisser le risque opérationnel.

Diagnostic : comment lire rapidement les logs sans se noyer

Le premier travail consiste à ramener les logs à une vue exploitable. On veut savoir qui frappe, sur quoi, à quel rythme et avec quel résultat HTTP. Commencez avec les accès Nginx, puis corrélez si besoin avec le journal système et vos métriques de charge.

awk 'print $1, $7, $9' /var/log/nginx/access.log | tail -n 200
awk 'status 403/404/444/499' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head
grep -E 'wp-login|xmlrpc|phpmyadmin|\.env|boaform|vendor|cgi-bin' /var/log/nginx/access.log | tail -n 100
journalctl -u nginx --since '2 hours ago'

Ces commandes donnent déjà une image claire : les IP dominantes, les chemins sensibles visés et les codes retour générés. Si une même adresse enchaîne des dizaines de 404 sur des chemins connus d’exploitation, il s’agit très souvent d’un scan automatisé. Si les mêmes IP provoquent aussi des erreurs applicatives, une montée CPU ou des logs système anormaux, la priorité monte.

Pour des environnements plus structurés, centraliser les logs dans Loki, Elastic ou un SIEM simplifie énormément ce triage. Mais sur un petit VPS, une lecture locale bien faite reste souvent suffisante si elle s’accompagne d’une discipline simple : regarder les top IP, les top chemins, les top user-agents et l’évolution du volume sur une période courte.

⚠️

Erreur fréquente

Bloquer immédiatement à la main après un simple tail -f sans vérifier le volume, le chemin et le user-agent conduit souvent à des faux positifs, surtout derrière un CDN ou un proxy partagé.

Causes fréquentes derrière des requêtes GET suspectes

Les causes les plus courantes sont assez prévisibles. La première est le scan automatisé opportuniste : des robots essaient des routes standards en espérant trouver une interface mal protégée. La deuxième est le fingerprinting technologique : l’attaquant veut savoir si le serveur répond comme un WordPress, un Laravel, un phpMyAdmin ou une stack vulnérable. La troisième est le scraping agressif qui ne cherche pas une faille, mais surcharge l’infrastructure. Enfin, il y a les tests ciblés après divulgation d’une CVE ou après exposition d’un service sur Shodan.

Dans le cas d’un VPS PME, les requêtes /wp-login.php, /xmlrpc.php, /.git/config ou /.env sont typiques du premier niveau. Ce sont surtout des tentatives à faible coût. À l’inverse, une séquence répétée sur des routes métier ou une insistance sur un endpoint d’admin interne montre un intérêt plus spécifique, donc un risque supérieur.

🤖

Scan opportuniste

Routes génériques, volume moyen, peu de sophistication. C’est le cas le plus fréquent.

🧪

Fingerprinting

L’attaquant cherche à identifier précisément la stack et ses composants exposés.

📈

Scraping / abuse

Le trafic est réel mais trop agressif pour un petit VPS et peut dégrader la disponibilité.

🎯

Ciblage spécifique

Même IP, mêmes routes sensibles, persistance élevée : le niveau d’attention doit monter.

Solutions : triage, blocage et durcissement sans casser la prod

La bonne réponse se fait en couches. Première couche : fermer ou masquer ce qui n’a rien à faire sur un VPS public. Si vous n’utilisez pas WordPress, inutile de laisser répondre un chemin trompeur. Si vous n’avez pas d’interface d’admin publique, forcez une restriction réseau ou une authentification supplémentaire.

Deuxième couche : créer des réponses cohérentes côté Nginx. Pour certains chemins techniques que vous ne servirez jamais, un return 444 ou un deny all simple réduit le bruit et économise des ressources. Pour les pics de fréquence, le module limit_req de Nginx reste une mesure légère et efficace.

map request_uri bad_probe
  default 0
  env phpmyadmin wp-login xmlrpc => 1
server
  if bad_probe then return 444
  location / with limit_req and try_files

Troisième couche : automatiser le blocage sur motif avec Fail2ban. Ce n’est pas la seule voie, mais pour un VPS simple c’est souvent le meilleur ratio effort/résultat. Un filtre sur des 404/403 massifs vers des chemins connus, combiné à une jail courte puis plus longue en cas de récidive, donne de bons résultats. La documentation officielle de Fail2ban reste une base fiable, et vous pouvez compléter avec votre durcissement SSH existant ou un article comme ce guide Fail2ban/Ansible.

[nginx-bad-probes]
enabled  = true
port     = http,https
filter   = nginx-bad-probes
logpath  = /var/log/nginx/access.log
maxretry = 8
findtime = 600
bantime  = 3600
action   = iptables-multiport[name=nginx-bad-probes, port="http,https"]

Quatrième couche : travailler l’hygiène d’exploitation. Les logs doivent être conservés assez longtemps pour comprendre une séquence, mais pas au point d’exploser le disque. Les paquets Nginx et OpenSSL doivent être à jour. Les routes d’admin doivent être limitées. Les entêtes utiles, le TLS, la journalisation et la supervision doivent être revus ensemble. Sur ce point, un audit type Lynis sur serveur Linux aide à remettre les priorités dans le bon ordre.

🔴

Point bloquant à surveiller

Si vous bloquez trop large au niveau Nginx ou firewall sans journaliser, vous perdez la visibilité nécessaire pour distinguer un scan banal d’un ciblage applicatif réel.

Prévention : comment réduire durablement le bruit utilement

La prévention repose surtout sur la réduction de surface d’attaque. Retirez les endpoints inutiles, servez une application minimale, limitez les interfaces d’administration par IP ou VPN, et placez si besoin un service amont comme Cloudflare quand la volumétrie devient pénible. Pensez aussi au découplage : un front Nginx propre, une appli derrière, et aucune exposition accidentelle de fichiers de build ou de variables d’environnement.

Il faut également ritualiser la revue des logs. Une revue hebdomadaire de quinze minutes vaut mieux qu’une réaction dans la panique une fois par trimestre. Cherchez les nouvelles routes visées, les changements de user-agent, les IP récurrentes et les hausses de fréquence. C’est souvent là qu’on repère les dérives avant incident.

Bonne pratique

Conservez un petit catalogue interne des chemins à risque observés sur votre parc. Cela accélère le triage et évite de réinventer les mêmes filtres à chaque nouveau VPS.

Checklist de réponse rapide

✅ Checklist triage + blocage

Identifier les top IP, top chemins et top codes HTTP sur les 2 dernières heures
Vérifier si les chemins sensibles comme /wp-login.php ou /.env doivent répondre ou non
Activer une réponse Nginx légère : return 444, deny all ou limit_req
Automatiser les récidives avec Fail2ban et revoir les bans chaque semaine
Contrôler les mises à jour, l’exposition admin, les sauvegardes et la supervision du VPS

Erreurs courantes qui aggravent le problème

🧯 Bannir à la main au cas par cas

Cette approche fatigue l’équipe et ne passe pas à l’échelle. Il faut transformer les motifs récurrents en règles maintenables.

📉 Ne regarder que les 404

Un attaquant peut aussi produire des 200 ou des 301 sur des chemins mal protégés. Le triage doit garder une vue plus large que les seules erreurs.

🧱 Exposer une admin sans filtre réseau

Si une interface interne reste joignable publiquement, les scans finiront toujours par tomber dessus.

🕳 Oublier la supervision

Sans métriques CPU, RAM, I/O et réseau, il est difficile de savoir si le bruit observé reste bénin ou commence à dégrader le service.

FAQ

Toutes les requêtes GET inconnues sont-elles dangereuses ?
Non. Une partie du bruit Internet vient de scanners automatisés qui cherchent des chemins courants comme /wp-login.php, /.env ou /phpmyadmin. Elles ne signifient pas forcément compromission, mais elles révèlent qu’un service exposé est testé.
Quand faut-il bloquer une IP immédiatement ?
Bloque rapidement si une même IP enchaîne des chemins sensibles, provoque beaucoup de 404/403 en peu de temps, change peu de user-agent et insiste sur des endpoints d’administration. À l’inverse, un crawler légitime doit être vérifié avant blocage.
Fail2ban suffit-il pour protéger Nginx ?
Fail2ban est utile pour réagir aux motifs connus, mais il ne remplace pas un durcissement global : mises à jour, rate limiting, réduction de surface exposée, journalisation propre et revue régulière des accès.
Faut-il installer un WAF complet sur un petit VPS ?
Pas toujours. Pour une petite stack, commence souvent par des règles Nginx propres, des listes de chemins sensibles, du rate limiting et éventuellement un service amont type Cloudflare. Un WAF complet devient pertinent quand l’exposition et la criticité montent.
Quels indicateurs montrent qu’on passe du bruit à une attaque réelle ?
Une hausse brutale du taux de 401/403/404, des tentatives répétées sur les mêmes comptes, des user-agents incohérents, des pics réseau sur le VPS ou des erreurs applicatives couplées à des scans sont des signaux plus sérieux.

Conclusion

Des requêtes GET suspectes dans les logs Nginx ne veulent pas dire que votre VPS est compromis, mais elles rappellent qu’Internet teste en permanence la moindre exposition. Avec un triage simple, des filtres Nginx bien choisis, un blocage automatisé et un durcissement progressif, vous passez d’une réaction au coup par coup à une défense exploitable par une petite équipe. C’est cette discipline qui fait la différence entre un serveur simplement exposé et un serveur réellement résilient.

Besoin d’un audit rapide de votre VPS ou de vos logs Nginx ?

Linux-Man peut vous aider à mettre en place un triage fiable, un durcissement pragmatique et une protection adaptée à votre niveau d’exposition.

Contacte-moi →

Quitter la version mobile