Konfigurasi Lengkap & Environment Variable
Seluruh perilaku robyajo/laravel-security-monitor dikontrol melalui berkas konfigurasi config/security.php. Konfigurasi ini dirancang agar dapat disesuaikan tanpa perlu mengubah kode sumber paket, cukup melalui berkas .env.
1. Daftar Variabel Lingkungan (.env)
Bagian berjudul β1. Daftar Variabel Lingkungan (.env)βBerikut adalah daftar lengkap seluruh variabel lingkungan yang didukung:
Variabel .env |
Tipe | Nilai Bawaan | Keterangan & Dampak |
|---|---|---|---|
SECURITY_MONITOR_ENABLED |
bool | true |
Sakelar utama untuk pemindaian ancaman di middleware. Jika false, inspeksi ditiadakan. |
SECURITY_BLOCK_ENFORCEMENT |
bool | true |
Penegakan blokir aktif. Jika false, IP terblokir tetap dicatat tetapi request tidak ditolak. |
SECURITY_BLOCKED_LOG_INTERVAL |
int | 10 |
Jeda waktu (detik) pencatatan log untuk IP yang terus-menerus mencoba mengakses saat terblokir. |
SECURITY_AUTO_BLOCK_ENABLED |
bool | true |
Mengaktifkan pemblokiran otomatis berbasis akumulasi skor ancaman berulang. |
SECURITY_AUTO_BLOCK_THRESHOLD |
int | 3 |
Jumlah kejadian ancaman yang harus dicapai dalam kurun waktu sebelum IP diblokir. |
SECURITY_AUTO_BLOCK_WINDOW |
int | 10 |
Rentang jendela waktu evaluasi auto-block (dalam menit). |
SECURITY_AUTO_BLOCK_DURATION |
int | 24 |
Durasi pemblokiran otomatis (dalam jam). Masukkan 0 jika ingin memblokir permanen. |
SECURITY_INSTANT_BLOCK_ENABLED |
bool | true |
Mengaktifkan blokir langsung pada percobaan pertama untuk signature berbahaya zero-tolerance. |
SECURITY_INSTANT_BLOCK_DURATION |
int | 720 |
Durasi blokir instan (dalam jam; bawaan: 720 jam = 30 hari). Masukkan 0 untuk permanen. |
SECURITY_MAX_INSPECT_LENGTH |
int | 4000 |
Batas maksimum panjang karakter string payload yang diinspeksi untuk mencegah ReDoS pada payload raksasa. |
SECURITY_BLOCK_SUSPICIOUS |
bool | false |
Tolak langsung (HTTP 403) request yang memicu ancaman berlevel critical tanpa menunggu akumulasi. |
SECURITY_LOG_RETENTION_DAYS |
int | 90 |
Masa simpan riwayat log keamanan (hari) sebelum dibersihkan otomatis oleh cron scheduler. |
SECURITY_ACCESS_LOG_PATHS |
string | null |
Jalur absolut ke berkas access log web server Nginx/Apache (dipisahkan koma). |
SECURITY_ACCESS_LOG_MAX_LINES |
int | 500000 |
Batas maksimum baris log yang dianalisis dalam satu kali eksekusi streaming scanner. |
SECURITY_ACCESS_LOG_AUTO_SCAN |
bool | false |
Mengaktifkan tugas cron harian otomatis untuk memindai berkas log web server. |
SECURITY_ACCESS_LOG_AUTO_SCAN_HOURS |
int | 24 |
Rentang waktu mundur (jam) yang dipindai oleh pemindai otomatis terjadwal. |
SECURITY_LOGIN_LOCKOUT_ENABLED |
bool | true |
Mengaktifkan penguncian bertingkat (stepped login lockout) terhadap brute force. |
SECURITY_LOGIN_LOCKOUT_THRESHOLD |
int | 3 |
Jumlah kegagalan otentikasi berturut-turut sebelum akun/IP dikunci sementara. |
SECURITY_LOGIN_LOCKOUT_BASE_MINUTES |
int | 1 |
Durasi awal penguncian pada tier pertama (menit). |
SECURITY_LOGIN_LOCKOUT_MAX_MINUTES |
int | 30 |
Batas maksimum durasi penguncian berjenjang (menit). |
SECURITY_LOGIN_LOCKOUT_DECAY_MINUTES |
int | 60 |
Waktu tanpa percobaan gagal (menit) sebelum penghitung kegagalan direset ke nol. |
SECURITY_SERVER_SCAN_CACHE_MINUTES |
int | 10 |
Durasi cache hasil pemindaian integritas dan berkas server (menit). |
SECURITY_SERVER_SCAN_MAX_FILES |
int | 20000 |
Batas maksimum berkas yang diperiksa saat audit baseline integritas. |
SECURITY_RECENT_CHANGES_DAYS |
int | 7 |
Rentang hari berkas baru/dimodifikasi yang dimasukkan ke laporan audit server. |
SECURITY_DISK_WARNING_PERCENT |
int | 20 |
Ambang batas sisa kapasitas disk (%) untuk memicu peringatan (warning). |
SECURITY_DISK_CRITICAL_PERCENT |
int | 10 |
Ambang batas sisa kapasitas disk (%) untuk memicu status genting (critical). |
SECURITY_MAX_ADMIN_ACCOUNTS |
int | 5 |
Jumlah maksimum akun administrator yang wajar sebelum auditor memunculkan peringatan. |
SECURITY_LOG_SIZE_WARNING_MB |
int | 100 |
Peringatan audit jika berkas storage/logs/laravel.log melebihi ukuran ini (MB). |
SECURITY_USER_MODEL |
string | App\Models\User |
FQCN kelas Model Pengguna otentikasi di aplikasi host Anda. |
SECURITY_USERS_TABLE |
string | users |
Nama tabel database untuk data pengguna. |
SECURITY_BLOCKED_IPS_TABLE |
string | blocked_ips |
Nama tabel untuk karantina IP dan perangkat. |
SECURITY_LOGS_TABLE |
string | security_logs |
Nama tabel untuk riwayat audit log keamanan. |
SECURITY_LOGIN_ATTEMPTS_TABLE |
string | login_attempts |
Nama tabel untuk penghitung kegagalan login. |
SECURITY_IP_UNBLOCK_REQUESTS_TABLE |
string | ip_unblock_requests |
Nama tabel untuk permohonan tiket banding buka blokir. |
SECURITY_USER_LOGINS_TABLE |
string | user_logins |
Nama tabel untuk sesi dan riwayat login pengguna. |
SECURITY_TRUSTED_IPS_TABLE |
string | trusted_ips |
Nama tabel untuk daftar IP terpercaya milik pengguna. |
SECURITY_ROUTES_ENABLED |
bool | true |
Mengaktifkan rute headless REST API di bawah /api/security/*. |
SECURITY_ROUTES_PREFIX |
string | api/security |
Awalan prefix URI untuk seluruh rute API paket. |
SECURITY_SCHEDULE_ENABLED |
bool | true |
Mengaktifkan registrasi jadwal tugas cron otomatis (prune & heartbeat). |
SECURITY_PRUNE_SCHEDULE |
string | 02:30 |
Jam eksekusi harian pembersihan log usang (format HH:mm). |
SECURITY_SUPPORT_EMAIL |
string | security@example.com |
Alamat email dukungan yang ditampilkan pada layar respon blokir. |
SECURITY_AUTO_REGISTER_MIDDLEWARE |
bool | false |
Mendaftarkan middleware global secara otomatis saat boot aplikasi. |
2. Struktur Konfigurasi Inti (config/security.php)
Bagian berjudul β2. Struktur Konfigurasi Inti (config/security.php)βA. Whitelist Jaringan & IP Lokal
Bagian berjudul βA. Whitelist Jaringan & IP LokalβKonfigurasi whitelist memastikan IP internal, proxy terpercaya, dan subnet kantor tidak pernah diblokir meskipun melakukan pengujian pentest:
'whitelist' => array_values(array_filter(array_map( 'trim', explode(',', (string) env('SECURITY_WHITELIST', '127.0.0.1,::1'))))),B. Signature Zero-Tolerance (instant_block)
Bagian berjudul βB. Signature Zero-Tolerance (instant_block)βMenentukan pola serangan mutlak yang langsung memblokir pelaku pada request pertama:
'instant_block' => [ 'enabled' => (bool) env('SECURITY_INSTANT_BLOCK_ENABLED', true), 'duration_hours' => (int) env('SECURITY_INSTANT_BLOCK_DURATION', 720), // 30 hari 'skip_whitelisted' => true, 'signatures' => [ [ 'id' => 'webshell_upload', 'label' => 'Percobaan upload webshell (null byte / double extension)', 'target' => 'any', 'patterns' => [ '/\.php(?:[\x00\0]|%00)\.[a-z0-9_-]+/i', '/\.php\.(?:jpe?g|png|gif|webp|svg|bmp|ico|pdf|zip|rar|tar|gz|7z|docx?|xlsx?)/i', ], ], // ... signatures lainnya ],],C. Pola Aturan WAF Reguler (rules)
Bagian berjudul βC. Pola Aturan WAF Reguler (rules)βPola aturan untuk SQLi, XSS, Path Traversal, Command Injection, dan SSRF yang diakumulasikan ke dalam penilaian ancaman bersyarat:
'rules' => [ [ 'id' => 'sql_injection', 'label' => 'Indikasi SQL Injection', 'level' => 'critical', 'patterns' => [ '/\bunion\s+(?:all\s+)?select\b/i', '/\bselect\b.+\bfrom\b.+\bwhere\b/is', // ... ], ], // ...],3. Preset Konfigurasi Lingkungan
Bagian berjudul β3. Preset Konfigurasi Lingkunganβπ Preset Pengembangan Lokal (.env.local)
Bagian berjudul βπ Preset Pengembangan Lokal (.env.local)βPada lingkungan development lokal, Anda dapat melonggarkan blokir agar tidak mengganggu proses pengujian dan debugging:
SECURITY_MONITOR_ENABLED=trueSECURITY_BLOCK_ENFORCEMENT=falseSECURITY_AUTO_BLOCK_ENABLED=falseSECURITY_INSTANT_BLOCK_ENABLED=falseSECURITY_BLOCK_SUSPICIOUS=falseSECURITY_WHITELIST=127.0.0.1,::1,192.168.*.*π Preset Produksi (.env.production)
Bagian berjudul βπ Preset Produksi (.env.production)βDi server produksi, seluruh perlindungan diaktifkan penuh dengan pembersihan log berkala dan toleransi ketat:
SECURITY_MONITOR_ENABLED=trueSECURITY_BLOCK_ENFORCEMENT=trueSECURITY_AUTO_BLOCK_ENABLED=trueSECURITY_AUTO_BLOCK_THRESHOLD=3SECURITY_AUTO_BLOCK_WINDOW=10SECURITY_AUTO_BLOCK_DURATION=24SECURITY_INSTANT_BLOCK_ENABLED=trueSECURITY_INSTANT_BLOCK_DURATION=720SECURITY_BLOCK_SUSPICIOUS=falseSECURITY_LOG_RETENTION_DAYS=90SECURITY_ACCESS_LOG_AUTO_SCAN=trueSECURITY_ACCESS_LOG_PATHS=/var/log/nginx/access.logSECURITY_LOGIN_LOCKOUT_ENABLED=trueSECURITY_SCHEDULE_ENABLED=trueSECURITY_SUPPORT_EMAIL=security@domain-anda.com