Hardening Server Web Apache & Nginx: Panduan Konfigurasi Keamanan

Hardening server web Apache dan Nginx adalah proses penguatan konfigurasi keamanan sistem untuk meminimalkan celah kerentanan yang dapat dieksploitasi oleh pihak tidak bertanggung jawab. Proses ini mencakup penyembunyian informasi server, penonaktifan modul yang tidak perlu, penerapan protokol HTTPS yang ketat, serta pembatasan akses direktori dan metode HTTP.

Baik menggunakan Apache HTTP Server maupun Nginx, pengamanan tingkat lanjut pada file konfigurasi utama merupakan pertahanan lini pertama sebelum mengandalkan sistem pencegah intrusi eksternal. Berikut adalah tabel perbandingan parameter utama pengerasan keamanan antara Apache dan Nginx.

Parameter Keamanan Apache HTTP Server Nginx
Sembunyikan Versi Server ServerTokens Prod
ServerSignature Off
server_tokens off;
Blokir Metode HTTP Tertentu Menggunakan modul mod_rewrite atau Pemeriksaan kondisi if ($request_method !~ ^(GET|HEAD|POST)$ )
Konfigurasi SSL/TLS SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 ssl_protocols TLSv1.2 TLSv1.3;
Perlindungan Clickjacking Header always append X-Frame-Options SAMEORIGIN add_header X-Frame-Options "SAMEORIGIN" always;

Hardening Server Nginx

Nginx dikenal dengan performa tinggi dan penggunaan memori yang rendah. Untuk mengamankan Nginx, Anda perlu menyunting file konfigurasi utama yang biasanya terletak di /etc/nginx/nginx.conf atau di dalam blok server virtual Anda.

1. Menyembunyikan Informasi Versi Nginx

Secara default, Nginx menampilkan nomor versi pada halaman error dan header HTTP Server. Penyerang dapat memanfaatkan informasi ini untuk mencari celah spesifik pada versi tersebut. Tambahkan baris berikut di dalam blok http { }:

http {
    server_tokens off;
    # Konfigurasi lainnya...
}

2. Konfigurasi SSL/TLS dan Cipher Suites yang Kuat

Nonaktifkan protokol lama yang rentan seperti SSLv2, SSLv3, TLSv1, dan TLSv1.1. Gunakan hanya TLSv1.2 dan TLSv1.3 beserta cipher yang aman di dalam blok server { }:

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
}

3. Menambahkan Header Keamanan HTTP

Header keamanan tambahan membantu melindungi pengguna dari serangan seperti Cross-Site Scripting (XSS) dan Clickjacking. Tambahkan konfigurasi ini di dalam blok server:

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Content-Security-Policy "default-src 'self'" always;

Hardening Server Apache

Apache memiliki fleksibilitas tinggi berkat sistem modulnya. File konfigurasi utama umumnya berada di /etc/apache2/apache2.conf atau /etc/httpd/conf/httpd.conf.

1. Menyembunyikan Tanda Tangan dan Versi Apache

Untuk mencegah Apache menampilkan informasi sistem operasi dan versi pada halaman error, tambahkan atau ubah direktif berikut:

ServerTokens Prod
ServerSignature Off

2. Mencegah Directory Listing

Jika direktori web tidak memiliki file indeks (seperti index.html atau index.php), secara default Apache akan menampilkan seluruh daftar file di dalam direktori tersebut. Matikan fitur ini melalui blok konfigurasi direktori:

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

3. Membatasi Metode HTTP yang Diizinkan

Batasi metode HTTP yang dapat digunakan oleh klien, misalnya hanya mengizinkan GET, POST, dan HEAD, serta menolak metode seperti TRACE atau DELETE jika tidak diperlukan:

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

Troubleshooting dan Validasi Keamanan

Setelah menerapkan konfigurasi hardening, pastikan untuk selalu menguji sintaks sebelum me-restart layanan server web guna menghindari downtime:

  • Untuk Nginx: Jalankan perintah sudo nginx -t lalu sudo systemctl restart nginx.
  • Untuk Apache: Jalankan perintah sudo apachectl configtest lalu sudo systemctl restart apache2 (atau httpd).

Gunakan alat pemindai eksternal seperti SSL Labs Server Test untuk memvalidasi kekuatan konfigurasi SSL/TLS pada domain Anda.