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.
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.
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.
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 verbosesudo 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:~$ sudo ufw status verboseStatus: activeTo Action FromOpenSSH ALLOW Anywhere80/tcp ALLOW Anywhere443/tcp ALLOW Anywhere# hanya 3 pintu yang terbuka ✅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 ekstraLalu 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.10kamu@laptop:~$ ssh deploy@203.0.113.10Welcome to Ubuntu 24.04 LTS# masuk tanpa diminta password = kunci aktif ✅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_configCari baris-baris berikut, hilangkan tanda # di depannya bila ada, lalu ubah nilainya menjadi:
1# Larang login langsung sebagai root2PermitRootLogin no3 4# Matikan login dengan password5PasswordAuthentication no6 7# Wajibkan kunci publik8PubkeyAuthentication yesSimpan file, lalu terapkan dengan me-restart SSH:
# Setelah simpan, terapkan perubahan
sudo systemctl restart sshssh deploy@IP — harus tetap bisa masuk lewat kunci. Kalau gagal, kamu masih punya sesi lama untuk memperbaiki.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.localDi dalam jail.local, cari bagian [sshd] dan atur seperti ini. maxretry = jumlah percobaan gagal sebelum diblokir, bantime = lama pemblokiran:
1[sshd]2enabled = true3port = ssh4maxretry = 55findtime = 10m6bantime = 1hNyalakan Fail2ban lalu cek statusnya:
# Nyalakan & aktifkan Fail2ban
sudo systemctl enable --now fail2ban
# Cek status "jail" untuk SSH
sudo fail2ban-client status sshddeploy@server:~$ sudo fail2ban-client status sshdStatus for the jail: sshd|- Currently failed: 0`- Currently banned: 2# 2 IP penyerang sudah diblokir otomatis ✅Verifikasi keamanan
Terakhir, pastikan ketiga lapis aktif. Jalankan tiga perintah ini — semuanya harus menunjukkan status aktif:
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 ✅sudo apt update && sudo apt upgrade agar tambalan keamanan selalu terbaru.Masalah umum & cara mengatasinya
Keamanan rentan membuat orang terkunci dari servernya sendiri. Cek tabel ini bila terjadi:
| Gejala | Sebab | Solusi |
|---|---|---|
| Terkunci! Tidak bisa SSH setelah ufw enable | Lupa menjalankan sudo ufw allow OpenSSH sebelum enable. | Masuk lewat konsol/VNC panel VPS, jalankan: sudo ufw allow OpenSSH. |
| Masih diminta password setelah pasang key | Kunci 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-apa | Service 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.