Seorang kolega baru-baru ini mengatakan bahwa sementara posting terakhir saya memberikan penjelasan yang valid bagaimana 408 dapat memiliki hubungan dengan tindakan keamanan, itu tidak menawarkan solusi.
Log Akses Pipa adalah solusi pribadi saya.
Yang berikut ini harusnya bekerja di luar kotak pada sebagian besar konfigurasi Ubuntu, dan dengan sedikit mengutak-atik konfigurasi Apache lainnya. Saya memilih PHP karena ini yang paling mudah dimengerti. Ada dua skrip: yang pertama mencegah 408 ditulis ke log akses Anda. Skrip kedua mengirim semua 408 ke file log terpisah. Apa pun hasilnya, tidak ada lagi 408 dalam log akses Anda. Ini adalah skrip pilihan Anda untuk diimplementasikan.
Gunakan editor teks favorit Anda, saya menggunakan nano. Buka file di mana Anda memiliki arahan 'LogFormat' dan 'CustomLog' Anda. Beri komentar asli dengan # biasa dan tambahkan yang berikut. Anda dapat menemukan arahan ini dalam file di bawah ini.
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
CATATAN: Saya tidak mencatat gambar di log akses saya. Dalam file etc / apache2 / httpd.conf saya, saya menyertakan baris
SetEnvIfNoCase Request_URI ".(gif)|(jpg)|(png)|(css)|(js)|(ico)$" dontlog
Jika ini tidak menarik bagi Anda maka hapus env=!dontlog
dari CustomLog
arahan.
Sekarang buat salah satu skrip PHP berikut ( #!/usr/bin/php
adalah referensi ke lokasi penerjemah, pastikan lokasi itu benar untuk sistem Anda - Anda dapat melakukan ini dengan mengetikkan $ prompt; whereis php
- ini akan menghasilkan sesuatu seperti php: /usr/bin/php /usr/bin/X11/php /usr/share/man/man1/php.1.gz
. Ketika Anda dapat melihat #!/usr/bin/php
tepat untuk pengaturan saya).
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);
}
}
}
?>
Setelah menyimpan PipedAccessLog.php
skrip; pastikan bahwa root memiliki kepemilikan dengan menjalankan yang berikut di $ prompt.
sudo chown -R root:adm /var/log/apache2/PipedAccessLog.php
The PipedAccessLog.php
Script akan perlu membaca / menulis dan melaksanakan hak akses sehingga mengeksekusi berikut di $ prompt.
sudo chmod 755 /var/log/apache2/PipedAccessLog.php
Akhirnya agar semuanya berfungsi, Anda harus memulai kembali layanan Apache. Jalankan yang berikut di $ prompt.
sudo service apache2 restart
Jika log Apache Anda berada di tempat lain, maka ubah jalur yang sesuai dengan konfigurasi Anda. Semoga berhasil.