Un collègue a récemment fait remarquer que si mon dernier message expliquait de manière valable comment une 408 pouvait être associée à une mesure de sécurité, il ne proposait aucune solution.
Piped Access Log est ma solution personnelle.
Ce qui suit devrait fonctionner immédiatement avec la plupart des configurations Ubuntu et avec un minimum de retouches sur les autres configurations Apache. J'ai choisi PHP parce que c'est le plus facile à comprendre. Il existe deux scripts: le premier empêche l’écriture d’un fichier 408 dans votre journal d’accès. Le second script envoie les 408 dans un fichier journal séparé. Dans les deux cas, le résultat n’a plus 408s dans votre journal d’accès. C'est à vous de choisir le script à implémenter.
Utilisez votre éditeur de texte préféré, j'utilise nano. Ouvrez le fichier où vous avez vos directives 'LogFormat' et 'CustomLog'. Mettez les originaux avec le # habituel et ajoutez le texte suivant. Vous pouvez trouver ces directives dans le fichier ci-dessous.
sudo nano / etc / apache2 / sites-available / default
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" AccessLogPipe
CustomLog "|/var/log/apache2/PipedAccessLog.php" AccessLogPipe env=!dontlog
REMARQUE: je n'enregistre pas les images dans mon journal d'accès. Dans mon fichier etc / apache2 / httpd.conf, j'inclus la ligne
SetEnvIfNoCase Request_URI ".(gif)|(jpg)|(png)|(css)|(js)|(ico)$" dontlog
Si cela ne vous intéresse pas, supprimez le env=!dontlog
de la CustomLog
directive.
Créez maintenant l’un des scripts PHP suivants ( #!/usr/bin/php
référence à l’emplacement de l’interprète, assurez-vous que cet emplacement est correct pour votre système - vous pouvez le faire en tapant à l’invite $; whereis php
- ceci devrait retourner quelque chose comme php: /usr/bin/php /usr/bin/X11/php /usr/share/man/man1/php.1.gz
. peut voir #!/usr/bin/php
est juste pour ma configuration).
sudo nano /var/log/apache2/PipedAccessLog.php
#!/usr/bin/php
<?php
$file = '/var/log/apache2/access.log';
$no408 = '"-" 408 0 "-" "-"';
$stdin = fopen ('php://stdin', 'r');
ob_implicit_flush (true);
while ($line = fgets ($stdin)) {
if($line != "") {
if(stristr($line,$no408,true) == "") {
file_put_contents($file, $line, FILE_APPEND | LOCK_EX);
}
}
}
?>
sudo nano /var/log/apache2/PipedAccessLog.php
#!/usr/bin/php
<?php
$file = '/var/log/apache2/access.log';
$file408 = '/var/log/apache2/408.log';
$no408 = '"-" 408 0 "-" "-"';
$stdin = fopen ('php://stdin', 'r');
ob_implicit_flush (true);
while ($line = fgets ($stdin)) {
if($line != "") {
if(stristr($line,$no408,true) != "") {
file_put_contents($file408, $line, FILE_APPEND | LOCK_EX);
}
else {
file_put_contents($file, $line, FILE_APPEND | LOCK_EX);
}
}
}
?>
Ayant sauvé le PipedAccessLog.php
script; assurez-vous que la racine est la propriété en exécutant ce qui suit à l’invite $.
sudo chown -R root:adm /var/log/apache2/PipedAccessLog.php
Le PipedAccessLog.php
script nécessitera des autorisations de lecture / écriture et d’exécution; exécutez les opérations suivantes à l’invite $.
sudo chmod 755 /var/log/apache2/PipedAccessLog.php
Enfin, pour que tout fonctionne, vous devez redémarrer le service Apache. Exécutez ce qui suit à l’invite $.
sudo service apache2 restart
Si vos journaux Apache sont situés ailleurs, modifiez les chemins en fonction de votre configuration. Bonne chance.