Cara Hardening SSH di VPS Ubuntu: Nonaktifkan Root & Password, Pasang UFW + Fail2ban
Serangan brute force SSH pada VPS Ubuntu merupakan ancaman konstan yang tercatat setiap detik di dalam log server publik. Tanpa perlindungan dasar, bot otomatis di internet akan terus-menerus mencoba kombinasi nama pengguna dan kata sandi umum sampai berhasil menjebol akses root. Artikel ini memandu langkah demi langkah hardening server Ubuntu dengan menonaktifkan autentikasi password dan login root, serta memasang firewall UFW dan proteksi otomatis Fail2ban.
Ringkasan
- Pembuatan akun sudo non-root dan autentikasi SSH key adalah syarat mutlak sebelum hardening.
- Menonaktifkan
PermitRootLogindanPasswordAuthenticationmenutup celah brute force. - UFW wajib mengizinkan port SSH sebelum perintah
ufw enablediaktifkan. - Fail2ban memblokir alamat IP penyerang secara otomatis berdasarkan batas percobaan gagal.
- Selalu uji koneksi di jendela terminal terpisah sebelum menutup sesi SSH aktif.
Prasyarat dan Lingkungan Pengujian
Tabel berikut menampilkan versi perangkat lunak dan lingkungan sistem yang digunakan dan tervalidasi dalam panduan ini:
| Perangkat Lunak / Komponen | Versi / Nilai Pengujian | Keterangan |
|---|---|---|
| Sistem Operasi | Ubuntu 24.04 LTS (Noble Numbat) | Berlaku juga untuk Ubuntu 22.04 LTS |
| OpenSSH Server | 9.6p1 | Layanan SSH bawaan Ubuntu |
| UFW (Uncomplicated Firewall) | 0.36.2 | Manajer firewall iptables/nftables |
| Fail2ban | 1.0.2 | Layanan deteksi dan pemblokiran otomatis |
| Tipe Kunci SSH | Ed25519 (id_ed25519) | Algoritma kunci publik modern dan aman |
Langkah 1: Buat Pengguna Sudo dan Konfigurasi SSH Key
Langkah ini bertujuan membuat akun pengguna baru berpangkat sudo dan memasang kunci publik SSH agar Anda tidak lagi bergantung pada akun root maupun kata sandi.
- Buat pasangan kunci SSH di komputer lokal. Buka terminal di komputer lokal Anda dan jalankan perintah pembuatan kunci berpola Ed25519:
ssh-keygen -t ed25519 -C "admin@contoh-vps"- Buat pengguna sudo baru di VPS Ubuntu. Masuk ke VPS sebagai root, lalu tambahkan pengguna baru dan masukkan pengguna tersebut ke dalam grup
sudo:
adduser user
usermod -aG sudo user- Salin kunci publik ke akun pengguna baru. Di komputer lokal, gunakan perintah
ssh-copy-iduntuk mengirimkan kunci publik ke VPS:
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]Metode Manual. Jika
ssh-copy-idtidak tersedia, buat direktori/home/user/.sshdi VPS dengan izin700, lalu buat berkas/home/user/.ssh/authorized_keysberizin600yang berisi isi berkasid_ed25519.pub. Pastikan kepemilikan direktori dan berkas tersebut diatur keuser:userdengan perintahchown -R user:user /home/user/.ssh.
- Uji autentikasi kunci dari komputer lokal. Pastikan Anda dapat login tanpa dimintai kata sandi pengguna:
ssh -i ~/.ssh/id_ed25519 [email protected]Verifikasi Hak Sudo. Setelah berhasil masuk menggunakan akun
user, uji perintahsudo whoami. Jika keluarannya adalahroot, berarti hak akses administratif akun tersebut sudah berfungsi dengan benar.
Langkah 2: Nonaktifkan Root Login dan Autentikasi Password SSH
Langkah ini mengonfigurasi daemon OpenSSH agar menolak login langsung sebagai root dan menolak semua bentuk autentikasi berbasis kata sandi.
- Buat berkas konfigurasi tambahan SSH. Di Ubuntu modern, seperti dijelaskan pada manpage sshd_config Ubuntu, direktori
/etc/ssh/sshd_config.d/digunakan untuk menyimpan penyesuaian kustom tanpa mengubah berkas utama. Buat berkas/etc/ssh/sshd_config.d/hardening.conf:
sudo nano /etc/ssh/sshd_config.d/hardening.conf- Isi baris direktif keamanan berikut ke dalam berkas:
# /etc/ssh/sshd_config.d/hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yesMakna dan fungsi dari setiap direktif di atas dirangkum dalam tabel berikut:
| Direktif Konfigurasi | Nilai | Fungsi Keamanan |
|---|---|---|
PermitRootLogin | no | Melarang akun root untuk login langsung melalui SSH |
PasswordAuthentication | no | Menonaktifkan autentikasi menggunakan password teks biasa |
KbdInteractiveAuthentication | no | Menonaktifkan tantangan interaktif keyboard/PAM password |
PubkeyAuthentication | yes | Mewajibkan dan mengizinkan autentikasi berbasis kunci publik |
- Uji sintaks berkas konfigurasi SSH. Sebelum me-reload layanan, jalankan pengujian sintaks untuk memastikan tidak ada kesalahan penulisan:
sudo sshd -t- Terapkan perubahan konfigurasi SSH. Jika
sshd -ttidak menampilkan pesan kesalahan, jalankan perintah reload pada layanan SSH:
sudo systemctl reload sshJangan Tutup Sesi Terminal Ini! Biarkan sesi terminal VPS saat ini tetap terbuka. Jika ada kesalahan konfigurasi kunci SSH, sesi yang aktif ini akan menjadi penyelamat Anda untuk memperbaiki kesalahan sebelum terputus total.
Langkah 3: Konfigurasi dan Aktifkan Firewall UFW
Langkah ini membatasi lalu lintas jaringan masuk hanya pada port yang diizinkan dan menutup port lain yang tidak digunakan.
- Periksa status awal UFW. Jalankan perintah berikut untuk melihat status firewall:
sudo ufw status verbose- Atur kebijakan bawaan firewall. Tetapkan kebijakan menolak semua paket masuk (incoming) dan mengizinkan semua paket keluar (outgoing), sebagaimana direkomendasikan di dokumentasi UFW Ubuntu:
sudo ufw default deny incoming
sudo ufw default allow outgoing- Izinkan lalu lintas port SSH. Buka port 22/TCP agar koneksi SSH tidak terputus saat firewall diaktifkan:
sudo ufw allow 22/tcp comment 'Akses SSH'Bahaya Terkunci Out! Menjalankan
ufw enabletanpa mengeksekusiufw allow 22/tcpatauufw allow sshterlebih dahulu akan langsung memutuskan koneksi SSH Anda dan memblokir seluruh akses jaringan masuk ke VPS.
- Aktifkan firewall UFW. Jalankan perintah aktifkan UFW:
sudo ufw enable- Verifikasi aturan yang aktif. Pastikan port 22 tercantum dengan status
ALLOW:
sudo ufw status numberedLangkah 4: Pasang dan Konfigurasi Fail2ban
Langkah ini menginstal Fail2ban untuk memantau log autentikasi SSH dan secara otomatis memblokir alamat IP yang melakukan percobaan login gagal secara berulang.
- Pasang paket Fail2ban. Jalankan manajer paket
aptuntuk menginstal Fail2ban:
sudo apt update && sudo apt install -y fail2ban- Buat berkas konfigurasi lokal
jail.local. Mengikuti aturan pada manpage fail2ban jail.conf, berkasjail.confbawaan vendor tidak boleh diubah langsung. Buat salinan kustom padajail.local:
sudo nano /etc/fail2ban/jail.local- Isi konfigurasi proteksi SSH pada
jail.local:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 3
backend = systemd
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = systemdParameter utama konfigurasi Fail2ban dijelaskan pada tabel berikut:
| Parameter | Nilai Contoh | Penjelasan Fungsi |
|---|---|---|
enabled | true | Mengaktifkan penjara (jail) untuk proteksi daemon SSH |
port | ssh | Port atau layanan yang dipantau (default: 22) |
maxretry | 3 | Batas maksimum percobaan login gagal sebelum diblokir |
findtime | 10m | Jendela waktu pencarian kegagalan (10 menit) |
bantime | 1h | Durasi pemblokiran alamat IP penyerang (1 jam) |
backend | systemd | Metode pembacaan log melalui systemd-journald pada Ubuntu modern |
- Mulai dan aktifkan layanan Fail2ban. Jalankan perintah systemd untuk menghidupkan Fail2ban saat sistem dinyalakan:
sudo systemctl enable --now fail2ban- Periksa status penjara SSH di Fail2ban. Verifikasi bahwa penjara
sshdsudah aktif dan memantau koneksi:
sudo fail2ban-client status sshdLangkah 5: Uji Koneksi dan Verifikasi Pengamanan (Prosedur Anti-Terkunci)
Langkah terakhir ini memastikan seluruh lapisan keamanan berfungsi tanpa risiko mengunci diri sendiri dari VPS.
- Buka jendela terminal baru di komputer lokal. Jangan menutup terminal lama tempat Anda mengonfigurasi VPS.
- Uji login menggunakan akun sudo baru dan SSH key:
ssh -i ~/.ssh/id_ed25519 [email protected]- Uji penolakan login root. Di jendela baru, coba login sebagai root:
Hasil yang diharapkan adalah pesan Permission denied (publickey).
- Uji penolakan autentikasi kata sandi. Uji coba login dengan memaksa autentikasi password:
ssh -o PubkeyAuthentication=no [email protected]Hasil yang diharapkan adalah penolakan koneksi tanpa muncul perintah pengisian password (Permission denied (publickey)).
Penanganan Darurat Console VNC/Serial. Jika Anda tidak sengaja terkunci karena salah mengonfigurasi berkas SSH atau UFW, gunakan fitur Web Console atau Serial Console (VNC) yang disediakan oleh penyedia VPS Anda (seperti DigitalOcean, Linode, atau Hetzner). Akses console ini tidak melewati SSH maupun UFW sehingga Anda dapat masuk dan memperbaiki berkas
/etc/ssh/sshd_config.d/hardening.confatau menjalankanufw disable.
Pemecahan Masalah (Troubleshooting)
Tabel berikut memuat daftar masalah umum yang sering ditemui saat hardening SSH dan langkah penyelesaiannya:
| Gejala Masalah | Kemungkinan Penyebab | Langkah Solusi |
|---|---|---|
Permission denied (publickey) saat login user | Hak akses folder .ssh atau authorized_keys salah | Jalankan chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys pada VPS |
Koneksi Connection timed out setelah ufw enable | Port SSH belum diizinkan di UFW | Gunakan console VNC VPS, lalu jalankan sudo ufw allow 22/tcp |
| Fail2ban tidak mendeteksi kegagalan login | Opsi backend tidak sesuai dengan log Ubuntu | Pastikan backend = systemd diatur dalam jail.local |
| IP komputer sendiri tidak sengaja terblokir Fail2ban | Terlalu banyak percobaan salah | Buka console VPS dan jalankan sudo fail2ban-client unban <IP-Anda> |
Penutup
Hardening SSH di VPS Ubuntu dapat diselesaikan dalam hitungan menit dengan menggabungkan kunci SSH, mematikan login root & password, serta memfungsikan UFW dan Fail2ban. Dengan menerapkan langkah-langkah di atas dan selalu melakukan pengujian pada sesi terminal terpisah, VPS Anda kini terlindungi dari serangan brute force otomatis tanpa mengorbankan kenyamanan akses administratif Anda.
