Dokumen ini menjelaskan proses audit dan hardening NGINX pada server production yang menjalankan WordPress, PHP 8.3-FPM, mail server, dan DNS server dalam satu host.

Tujuan utama:

  • Mengurangi attack surface
  • Menyembunyikan informasi sensitif
  • Mencegah eksploitasi umum WordPress
  • Meningkatkan standar keamanan HTTP

1. Informasi Awal dari Hasil Scan Eksternal

Berdasarkan hasil pemindaian Nmap:

  • Web Server: NGINX
  • CMS: WordPress 6.9.1 (terdeteksi)
  • Port 80 aktif (redirect ke HTTPS)
  • Port 443 aktif dengan SSL valid

Temuan penting:

  • Versi WordPress terdeteksi
  • Informasi server kemungkinan masih terlihat
  • Endpoint standar WordPress terbuka

Hal ini menunjukkan bahwa server berjalan normal, tetapi belum sepenuhnya hardened.


2. Audit Konfigurasi NGINX

Untuk menampilkan seluruh konfigurasi NGINX:

sudo nginx -T

Lokasi konfigurasi utama biasanya berada di:

/etc/nginx/nginx.conf
/etc/nginx/sites-available/
/etc/nginx/sites-enabled/

Audit dilakukan pada file utama (nginx.conf) dan file virtual host domain.


3. Menyembunyikan Versi NGINX

Secara default, NGINX dapat menampilkan versi pada HTTP header.

Tambahkan konfigurasi berikut di dalam blok http {} pada nginx.conf:

server_tokens off;

Fungsi:

  • Menghilangkan informasi versi NGINX dari header HTTP.
  • Mengurangi risiko eksploitasi berbasis versi.

Setelah perubahan:

sudo nginx -t
sudo systemctl reload nginx

Verifikasi:

curl -I https://domainanda.com

4. Menambahkan Security Headers

Tambahkan konfigurasi berikut di dalam blok server {} pada virtual host:

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 Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Penjelasan:

  • X-Frame-Options
    Mencegah clickjacking.
  • X-Content-Type-Options
    Mencegah MIME sniffing.
  • X-XSS-Protection
    Perlindungan tambahan terhadap XSS pada browser lama.
  • Referrer-Policy
    Mengontrol informasi referer yang dikirim.
  • HSTS
    Memaksa browser menggunakan HTTPS selama periode tertentu.

5. Menonaktifkan Directory Listing

Pastikan direktif berikut ada di dalam blok server:

autoindex off;

Fungsi:

  • Mencegah listing direktori jika tidak terdapat file index.

6. Melindungi File Sensitif WordPress

Tambahkan konfigurasi berikut:

location ~* /wp-config.php {
    deny all;
}

location ~* \.(env|log|conf)$ {
    deny all;
}

Fungsi:

  • Mencegah akses langsung ke file konfigurasi.
  • Menghindari kebocoran kredensial database.

7. Membatasi Akses wp-login.php (Rate Limiting)

Tambahkan di dalam blok http {} pada nginx.conf:

limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/m;

Lalu di dalam blok server {}:

location = /wp-login.php {
    limit_req zone=login_limit burst=10 nodelay;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

Fungsi:

  • Membatasi maksimal 5 request per menit per IP.
  • Mengurangi risiko brute force attack.

8. Menonaktifkan XML-RPC (Jika Tidak Digunakan)

location = /xmlrpc.php {
    deny all;
}

Fungsi:

  • Mencegah brute force massal melalui XML-RPC.
  • Mengurangi permukaan serangan WordPress.

9. Mencegah Eksekusi PHP di Folder Upload

location ~* /wp-content/uploads/.*\.php$ {
    deny all;
}

Fungsi:

  • Mencegah eksekusi web shell yang diunggah melalui celah plugin atau media upload.

10. Konfigurasi Eksekusi PHP yang Aman

Pastikan blok PHP memiliki konfigurasi seperti berikut:

location ~ \.php$ {
    try_files $uri =404;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

Penjelasan:

  • try_files $uri =404
    Mencegah eksekusi file PHP yang tidak benar-benar ada.
    Mengurangi eksploitasi path traversal.

11. Mencegah Akses File Tersembunyi

location ~ /\. {
    deny all;
}

Fungsi:

  • Mencegah akses ke file seperti .git, .env, dan file tersembunyi lainnya.

12. Prosedur Verifikasi Setelah Hardening

Setiap perubahan konfigurasi harus diikuti dengan:

sudo nginx -t
sudo systemctl reload nginx

Kemudian lakukan pengujian:

  • Cek header HTTP
  • Coba akses /xmlrpc.php
  • Coba akses /wp-config.php
  • Coba akses file PHP palsu

13. Prinsip Keamanan yang Digunakan

Hardening ini mengikuti prinsip:

  1. Least Information Exposure
    Jangan tampilkan informasi yang tidak diperlukan.
  2. Least Privilege
    Batasi akses hanya pada yang diperlukan.
  3. Surface Reduction
    Tutup endpoint yang tidak digunakan.
  4. Input Limitation
    Batasi jumlah request untuk mencegah brute force.

14. Metode Belajar dan Mengingat Konfigurasi

Agar konfigurasi ini benar-benar dipahami dan bukan sekadar disalin:

Gunakan metode berikut:

  1. Pahami Ancaman → Konfigurasi → Dampak
    Setiap baris konfigurasi harus bisa dijelaskan:
    • Apa yang dilindungi?
    • Dari serangan apa?
    • Bagaimana mekanismenya?
  2. Praktik Tanpa Melihat Catatan
    Coba tulis ulang konfigurasi dari ingatan.
  3. Audit Berkala
    Jalankan nginx -T setiap minggu dan evaluasi ulang.
  4. Gunakan Server Lab
    Jangan melakukan eksperimen langsung di production.

Kesimpulan

Server yang menjalankan WordPress di atas NGINX memerlukan hardening tambahan untuk mengurangi risiko eksploitasi. Konfigurasi di atas:

  • Menyembunyikan informasi sensitif
  • Mengurangi permukaan serangan
  • Membatasi brute force
  • Mencegah kebocoran file konfigurasi
  • Mengamankan eksekusi PHP

By Admin

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *