Streaming Access Log Scanner
Sebagian besar serangan siber (seperti scanning direktori WordPress, probing phpmyadmin, pemindaian berkas .git, dan brute force HTTP dasar) ditolak...
Sebagian besar serangan siber (seperti scanning direktori WordPress, probing phpmyadmin, pemindaian berkas .git, dan brute force HTTP dasar) ditolak langsung oleh web server (Nginx/Apache) dengan status HTTP 404 atau 403 sebelum request sempat diteruskan ke proses PHP Laravel.
Akibatnya, request tersebut tidak pernah melewati middleware Laravel dan tidak tercatat di tabel pasax_logs.
Layanan AccessLogScannerService memecahkan masalah ini dengan membaca dan menganalisis berkas log akses mentah (raw access logs) web server secara streaming.
1. Arsitektur Hemat Memori (PHP Generator Stream)#
Berkas log akses produksi pada aplikasi sibuk sering kali berukuran ratusan megabyte hingga beberapa gigabyte dengan jutaan baris entri. Jika dibaca sekaligus menggunakan file_get_contents() atau file(), proses PHP akan langsung mengalami Memory Exhaustion Fatal Error.
AccessLogScannerService dirancang menggunakan PHP Generators (yield):
- Baris berkas log dibaca satu per satu dari disk menggunakan pointer
fgets(). - Hanya satu baris yang berada di RAM pada satu waktu.
- Pemindai dapat memproses berkas log berisi 500.000+ baris dengan konsumsi memori stabil di bawah 15 MB RAM!
2. Format Log yang Didukung#
Pemindai mendukung format log web server standar industri:
- Nginx Standard Combined Log Format:
$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" - Apache Combined Log Format
- Mendukung berkas log terkompresi
.gzjika dikonfigurasikan.
3. Eksekusi via Artisan CLI (`pasax:scan-logs`)#
Anda dapat menjalankan pemindai sewaktu-waktu menggunakan perintah:
A. Pratinjau Temuan Tanpa Mengubah Database (Dry-Run)#
php artisan pasax:scan-logs --file=/var/log/nginx/access.log --dry-run
B. Memindai dan Mengimpor ke Tabel `pasax_logs`#
php artisan pasax:scan-logs --file=/var/log/nginx/access.log --import
C. Memindai, Mengimpor, dan Otomatis Memblokir IP Penyerang Zero-Tolerance#
php artisan pasax:scan-logs --file=/var/log/nginx/access.log --import --block
Setiap IP yang ditemukan mencoba melakukan serangan zero-tolerance (misal mengunggah webshell, probe .env, atau path traversal) akan langsung dimasukkan ke tabel blocked_ips dan ditolak oleh aplikasi.
D. Memfilter Aktivitas Berdasarkan Rentang Waktu atau IP Tertentu#
# Hanya memindai aktivitas dalam 2 hari terakhir
php artisan pasax:scan-logs --since="2 days ago"
# Memeriksa rekam jejak satu IP spesifik
php artisan pasax:scan-logs --ip=104.207.74.38 --samples
4. Otomasi Terjadwal Harian (Daily Scheduler)#
Anda dapat mengaktifkan pemindaian otomatis harian di latar belakang dengan menambahkan variabel berikut ke berkas .env:
PASAX_ACCESS_LOG_AUTO_SCAN=true
PASAX_ACCESS_LOG_AUTO_SCAN_HOURS=24
PASAX_ACCESS_LOG_PATHS=/var/log/nginx/access.log,/var/log/nginx/error.log
Ketika opsi ini aktif, PasaxServiceProvider akan secara otomatis menjadwalkan perintah:
php artisan pasax:scan-logs --import --min-level=high --since="24 hours ago"
dieksekusi setiap hari pada pukul 03:00 pagi.