TLDR #
SSH yang dibiarkan default adalah pintu masuk favorit peretas. Tiga langkah penting untuk mengamankannya: matikan login password dan wajibkan kunci SSH, pasang fail2ban untuk memblokir IP yang mencoba-coba, dan pindahkan port dari 22 ke port non-standar untuk mengurangi noise serangan otomatis.
Pendahuluan #
Begitu server publik aktif, log SSH-nya biasanya langsung dibombardir percobaan login otomatis dari bot. Serangan ini disebut brute force — mencoba ribuan kombinasi username/password secara otomatis.
Kabar baiknya, SSH bisa dibuat sangat aman dengan konfigurasi yang tepat. Artikel ini memandu tiga lapis pengamanan paling efektif.
Lapis 1: Otentikasi Kunci SSH #
Membuat pasangan kunci di komputer lokal #
ssh-keygen -t ed25519 -C "email@contoh.com"Hasilnya dua file:
~/.ssh/id_ed25519— kunci privat (jangan pernah dibagikan).~/.ssh/id_ed25519.pub— kunci publik (boleh dipasang di server).
Menyalin kunci publik ke server #
ssh-copy-id user@serveratau manual:
cat ~/.ssh/id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"Uji login tanpa password #
ssh user@serverJika masuk tanpa diminta password, kunci sudah bekerja.
Lapis 2: Konfigurasi sshd #
Buka file konfigurasi:
sudo nano /etc/ssh/sshd_configAtur baris berikut:
# Matikan login root via password
PermitRootLogin prohibit-password
# Matikan login password, wajibkan kunci
PasswordAuthentication no
# Matikan login sebagai root (opsional, lebih aman)
# PermirRootLogin no
# Batasi jumlah percobaan login
MaxAuthTries 3
# Nonaktifkan empty password
PermitEmptyPasswords noSetelah yakin login kunci bekerja, restart SSH:
sudo systemctl restart sshPeringatan: jangan tutup sesi SSH saat ini sebelum memastikan kunci berfungsi. Buka sesi baru untuk menguji, baru tutup yang lama.
Lapis 3: Fail2ban #
Fail2ban memantau log dan otomatis memblokir IP yang gagal login berkali-kali.
Instalasi #
sudo apt update
sudo apt install -y fail2banKonfigurasi #
Buat file konfigurasi lokal:
sudo nano /etc/fail2ban/jail.localIsi:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = 22bantime— lama blokir (detik), 3600 = 1 jam.findtime— jendela waktu penghitungan kegagalan.maxretry— jumlah kegagalan sebelum diblokir.
Aktifkan dan cek:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status sshdMelihat IP yang diblokir #
sudo fail2ban-client status sshdMembuka blokir IP tertentu #
sudo fail2ban-client set sshd unbanip 203.0.113.10Lapis 4: Port Non-Standard #
Memindahkan SSH dari port 22 ke port lain mengurangi serangan otomatis secara drastis (bot biasanya hanya memindai port 22).
Edit:
sudo nano /etc/ssh/sshd_configUbah:
Port 2222Perbarui fail2ban:
[sshd]
enabled = true
port = 2222Restart layanan:
sudo systemctl restart ssh
sudo systemctl restart fail2banLogin berikutnya:
ssh -p 2222 user@serverCatatan: sesuaikan firewall. Jika memakai UFW, izinkan port baru:
sudo ufw allow 2222/tcp sudo ufw delete allow 22/tcp
Rangkuman Lapisan Keamanan #
| Lapis | Fungsi | Risiko jika dilewati |
|---|---|---|
| Kunci SSH | Otentikasi tanpa password | Login password bisa ditebak |
PasswordAuthentication no |
Menutup brute force password | Serangan brute force |
| fail2ban | Blokir IP mencurigakan | Bot bebas mencoba terus |
| Port non-standar | Kurangi noise serangan | Port 22 terus diserang |
Keamanan Tambahan #
- Nonaktifkan root login sepenuhnya (
PermitRootLogin no). - Gunakan user biasa dengan
sudountuk semua pekerjaan. - Perbarui sistem rutin (
sudo apt update && sudo apt upgrade). - Pantau log auth:
sudo tail -f /var/log/auth.log. - Pertimbangkan 2FA untuk akses yang sangat sensitif.
Ringkasan #
# 1. Buat kunci dan salin ke server
ssh-keygen -t ed25519
ssh-copy-id user@server
# 2. Matikan password login di sshd_config
PasswordAuthentication no
# 3. Pasang fail2ban
sudo apt install -y fail2ban
# 4. Pindah port
Port 2222Dokumentasi: man sshd_config