Cara Hardening Server Linux VPS dalam 10 Menit: UFW, Fail2ban, dan SSH Key agar VPS Tidak Mudah Dibobol
JUDUL: Cara Hardening Server Linux VPS dalam 10 Menit: UFW, Fail2ban, dan SSH Key agar VPS Tidak Mudah Dibobol SEO_TITLE: Cara Hardening VPS Linux: UFW, Fail2ban & SSH Key 10 Menit SLUG: cara-hardening-vps-linux-ufw-fail2ban-ssh-key FOKUS KW: cara hardening VPS Linux UFW fail2ban AHREFS KD: 22 AHREFS VOL: 1.500 KATEGORI: Tutorial (Linux/Server) TAGS: linux, vps, server, keamanan-server, ufw, fail2ban, ssh, ubuntu, hardening-server
—
Pendahuluan
Bayangkan Anda baru saja membeli VPS di Vultr, DigitalOcean, atau layanan lokal seperti IDCloudHost—server seharga Rp 50-150 ribu per bulan itu sudah online dan bisa diakses dari mana saja. Yang mungkin tidak Anda sadari: begitu IP VPS Anda aktif, bot-bot pemindai otomatis di internet langsung mencatatnya dan mulai mencoba masuk lewat port SSH.
Cek log SSH VPS yang baru dibuat, dan Anda akan melihat ratusan hingga ribuan percobaan login gagal dalam satu hari—kebanyakan dari IP-IP asing yang mencoba kombinasi username dan password secara acak.
Kabar baiknya: mengamankan VPS dari serangan dasar ini bisa dilakukan dalam 10 menit dengan tiga langkah utama. Ini bukan prosedur yang rumit, tapi efeknya signifikan.

Langkah 1: Konfigurasi Firewall UFW (3 Menit)
UFW (Uncomplicated Firewall) adalah antarmuka ramah untuk iptables yang sudah tersedia di Ubuntu/Debian. Prinsipnya simpel: tolak semua koneksi masuk, lalu buka hanya yang Anda butuhkan.
Penting: Jalankan perintah ini berurutan. Buka port SSH SEBELUM mengaktifkan UFW, atau koneksi Anda akan terputus.
# Install UFW (biasanya sudah ada di Ubuntu)
sudo apt install -y ufw
# Set default: tolak semua masuk, izinkan semua keluar
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Buka port SSH (WAJIB dilakukan dulu sebelum enable!)
sudo ufw allow 22/tcp comment 'SSH'
# Buka port web jika ini web server
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# Aktifkan UFW
sudo ufw enable
# Cek status
sudo ufw status verbose
Output yang benar:
Status: active
Default: deny (incoming), allow (outgoing)
To Action From
22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
Rate limit SSH untuk memperlambat brute-force (memblokir IP yang mencoba lebih dari 6 koneksi dalam 30 detik):
sudo ufw limit ssh
Jika Anda sudah mengganti port SSH ke port lain (misalnya 2222), sesuaikan perintahnya:
sudo ufw allow 2222/tcp comment 'SSH custom port'
sudo ufw delete allow 22/tcp

Langkah 2: Install dan Konfigurasi Fail2ban (3 Menit)
UFW memblokir port, tapi tidak mencegah percobaan login berulang di port yang memang terbuka. Fail2ban melengkapi UFW dengan cara memantau log dan memblokir IP yang gagal login terlalu sering.
# Install fail2ban
sudo apt install -y fail2ban
# Buat file konfigurasi lokal (jangan edit jail.conf langsung—akan ditimpa saat update)
sudo nano /etc/fail2ban/jail.local
Isi file /etc/fail2ban/jail.local dengan:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
Penjelasan pengaturan:
bantime = 86400: IP yang gagal login 3 kali akan diblokir selama 24 jamfindtime = 600: Hitung percobaan gagal dalam jendela 10 menitmaxretry = 3: Maksimal 3 percobaan sebelum diblokir
# Aktifkan dan jalankan fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# Cek status jail SSH
sudo fail2ban-client status sshd
Setelah sehari berjalan, coba cek lagi dengan fail2ban-client status sshd—Anda akan terkejut melihat berapa banyak IP sudah diblokir.
Langkah 3: Ganti Autentikasi ke SSH Key (4 Menit)
Password bisa ditebak lewat brute-force; SSH key tidak. Cara kerja SSH key: Anda punya dua kunci—private key (disimpan di komputer Anda, tidak boleh dikirim ke siapa pun) dan public key (disimpan di server).
Di komputer lokal Anda (Windows: gunakan PuTTYgen atau WSL; Mac/Linux: langsung di terminal):
# Generate SSH key pair
ssh-keygen -t ed25519 -C "vps-saya"
# Salin public key ke server
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@IP-VPS-ANDA
Setelah berhasil masuk dengan key, nonaktifkan login password:
sudo nano /etc/ssh/sshd_config
Ubah baris-baris berikut:
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
# Restart SSH (jangan tutup sesi sekarang—buka tab baru dulu untuk tes)
sudo systemctl restart sshd
Buka terminal baru dan coba login dengan key. Jika berhasil, sesi lama bisa ditutup. Jika ada masalah, jangan tutup sesi lama—perbaiki dulu dari sana.
Verifikasi Akhir
Jalankan checklist ini setelah tiga langkah selesai:
# 1. Firewall aktif dengan deny-incoming
sudo ufw status verbose | head -5
# 2. Fail2ban berjalan dan jail SSH aktif
sudo fail2ban-client status sshd
# 3. SSH tidak mengizinkan password dan root login
sudo sshd -T | grep -E 'permitrootlogin|passwordauth'
# Output yang benar: permitrootlogin no | passwordauthentication no
# 4. Lihat port yang sedang mendengarkan
sudo ss -tlnp
Langkah Selanjutnya (Opsional)
Tiga langkah di atas sudah menangani mayoritas serangan otomatis. Jika ingin lebih jauh:
- Aktifkan unattended-upgrades agar patch keamanan terpasang otomatis
- Pasang Nginx rate limiting di
wp-login.phpdanxmlrpc.phpuntuk VPS yang menjalankan WordPress - Audit dengan Lynis:
sudo lynis audit systemmemberikan skor keamanan dan rekomendasi detail
VPS yang dirawat secara aktif jauh lebih aman dari yang dibiarkan berjalan tanpa perhatian. Setup 10 menit ini bisa menghemat Anda dari sakit kepala yang jauh lebih besar di kemudian hari.
— **