Optimasi performa dan pengerasan (hardening) keamanan Apache HTTP Server membutuhkan kombinasi konfigurasi modul Multi-Processing Module (MPM) yang tepat, pembatasan akses direktori, manajemen koneksi KeepAlive, serta implementasi Web Application Firewall (WAF) seperti ModSecurity. Pendekatan ini memastikan server web mampu menangani lonjakan trafik tinggi sekaligus menutup celah eksploitasi umum.
Langkah awal dimulai dari pemilihan MPM yang sesuai dengan karakteristik aplikasi web. Apache menyediakan tiga pilihan MPM utama: Prefork, Worker, dan Event. Pemilihan arsitektur ini menentukan bagaimana server mengalokasikan proses dan utas (threads) untuk melayani permintaan HTTP.
1. Pemilihan dan Konfigurasi MPM (Multi-Processing Module)
Sebagian besar instalasi modern menggunakan mpm_event atau mpm_worker karena efisiensi memori yang jauh lebih baik dibandingkan mpm_prefork (yang menggunakan satu proses per koneksi). Khusus untuk lingkungan PHP modern yang berjalan di bawah PHP-FPM, mpm_event adalah standar emas.
| Parameter MPM Event | Nilai Rekomendasi (Traffic Sedang-Tinggi) | Fungsi Utama |
|---|---|---|
ServerLimit |
16 - 32 | Batas maksimum proses anak (child processes) yang diizinkan. |
StartServers |
3 - 5 | Jumlah proses anak yang dibuat saat server pertama kali dinyalakan. |
MinSpareThreads |
75 | Jumlah minimum utas siaga untuk melayani request mendadak. |
MaxSpareThreads |
250 | Batas maksimum utas siaga untuk mencegah pemborosan memori RAM. |
ThreadsPerChild |
64 - 128 | Jumlah utas yang ditangani oleh setiap proses anak. |
MaxRequestWorkers |
1000 - 2000 (Sesuai RAM) | Batas maksimum koneksi simultan yang dapat dilayani secara bersamaan. |
Contoh Blok Konfigurasi MPM Event
Sesuaikan blok berikut di dalam berkas konfigurasi Apache (biasanya terletak di /etc/apache2/mods-available/mpm_event.conf atau httpd.conf):
<IfModule mpm_event_module>
ServerLimit 16
StartServers 4
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 64
MaxRequestWorkers 1024
MaxConnectionsPerChild 10000
</IfModule>
2. Optimasi KeepAlive dan Timeouts
Koneksi KeepAlive memungkinkan penggunaan kembali koneksi TCP yang sama untuk beberapa permintaan HTTP. Namun, jika dibiarkan terlalu lama, KeepAlive dapat menyebabkan kehabisan slot pekerja (connection exhaustion) akibat serangan Slowloris.
Terapkan parameter berikut untuk menyeimbangkan performa dan keamanan:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 3
Timeout 30
LimitRequestBody 10485760
Pengaturan KeepAliveTimeout 3 memastikan koneksi yang menganggur segera ditutup setelah 3 detik, mencegah penumpukan koneksi oleh klien lambat.
3. Security Hardening: Menyembunyikan Informasi Server
Secara default, Apache memancarkan informasi versi perangkat lunak dan sistem operasi pada header HTTP Server dan halaman kesalahan (error pages). Hal ini memudahkan penyerang memetakan kerentanan.
Tambahkan atau ubah baris berikut di berkas konfigurasi utama (httpd.conf atau security.conf):
ServerTokens Prod
ServerSignature Off
TraceEnable Off
- ServerTokens Prod: Mengubah header respon hanya menjadi "Apache" tanpa detail versi atau modul OS.
- ServerSignature Off: Menghilangkan cetakan versi Apache di bagian bawah halaman error yang dihasilkan server.
- TraceEnable Off: Menonaktifkan metode HTTP TRACE untuk mencegah serangan Cross-Site Tracing (XST).
4. Proteksi Direktori dan Kontrol Akses
Mencegah akses publik ke berkas sensitif dan direktori tersembunyi seperti .git, .env, atau berkas konfigurasi sistem adalah kewajiban mutlak.
<DirectoryMatch "/\.">
Require all denied
</DirectoryMatch>
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
<Directory /var/www/html>
Options -Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Penggunaan Options -Indexes krusial untuk mencegah fitur direktori listing (directory browsing) yang mengekspos struktur berkas situs web kepada publik.
5. Implementasi ModSecurity dan OWASP Core Rule Set
Untuk pertahanan lapis kedua terhadap serangan injeksi SQL, Cross-Site Scripting (XSS), dan Local File Inclusion (LFI), pasang modul libapache2-mod-security2 bersama OWASP CRS.
- Instal modul melalui package manager sistem operasi (contoh pada Ubuntu/Debian):
sudo apt install libapache2-mod-security2 - Ubah mode deteksi menjadi blokir aktif pada berkas konfigurasi ModSecurity (
/etc/modsecurity/modsecurity.conf):SecRuleEngine On - Unduh dan pasang OWASP Core Rule Set (CRS) ke dalam direktori aturan modsecurity.
- Uji ulang konfigurasi Apache dengan perintah
sudo apachectl configtestsebelum melakukan restart layanan viasudo systemctl restart apache2.