Kembali ke Panduan Deploy

Keamanan server — 3 lapis pertahanan

Amankan server dengan UFW, SSH Key & Fail2ban

Begitu VPS-mu online, robot-robot di internet langsung mencoba menebak password-nya ribuan kali sehari. Di panduan ini kamu akan memasang tiga lapis pertahanan: firewall yang menutup pintu tak perlu, login pakai kunci (bukan password), dan Fail2ban yang otomatis memblokir penyerang. Dijelaskan dari nol, langkah demi langkah.

Firewall (UFW)

Menutup semua pintu, hanya membuka yang perlu (SSH, HTTP, HTTPS).

SSH Key

Login pakai kunci kriptografi, bukan password yang bisa ditebak.

Fail2ban

Otomatis memblokir IP yang berkali-kali gagal login.

Penting — baca dulu. Selama mengikuti panduan ini, jangan tutup sesi SSH yang sedang aktif sampai kamu yakin bisa login lewat sesi baru. Ini jaring pengaman agar kamu tidak terkunci dari servermu sendiri. Idealnya kamu juga punya akses konsol/VNC dari panel VPS (Hostinger, Contabo, DigitalOcean, dll) sebagai cadangan.
1
Pahami dulu

Kenapa server perlu diamankan?

IP publik VPS-mu terlihat oleh seluruh internet. Dalam hitungan menit setelah online, skrip otomatis akan mencoba login lewat SSH dengan ribuan kombinasi username & password umum (admin/admin, root/123456, dan seterusnya). Ini disebut serangan brute-force.

Kita lawan dengan tiga lapis. Bayangkan servermu sebagai rumah: firewall mengunci semua jendela kecuali pintu depan, SSH key mengganti gembok biasa dengan kunci yang mustahil ditebak, dan Fail2ban adalah satpam yang mengusir siapa pun yang menggedor terlalu sering.

Lapis 1: UFWtutup port
Lapis 2: SSH Keykunci, bukan password
Lapis 3: Fail2banblokir penyerang
2
Checklist

Yang perlu kamu siapkan

  • VPS Ubuntu/Debian dengan akses sudo (mis. user "deploy", bukan root langsung).
  • Akses ke terminal laptop kamu (Mac/Linux: Terminal; Windows: PowerShell/Git Bash).
  • Akses konsol/VNC dari panel VPS sebagai cadangan kalau-kalau terkunci.
3
Lapis 1

Pasang firewall UFW

UFW (Uncomplicated Firewall) membuat pengaturan firewall jadi mudah. Prinsipnya: tolak semua koneksi masuk, lalu buka hanya port yang benar-benar perlu.

# DI SERVER — pasang & atur firewall UFW
sudo apt update
sudo apt install -y ufw
 
# Aturan dasar: tolak semua masuk, izinkan semua keluar
sudo ufw default deny incoming
sudo ufw default allow outgoing
 
# Izinkan HANYA port yang perlu
sudo ufw allow OpenSSH      # port 22 (SSH) -- WAJIB, jangan sampai lupa!
sudo ufw allow 80/tcp       # HTTP
sudo ufw allow 443/tcp      # HTTPS
 
# Nyalakan firewall
sudo ufw enable
 
# Cek aturan yang aktif
sudo ufw status verbose
Jangan lewatkan sudo ufw allow OpenSSH SEBELUM sudo ufw enable. Kalau lupa, kamu akan langsung terkunci dari server karena port SSH ikut tertutup.

Setelah ufw enable, hasil ufw status kurang lebih seperti ini:

deploy@server — status firewall
deploy@server:~$ sudo ufw status verboseStatus: activeTo                Action    FromOpenSSH           ALLOW     Anywhere80/tcp            ALLOW     Anywhere443/tcp           ALLOW     Anywhere# hanya 3 pintu yang terbuka ✅
4
Lapis 2

Buat & pasang SSH key

Password bisa ditebak; kunci kriptografi praktis tidak. SSH key terdiri dari sepasang: kunci privat (rahasia, simpan di laptop) dan kunci publik (ditaruh di server). Buat dulu di laptop kamu, bukan di server:

# DI LAPTOP kamu (bukan di server) — buat sepasang kunci
ssh-keygen -t ed25519 -C "email-kamu@contoh.com"
 
# Tekan Enter untuk lokasi default (~/.ssh/id_ed25519)
# Boleh isi passphrase untuk lapisan keamanan ekstra

Lalu salin kunci publik ke server. Cara termudah memakai ssh-copy-id(ganti user & IP sesuai punyamu):

# DI LAPTOP — salin kunci publik ke server (cara termudah)
ssh-copy-id deploy@203.0.113.10
 
# Lalu coba login — seharusnya TANPA minta password lagi
ssh deploy@203.0.113.10
kamu@laptop — login tanpa password
kamu@laptop:~$ ssh deploy@203.0.113.10Welcome to Ubuntu 24.04 LTS# masuk tanpa diminta password = kunci aktif ✅
Pastikan kamu benar-benar bisa login tanpa password dulu sebelum lanjut ke langkah berikutnya. Jangan matikan login password sampai langkah ini berhasil.
5
Kunci pintu

Matikan login password

Setelah kunci bekerja, matikan login password agar penyerang tidak punya peluang menebak sama sekali. Buka konfigurasi SSH di server:

# DI SERVER — edit konfigurasi SSH
sudo nano /etc/ssh/sshd_config

Cari baris-baris berikut, hilangkan tanda # di depannya bila ada, lalu ubah nilainya menjadi:

GNU nano 7.2/etc/ssh/sshd_config
1# Larang login langsung sebagai root2PermitRootLogin no3 4# Matikan login dengan password5PasswordAuthentication no6 7# Wajibkan kunci publik8PubkeyAuthentication yes
^O Write Out^X Exit^W Where Is^K Cut

Simpan file, lalu terapkan dengan me-restart SSH:

# Setelah simpan, terapkan perubahan
sudo systemctl restart ssh
Uji dari jendela terminal baru (jangan tutup yang lama). Coba ssh deploy@IP — harus tetap bisa masuk lewat kunci. Kalau gagal, kamu masih punya sesi lama untuk memperbaiki.
6
Lapis 3

Pasang Fail2ban

Fail2ban membaca log login dan otomatis memblokir IP yang gagal login berkali-kali dalam waktu singkat. Pasang dan siapkan file konfigurasinya:

# DI SERVER — pasang Fail2ban
sudo apt install -y fail2ban
 
# Salin file konfigurasi agar tidak tertimpa saat update
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
 
# Edit konfigurasi
sudo nano /etc/fail2ban/jail.local

Di dalam jail.local, cari bagian [sshd] dan atur seperti ini. maxretry = jumlah percobaan gagal sebelum diblokir, bantime = lama pemblokiran:

GNU nano 7.2/etc/fail2ban/jail.local
1[sshd]2enabled = true3port = ssh4maxretry = 55findtime = 10m6bantime = 1h
^O Write Out^X Exit^W Where Is^K Cut

Nyalakan Fail2ban lalu cek statusnya:

# Nyalakan & aktifkan Fail2ban
sudo systemctl enable --now fail2ban
 
# Cek status "jail" untuk SSH
sudo fail2ban-client status sshd
deploy@server — status Fail2ban
deploy@server:~$ sudo fail2ban-client status sshdStatus for the jail: sshd|- Currently failed: 0`- Currently banned: 2# 2 IP penyerang sudah diblokir otomatis ✅
7
Cek akhir

Verifikasi keamanan

Terakhir, pastikan ketiga lapis aktif. Jalankan tiga perintah ini — semuanya harus menunjukkan status aktif:

deploy@server — cek 3 lapis
deploy@server:~$ sudo ufw status | head -n 1Status: activedeploy@server:~$ sudo systemctl is-active fail2banactivedeploy@server:~$ sudo sshd -T | grep -E 'passwordauthentication|permitrootlogin'passwordauthentication nopermitrootlogin no# tiga lapis pertahanan aktif ✅
Selamat — servermu kini jauh lebih sulit ditembus. Biasakan juga rutin menjalankan sudo apt update && sudo apt upgrade agar tambalan keamanan selalu terbaru.
8
Anti-stuck

Masalah umum & cara mengatasinya

Keamanan rentan membuat orang terkunci dari servernya sendiri. Cek tabel ini bila terjadi:

GejalaSebabSolusi
Terkunci! Tidak bisa SSH setelah ufw enableLupa menjalankan sudo ufw allow OpenSSH sebelum enable.Masuk lewat konsol/VNC panel VPS, jalankan: sudo ufw allow OpenSSH.
Masih diminta password setelah pasang keyKunci belum tersalin, atau PasswordAuthentication belum dimatikan.Ulangi ssh-copy-id, pastikan bisa login tanpa password DULU sebelum matikan password.
Permission denied (publickey)Kunci salah, atau izin folder ~/.ssh di server terlalu terbuka.Di server: chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys.
Fail2ban tidak memblokir apa-apaService belum aktif atau jail sshd belum enabled.Cek: sudo systemctl status fail2ban dan sudo fail2ban-client status sshd.

Kerja bagus!

Servermu kini online 24 jam dan terlindungi tiga lapis. Lanjutkan menjelajahi panduan lain untuk membuat aplikasimu makin tangguh.