Kolega niedawno zauważył, że chociaż mój ostatni post podał prawidłowe wyjaśnienie, w jaki sposób 408 może mieć związek ze środkiem bezpieczeństwa, nie zaproponował żadnego rozwiązania.
Dziennik Piped Access to moje osobiste rozwiązanie.
Poniższe elementy powinny działać od razu po instalacji w większości konfiguracji Ubuntu i przy minimalnym majsterkowaniu w innych konfiguracjach Apache. Wybrałem PHP, ponieważ jest najłatwiejszy do zrozumienia. Istnieją dwa skrypty: pierwszy zapobiega zapisywaniu 408 w twoim dzienniku dostępu. Drugi skrypt wysyła wszystkie 408 do osobnego pliku dziennika. Tak czy inaczej, wynik nie będzie już 408s w twoim dzienniku dostępu. To twój wybór, który skrypt wdrożyć.
Użyj swojego ulubionego edytora tekstu, używam nano. Otwórz plik, w którym masz dyrektywy „LogFormat” i „CustomLog”. Skomentuj oryginały zwykłym numerem i dodaj następujące. Możesz znaleźć te dyrektywy w pliku poniżej.
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
UWAGA: Nie loguję obrazów w moim dzienniku dostępu. W moim pliku etc / apache2 / httpd.conf dołączam wiersz
SetEnvIfNoCase Request_URI ".(gif)|(jpg)|(png)|(css)|(js)|(ico)$" dontlog
Jeśli to Cię nie interesuje, usuń env=!dontlog
z CustomLog
dyrektywy.
Teraz stwórz jeden z następujących skryptów PHP ( #!/usr/bin/php
jest to odniesienie do lokalizacji interpretera, upewnij się, że lokalizacja jest poprawna dla twojego systemu - możesz to zrobić, pisząc po znaku zachęty $; whereis php
- powinno to zwrócić coś takiego php: /usr/bin/php /usr/bin/X11/php /usr/share/man/man1/php.1.gz
. widać, że #!/usr/bin/php
jest odpowiedni dla mojej konfiguracji).
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);
}
}
}
?>
Po zapisaniu PipedAccessLog.php
skryptu; upewnij się, że root ma własność, wykonując następujące czynności po znaku zachęty $.
sudo chown -R root:adm /var/log/apache2/PipedAccessLog.php
PipedAccessLog.php
Skrypt musi odczytu / zapisu i wykonania tak wykonać następujące polecenie w wierszu $.
sudo chmod 755 /var/log/apache2/PipedAccessLog.php
Wreszcie, aby wszystko działało, musisz ponownie uruchomić usługę Apache. Wykonaj następujące czynności po znaku zachęty $.
sudo service apache2 restart
Jeśli twoje dzienniki Apache znajdują się gdzie indziej, zmień ścieżki w celu dopasowania do konfiguracji. Powodzenia.