VPS yang tidak dilindungi firewall menjadi sasaran empuk bagi bot otomatis yang secara konsisten memindai port terbuka dan mencoba login dengan ribuan kombinasi password. Menurut laporan Sophos, server yang tidak terlindungi rata-rata diserang dalam hitungan menit setelah terhubung ke internet.
Dua tool gratis yang bisa langsung Anda pasang untuk mengatasi hal ini adalah UFW (firewall) dan Fail2Ban (anti brute force). Tutorial ini membahas cara amankan VPS dengan setup lengkap kedua tool tersebut untuk melindungi dari serangan paling umum.
Apa Itu UFW dan Fail2Ban?
Sebelum mempraktikkan cara amankan VPS, penting untuk memahami apa yang dilakukan masing-masing tool. Kedua tool ini memiliki fungsi berbeda namun saling melengkapi.
- UFW (Uncomplicated Firewall): Merupakan frontend dari iptables yang menyederhanakan pengelolaan aturan firewall di Linux. Dengan UFW, Anda bisa mengizinkan atau memblokir port tertentu tanpa perlu menulis aturan iptables yang kompleks.
- Fail2Ban: Merupakan tool intrusion prevention yang memantau file log server. Jika Fail2Ban mendeteksi pola percobaan login yang mencurigakan (misalnya 5 kali gagal dalam 10 menit), tool ini otomatis memblokir IP penyerang melalui firewall.
UFW bertugas sebagai pintu gerbang yang mengatur port mana yang boleh diakses. Fail2Ban bertugas sebagai penjaga yang memantau perilaku mencurigakan dan mengunci pintu untuk IP tertentu.
Keduanya bekerja bersamaan memberikan perlindungan berlapis. UFW menutup akses ke port yang tidak diperlukan, sementara Fail2Ban secara aktif memblokir IP yang menunjukkan pola serangan.
Baca juga: Cara Setup VPS untuk WordPress yang Benar, Anti Gagal untuk Pemula
Syarat Sebelum Memulai
Tutorial ini mengasumsikan VPS Anda sudah memiliki akses root melalui SSH dan web server sudah berjalan. Pastikan kedua syarat ini terpenuhi sebelum melanjutkan.
- Akses root SSH ke VPS: Anda membutuhkan akses root untuk menginstal paket dan mengkonfigurasi firewall. Pastikan Anda bisa login via SSH sebelum memulai.
- Web server sudah berjalan: VPS Anda sudah memiliki Nginx, PHP-FPM, dan MySQL yang aktif. Firewall akan dikonfigurasi tanpa mengganggu service yang sudah berjalan.
- Port SSH tidak default (opsional tapi direkomendasikan): Jika port SSH Anda masih 22, pertimbangkan untuk menggantinya ke port lain. Tutorial ini akan menjelaskan cara mengizinkan port SSH kustom di UFW.
Jika Anda belum memiliki VPS yang siap digunakan, provider seperti Nevacloud dan Warnahost menyediakan VPS dengan akses root penuh yang bisa langsung dikonfigurasi.

Rekonedasi:
| Provider | Klaim |
|---|---|
| WarnaHost | Daftar sini |
| NevaCloud | Daftar sini |
Setup Firewall UFW untuk VPS
Firewall adalah lapisan pertahanan pertama yang menghadapi setiap koneksi masuk ke VPS Anda. Dengan mengonfigurasi UFW, Anda menutup semua port yang tidak diperlukan sebagai langkah awal cara amankan VPS.
Langkah 1: Instalasi UFW
UFW biasanya sudah terinstal secara default di Ubuntu 24.04 LTS. Namun, jika belum tersedia, Anda bisa menginstalnya dengan perintah berikut.
sudo apt update
sudo apt install ufw -y
Setelah instalasi selesai, periksa status UFW untuk memastikan tool ini aktif.
sudo ufw status
Jika output menunjukkan Status: inactive, berarti firewall belum diaktifkan. Ini normal karena kita akan mengkonfigurasi aturan terlebih dahulu sebelum mengaktifkannya.
Langkah 2: Izinkan SSH, HTTP, dan HTTPS
Langkah paling kritis dalam konfigurasi firewall adalah mengizinkan port SSH terlebih dahulu. Jika Anda mengaktifkan firewall tanpa membuka port SSH, Anda akan terkunci dari server Anda sendiri.
Jalankan perintah berikut secara berurutan untuk membuka port yang dibutuhkan.
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
Jika Anda menggunakan port SSH kustom (misalnya port 2222), ganti perintah allow ssh dengan perintah berikut.
sudo ufw allow 2222/tcp
Anda juga bisa membatasi koneksi SSH hanya dari IP tertentu untuk keamanan lebih tinggi. Namun, pastikan IP Anda tidak berubah-ubah (gunakan static IP) sebelum menerapkan aturan ini.
Langkah 3: Tutup Semua Port Lainnya
Secara default, UFW mengizinkan semua koneksi keluar dan menolak semua koneksi masuk yang tidak diizinkan. Anda tidak perlu secara manual memblokir port lain karena perilaku default ini sudah aman.
Namun, ada beberapa port tambahan yang mungkin perlu dibuka tergantung konfigurasi VPS Anda. Jika menggunakan FTP, tambahkan port 21, sedangkan jika VPS mengirim email, buka port 25 (SMTP).
# Contoh: buka port tambahan jika diperlukan
# sudo ufw allow 21/tcp
# sudo ufw allow 25/tcp
Hindari membuka port yang tidak Anda pahami fungsinya. Setiap port yang terbuka adalah potensi celah keamanan, jadi prinsip dasarnya adalah hanya membuka yang benar-benar diperlukan.
Namun, ada baiknya untuk memverifikasi aturan yang sudah dibuat. Jalankan perintah status verbose untuk melihat daftar lengkap aturan firewall.
sudo ufw status verbose
Output akan menampilkan daftar port yang diizinkan (SSH, HTTP, HTTPS) dan kebijakan default. Pastikan Default: deny (incoming) sudah tercantum, yang berarti semua koneksi masuk yang tidak diizinkan akan ditolak.
Langkah 4: Aktifkan dan Verifikasi UFW
Setelah semua aturan dikonfigurasi, aktifkan firewall dengan perintah berikut.
sudo ufw enable
Sistem akan memperingatkan bahwa aktivasi firewall mungkin memutus koneksi SSH yang aktif. Ketik y dan tekan Enter untuk melanjutkan, karena port SSH sudah diizinkan di langkah sebelumnya.
Setelah aktif, cek kembali status untuk memastikan firewall berjalan dengan benar.
sudo ufw status numbered
Perintah ini akan menampilkan aturan firewall dalam format bernomor, sehingga Anda bisa dengan mudah menghapus atau menyisipkan aturan tertentu di kemudian hari jika diperlukan.
Setup Fail2Ban untuk Proteksi Brute Force
Jika firewall UFW adalah pintu gerbang, maka Fail2Ban adalah penjaga yang memantau siapa yang mencoba masuk secara paksa. Tool ini secara otomatis memblokir IP yang menunjukkan perilaku mencurigakan.
Langkah 1: Instalasi Fail2Ban
Fail2Ban tersedia di repository resmi Ubuntu dan bisa diinstal dengan satu perintah.
sudo apt install fail2ban -y
Setelah instalasi selesai, Fail2Ban tidak secara otomatis aktif. Anda perlu membuat file konfigurasi lokal sebelum mengaktifkannya.
Jangan edit file konfigurasi bawaan (jail.conf) karena akan tertimpa saat update. Buat file konfigurasi lokal yang akan menjadi prioritas.
Langkah 2: Konfigurasi Jail untuk SSH
Jail adalah aturan yang menentukan file log mana yang dipantau dan berapa percobaan gagal sebelum IP diblokir. Buat file konfigurasi lokal untuk mengaktifkan proteksi SSH.
sudo nano /etc/fail2ban/jail.local
Tambahkan konfigurasi berikut ke dalam file tersebut.
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 3
Konfigurasi di atas berarti: IP diblokir selama 1 jam (bantime) jika terdeteksi 3 kali percobaan login gagal (maxretry) dalam rentang 10 menit (findtime). Angka ini bisa Anda sesuaikan dengan kebutuhan.
Langkah 3: Buat Filter Khusus untuk wp-login.php
Selain SSH, halaman login aplikasi web juga menjadi target utama serangan brute force. Sebagai contoh, jika VPS Anda menjalankan WordPress, halaman wp-login.php akan menjadi sasaran bot. Fail2Ban bisa dikonfigurasi untuk memantau log Nginx dan memblokir IP yang berulang kali gagal login.
Buat file filter baru untuk mendeteksi percobaan login yang gagal pada halaman wp-login.php.
sudo nano /etc/fail2ban/filter.d/wordpress.conf
Isi file dengan regex yang mencocokkan pola HTTP 200 pada POST request ke wp-login.php. Pola ini mengidentifikasi percobaan login yang berhasil maupun gagal berdasarkan kode respons HTTP.
[Definition]
failregex = ^<HOST> .* "POST /wp-login.php
ignoreregex =
Selanjutnya, tambahkan jail untuk wp-login.php di file konfigurasi Fail2Ban yang sudah dibuat sebelumnya.
Buka kembali file /etc/fail2ban/jail.local dan tambahkan blok berikut di akhir file.
[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 300
bantime = 7200
Konfigurasi jail wp-login.php ini lebih longgar dibanding SSH, yaitu 5 kali percobaan dalam 5 menit dengan blokir selama 2 jam. Hal ini wajar karena pengguna yang lupa password tidak langsung diblokir pada percobaan pertama.
Langkah 4: Aktifkan dan Cek Status Fail2Ban
Setelah semua konfigurasi selesai, restart dan aktifkan Fail2Ban.
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
sudo fail2ban-client status
Perintah terakhir akan menampilkan daftar jail yang aktif. Pastikan sshd dan wordpress muncul dalam daftar tersebut.
Untuk melihat detail IP yang sudah diblokir oleh jail tertentu, gunakan perintah berikut.
sudo fail2ban-client status sshd
sudo fail2ban-client status wordpress
Langkah 5: Cara Unban IP yang Terblokir Salah
Terkadang, IP Anda sendiri atau IP pengunjung yang sah bisa terblokir karena terlalu sering mencoba login. Fail2Ban menyediakan perintah untuk melepas blokir tersebut.
Untuk membuka blokir IP dari jail tertentu, gunakan perintah berikut.
sudo fail2ban-client set sshd unbanip IP_YANG_DIBLOKIR
sudo fail2ban-client set wordpress unbanip IP_YANG_DIBLOKIR
Ganti IP_YANG_DIBLOKIR dengan alamat IP yang ingin dilepaskan. Setelah perintah dijalankan, IP tersebut bisa langsung mengakses server kembali tanpa menunggu masa bantime habis.
Baca juga: Migrasi WordPress ke VPS? Ikuti Cara Mudah Tanpa Downtime
Keamanan Tambahan untuk wp-admin
Selain UFW dan Fail2Ban, ada beberapa langkah tambahan yang bisa memperkuat keamanan VPS. Berikut contoh yang spesifik untuk VPS yang menjalankan WordPress, namun konsepnya bisa diterapkan ke aplikasi web lainnya.
Batasi akses wp-admin berdasarkan IP: Jika Anda memiliki IP statis, tambahkan aturan di Nginx yang hanya mengizinkan IP Anda mengakses /wp-admin/ dan /wp-login.php. Ini memblokir semua orang kecuali Anda dari halaman login.
location ~ ^/(wp-admin|wp-login\.php) {
allow 1.2.3.4;
deny all;
}
Ganti 1.2.3.4 dengan alamat IP statis Anda. Jangan gunakan aturan ini jika IP Anda berubah-ubah (dynamic IP) karena Anda sendiri akan terkunci.
Nonaktifkan file editor di wp-config.php: WordPress memiliki fitur editor tema dan plugin langsung dari dashboard. Fitur ini berbahaya jika hacker berhasil masuk ke wp-admin karena mereka bisa menyisipkan kode berbahaya melalui editor ini.
define('DISALLOW_FILE_EDIT', true);
Tambahkan baris di atas ke file wp-config.php Anda. Setelah itu, menu Editor Tema dan Editor Plugin akan hilang dari dashboard WordPress.
Verifikasi Semua Pengaturan Keamanan
Setelah seluruh konfigurasi selesai, lakukan verifikasi menyeluruh untuk memastikan semua pengaturan keamanan berfungsi dengan benar. Verifikasi ini penting untuk mengidentifikasi kesalahan konfigurasi sebelum menjadi celah keamanan.
Pertama, cek status UFW dan pastikan aturan firewall sudah benar.
sudo ufw status verbose
Kedua, cek status Fail2Ban dan pastikan semua jail aktif.
sudo fail2ban-client status
sudo systemctl status fail2ban
Ketiga, lakukan uji coba brute force sederhana. Coba login ke wp-admin dengan password yang salah sebanyak 6 kali dari perangkat lain, lalu cek apakah IP perangkat tersebut muncul di daftar banned.
sudo fail2ban-client status wordpress
Jika IP perangkat uji muncul di daftar banned, berarti Fail2Ban berhasil mendeteksi dan memblokir percobaan brute force. Jangan lupa untuk melepas blokir IP uji setelah selesai.
Selain pengecekan manual, Anda bisa melihat log real-time Fail2Ban untuk memantau aktivitas pemblokiran secara langsung.
sudo tail -f /var/log/fail2ban.log
Log ini menampilkan setiap event pemblokiran dan unbanning secara real-time. Jika Anda melihat banyak IP diblokir dalam waktu singkat, itu pertanda Fail2Ban bekerja dengan baik.
Terakhir, pastikan kedua service otomatis aktif saat server reboot.
sudo systemctl is-enabled ufw
sudo systemctl is-enabled fail2ban
Kedua perintah harus menghasilkan output enabled. Jika menampilkan disabled, jalankan systemctl enable untuk masing-masing service.
Jika Anda baru saja mendeploy VPS untuk website, provider seperti Nevacloud dan Warnahost menyediakan VPS dengan sistem operasi bersih yang siap dikonfigurasi dengan langkah-langkah di atas.
Pertanyaan yang Sering Diajukan (FAQ)
Berikut jawaban untuk pertanyaan yang sering muncul seputar penggunaan UFW dan Fail2Ban di VPS.
Apakah UFW dan Fail2Ban bisa berjalan bersamaan?
Bisa, keduanya dirancang untuk bekerja bersamaan. UFW mengelola aturan firewall dan Fail2Ban secara otomatis menambahkan aturan blokir ke UFW saat mendeteksi serangan.
Berapa resource yang dikonsumsi kedua tool ini?
Keduanya sangat ringan. UFW hanya menggunakan beberapa MB RAM dan Fail2Ban umumnya mengonsumsi kurang dari 50 MB RAM, sehingga tidak akan mempengaruhi performa website.
Apakah akan memblokir pengunjung normal?
Tidak, selama konfigurasi maxretry diatur dengan wajar. Pengunjung yang salah memasukkan password 1-2 kali tidak akan terblokir karena threshold default adalah 3-5 kali percobaan.
Bagaimana jika saya terblokir sendiri?
Gunakan VNC console dari dashboard provider VPS Anda untuk mengakses server, lalu jalankan perintah fail2ban-client unbanip untuk melepas blokir IP Anda.
Apakah perlu update konfigurasi secara berkala?
Tidak perlu. Konfigurasi bersifat statis dan tetap berjalan meskipun server di-restart, yang perlu hanya update paket secara berkala.
Apakah UFW mengganggu performa website?
Tidak, karena UFW bekerja di level kernel dan hanya memeriksa header koneksi tanpa memproses konten, sehingga dampaknya terhadap latensi tidak terasa.
Tools Gratis yang Menghentikan 90% Serangan ke VPS Anda
Setelah mengikuti seluruh langkah cara amankan VPS di atas, server Anda sudah memiliki dua lapisan pertahanan yang bekerja otomatis 24 jam. Berikut ringkasan dari apa yang sudah dikonfigurasi.
UFW dan Fail2Ban bukanlah solusi keamanan yang lengkap, tetapi keduanya mampu menangani serangan paling umum yang dihadapi pemilik VPS. Brute force SSH, port scanning, dan serangan brute force ke halaman login bisa dihentikan hanya dengan konfigurasi yang dibahas dalam tutorial ini.
Yang perlu diingat, keamanan VPS adalah proses berkelanjutan, bukan satu kali setup. Cek status Fail2Ban secara berkala dengan perintah fail2ban-client status dan pantau log server untuk memastikan tidak ada aktivitas yang mencurigakan.
Langkah selanjutnya yang bisa Anda ambil adalah mengganti port SSH default ke port kustom, memasang sistem deteksi intrusi, atau mengatur rate limiting di Nginx. Semua ini akan dibahas secara mendalam di artikel hardening keamanan VPS lanjutan.
Jangan menunda pemasangan firewall dan Fail2Ban. Setiap menit tanpa proteksi adalah kesempatan bagi bot otomatis untuk menemukan celah di server Anda.
Mulai dari langkah paling sederhana ini, lalu tingkatkan secara bertahap sesuai kebutuhan website Anda. Dengan fondasi UFW dan Fail2Ban yang sudah kuat, langkah hardening berikutnya akan jauh lebih mudah diterapkan.



