Best Practice Keamanan Apache: Konfigurasi & Server Hardening

Mengamankan Apache HTTP Server (httpd) membutuhkan pendekatan berlapis, mulai dari pengerasan konfigurasi default, manajemen modul, pembatasan hak akses sistem berkas (file system), hingga enkripsi lalu lintas jaringan. Server web yang dibiarkan dalam pengaturan bawaan (default) sangat rentan terhadap serangan enumerasi direktori, eksploitasi modul usang, dan serangan penolakan layanan (DoS).

Langkah fundamental pertama dalam hardening Apache adalah menyembunyikan informasi versi server dan sistem operasi agar tidak mudah dibaca oleh pemindai kerentanan (vulnerability scanner) otomatis. Selain itu, manajemen direktori root, pengetatan direktif <Directory>, serta penerapan protokol HTTPS yang ketat merupakan standar mutlak di lingkungan produksi.

Parameter Utama Hardening Apache

Pengaturan pada berkas konfigurasi utama (biasanya terletak di /etc/apache2/apache2.conf atau /etc/httpd/conf/httpd.conf) menentukan tingkat ketahanan server terhadap serangan luar. Tabel di bawah merangkum parameter penting beserta fungsi keamanannya:

Direktif Konfigurasi Nilai Rekomendasi Fungsi Keamanan
ServerTokens Prod Menyembunyikan informasi detail versi Apache dan modul pada header HTTP.
ServerSignature Off Menghilangkan footer informasi server pada halaman error yang dihasilkan Apache.
TraceEnable Off Mencegah serangan Cross-Site Tracing (XST) melalui metode HTTP TRACE.
Options pada Root None (atau -Indexes) Melarang penelusuran direktori (directory listing) jika berkas index tidak ditemukan.
FileETag None Menghilangkan informasi inode pada header ETag untuk mencegah kebocoran informasi server.

Langkah Teknis Konfigurasi Keamanan

1. Menonaktifkan Directory Indexing

Secara default, jika sebuah direktori web tidak memiliki berkas index.html atau index.php, Apache akan menampilkan seluruh daftar berkas di dalam direktori tersebut. Hal ini membahayakan karena berpotensi mengekspos berkas sensitif. Ubah blok konfigurasi direktori root menjadi:

<Directory /var/www/html>
    Options -Indexes +FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

2. Membatasi Akses Berdasarkan Metode HTTP (HTTP Request Methods)

Batasi metode HTTP yang diizinkan hanya pada metode yang benar-benar digunakan oleh aplikasi web (umumnya GET, POST, dan HEAD). Letakkan konfigurasi ini di dalam berkas virtual host:

<LimitExcept GET POST HEAD>
    Deny from all
</LimitExcept>

3. Menerapkan Pembatasan Ukuran Permintaan (Buffer Overflow Mitigation)

Apache rentan terhadap serangan DoS melalui pengiriman permintaan berukuran masif. Batasi ukuran maksimum badan permintaan (request body) menggunakan modul mod_security atau direktif bawaan untuk mencegah konsumsi memori berlebih:

LimitRequestBody 10485760
LimitRequestFields 100
LimitRequestFieldSize 8192
LimitRequestLine 8192

Manajemen Hak Akses Pengguna Sistem

Jangan pernah menjalankan proses Apache menggunakan akun pengguna yang memiliki hak istimewa (root). Pastikan daemon Apache berjalan di bawah akun pengguna khusus yang tidak memiliki akses shell, seperti www-data, apache, atau nobody.

Periksa berkas konfigurasi lingkungan (misalnya /etc/apache2/envvars) dan pastikan parameter berikut aktif:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Pengamanan Transport Layer Security (TLS/HTTPS)

Enkripsi lalu lintas menggunakan SSL/TLS wajib diterapkan. Hindari penggunaan protokol usang seperti SSLv3, TLS 1.0, dan TLS 1.1. Gunakan hanya TLS 1.2 dan TLS 1.3 dengan kombinasi cipher suite yang kuat.

SSLEngine on
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5:!SEED:!IDEA
SSLHonorCipherOrder on

Troubleshooting dan Validasi Keamanan

Setelah melakukan perubahan konfigurasi, selalu lakukan pengujian sintaks sebelum me-restart layanan Apache untuk menghindari kegagalan sistem (downtime):

sudo apachectl configtest

Jika hasil pengujian mencetak pesan Syntax OK, lanjutkan dengan memuat ulang layanan:

sudo systemctl restart apache2

Gunakan alat pemindai pihak ketiga seperti SSL Labs (untuk sertifikat TLS) atau Nikto (untuk pemindaian kerentanan web server secara umum) guna memverifikasi efektivitas konfigurasi keamanan yang telah diterapkan.