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 ProdServerSignature 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 -tlalusudo systemctl restart nginx. - Untuk Apache: Jalankan perintah
sudo apachectl configtestlalusudo systemctl restart apache2(atauhttpd).
Gunakan alat pemindai eksternal seperti SSL Labs Server Test untuk memvalidasi kekuatan konfigurasi SSL/TLS pada domain Anda.