Depuis peu j’ai ouvert mon port 80 sur l’extérieur, et je découvre les joies du remplissage de log.
J’ai eu en particulier une IP plutôt insistante qui a testé l’existence d’une bonne quantité de fichiers, jetée par une 404 à chaque fois :
dave@HAL9000:/var/log$ grep "81.17.20.38" nginx/error.log | wc -l
924
dave@HAL9000:/var/log$ grep "81.17.20.38" nginx/error.log | head -n1
2014/09/09 22:30:59 [error] 17799#0: *18 open() "/home/dave/dotslashplay.it/html/w00tw00t.at.blackhats.romanian.anti-sec:)" failed (2: No such file or directory), client: 81.17.20.38, server: localhost, request: "GET /w00tw00t.at.blackhats.romanian.anti-sec:) HTTP/1.1", host: "*.*.*.*"
dave@HAL9000:/var/log$ grep "81.17.20.38" nginx/error.log | tail -n1
2014/09/10 01:39:28 [error] 17799#0: *947 open() "/home/dave/dotslashplay.it/html/phpMyAdmin3/scripts/setup.php" failed (2: No such file or directory), client: 81.17.20.38, server: localhost, request: "GET /phpMyAdmin3/scripts/setup.php HTTP/1.1", host: "*.*.*.*"
Pour bloquer ce genre de scan (pour limiter la charge sur mon serveur), je pensais créer une règle fail2ban qui bloque les IP enchaînant au moins 10 erreurs 404 en une minute.
Le 10 erreurs en une minute, c’est OK avec :
findtime = 60
maxretry = 10
Par contre je bloque pour la regex à utiliser dans le champ failregex. Je cherche à repérer les lignes contenant la chaîne “No such file or directory”, mais n’ayant jamais manipulé d’expressions régulières je n’ai aucune idée de la façon dont je dois le formuler.
Merci d’avance pour votre aide !