Rabu, Juli 02, 2025

Konfigurasi Nginx untuk Melindungi WP Admin


Anda perlu menambahkan blok location berikut di dalam blok server pada file konfigurasi Nginx untuk domain Anda. File ini biasanya terletak di /etc/nginx/sites-available/nama-domain-anda.com.

Langkah-langkahnya:

  1. Cari Tahu IP Publik Anda: Buka Google dan cari "what is my ip". Google akan menampilkan alamat IP publik Anda saat ini. Anda memerlukan IP ini untuk ditambahkan ke dalam whitelist.

  2. Edit File Konfigurasi Nginx: Buka file konfigurasi Nginx Anda dengan editor teks seperti nano atau vim.

    Bash
    sudo nano /etc/nginx/sites-available/nama-domain-anda.com
    
  3. Tambahkan Kode Berikut: Salin dan tempel kode di bawah ini di dalam blok server { ... }, idealnya sebelum blok location / { ... }.

Nginx
# =====================================================================
# SECURITY: Blokir akses ke wp-login & wp-admin dari semua IP
# kecuali yang diizinkan (whitelist).
# =====================================================================
location ~ ^/(wp-admin|wp-login\.php) {

    # GANTI ALAMAT IP DI BAWAH INI DENGAN IP STATIS ANDA
    # Untuk mengizinkan lebih dari satu IP, tambahkan baris 'allow' baru.
    allow 111.222.333.444;      # <-- GANTI DENGAN IP PUBLIK ANDA
    # allow 123.123.123.123;      # <-- Contoh jika ada IP kedua yang diizinkan

    # Tolak semua alamat IP lainnya
    deny all;

    # Bagian di bawah ini penting agar IP yang diizinkan tetap bisa
    # memproses file PHP dengan benar.
    # PASTIKAN PATH SOCKET PHP-FPM SESUAI DENGAN SERVER ANDA
    #================================================================
    include snippets/fastcgi-php.conf;
    # Contoh untuk PHP 8.1:
    # fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    # Contoh untuk PHP 8.2:
    fastcgi_pass unix:/run/php/php8.2-fpm.sock; # <-- SESUAIKAN INI!
    #================================================================
}

Penjelasan Kode

  • location ~ ^/(wp-admin|wp-login\.php): Aturan ini menargetkan URL yang dimulai dengan /wp-admin atau sama persis dengan /wp-login.php.

    • ~: Menandakan pencocokan regular expression (regex) yang case-sensitive.

    • ^: Menandakan awal dari URI.

    • (...): Grup.

    • |: Berfungsi sebagai "ATAU".

    • \.: Tanda \ (backslash) digunakan untuk escape karakter titik (.), sehingga Nginx mencocokkan titik secara harfiah, bukan sebagai karakter wildcard.

  • allow 111.222.333.444;: Ini adalah whitelist. Nginx akan mengizinkan koneksi dari alamat IP ini. Anda wajib mengganti 111.222.333.444 dengan IP publik Anda.

  • deny all;: Ini adalah aturan utama. Jika sebuah koneksi tidak cocok dengan aturan allow di atasnya, koneksi tersebut akan ditolak. Nginx akan merespons dengan error 403 Forbidden.

  • include snippets/fastcgi-php.conf; dan fastcgi_pass ...;: Bagian ini sangat penting. Tanpa ini, bahkan IP yang diizinkan pun tidak akan bisa memuat halaman login karena permintaan tidak diteruskan ke PHP-FPM. Anda harus memastikan path fastcgi_pass sesuai dengan konfigurasi PHP-FPM di server Anda.

Langkah Terakhir: Validasi dan Reload Nginx

Setelah menyimpan perubahan pada file konfigurasi, jangan langsung me-restart Nginx. Lakukan validasi terlebih dahulu untuk memastikan tidak ada error sintaks.

  1. Test Konfigurasi Nginx:

    Bash
    sudo nginx -t
    

    Jika outputnya seperti ini, maka konfigurasi Anda sudah benar:

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    
  2. Reload Nginx untuk Menerapkan Perubahan:

    Bash
    sudo systemctl reload nginx
    

Sekarang, coba akses http://nama-domain-anda.com/wp-admin. Jika Anda mengakses dari IP yang diizinkan, halaman login akan muncul. Jika orang lain mencoba mengakses dari IP yang berbeda, mereka akan mendapatkan halaman error 403 Forbidden.


Penting: Bagaimana Jika IP Saya Dinamis?

Konfigurasi di atas paling efektif jika Anda memiliki alamat IP statis. Jika IP internet Anda sering berubah (dinamis), Anda akan terkunci dari situs Anda sendiri setiap kali IP Anda berubah.

Jika IP Anda dinamis, ada beberapa solusi:

  1. Update Manual (Kurang Praktis): Setiap kali IP Anda berubah, Anda harus masuk ke server dan mengubah IP di file konfigurasi Nginx.

  2. Gunakan Layanan Dynamic DNS (DDNS):

    • Gunakan layanan seperti No-IP atau Dynu untuk mendapatkan sebuah hostname yang akan selalu menunjuk ke IP dinamis Anda (misal: kantorsaya.ddns.net).

    • Dalam konfigurasi Nginx, ganti allow 111.222.333.444; dengan allow kantorsaya.ddns.net;.

    • Catatan: Opsi ini memerlukan konfigurasi resolver di Nginx agar dapat mengenali hostname tersebut.

  3. Gunakan VPN: Gunakan layanan VPN yang memberikan Anda IP statis khusus. Dengan begitu, Anda selalu terhubung melalui IP yang sama.

Tidak ada komentar: