Apache Performance and Security Tuning: Panduan Server

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.

  1. Instal modul melalui package manager sistem operasi (contoh pada Ubuntu/Debian): sudo apt install libapache2-mod-security2
  2. Ubah mode deteksi menjadi blokir aktif pada berkas konfigurasi ModSecurity (/etc/modsecurity/modsecurity.conf):
    SecRuleEngine On
  3. Unduh dan pasang OWASP Core Rule Set (CRS) ke dalam direktori aturan modsecurity.
  4. Uji ulang konfigurasi Apache dengan perintah sudo apachectl configtest sebelum melakukan restart layanan via sudo systemctl restart apache2.