Tutorial Hardening SSH VPS: Autentikasi Passkey FIDO2 & Fail2ban
Poin Kunci Artikel Ini:
- VPS server menjalankan distro Linux modern (Ubuntu 20.04+, Debian 11+, RHEL 8+, atau AlmaLinux).
- Perangkat keras FIDO2/U2F Security Key yang mendukung FIDO2 (seperti YubiKey 5 Series atau SoloKeys).
- Namun, file kunci privat (private key) yang tersimpan di dalam media penyimpanan lokal () tetap berisiko dicuri oleh pencuri identitas berbasis malware.
1. Anatomi Serangan SSH & Keterbatasan Kunci Kriptografi Standar
Alamat IP publik VPS menerima pemindaian port otomatis dari botnet global hanya dalam beberapa detik setelah provisioning. Port standar 22 menjadi target utama serangan dictionary attack, credential stuffing, dan pemindaian kerentanan berkecepatan tinggi menggunakan platform seperti Masscan atau ZMap.
Metode autentikasi berbasis kata sandi (password) memiliki tingkat risiko tinggi. Kata sandi rentan terhadap serangan brute force, teknik shoulder surfing, peretasan man-in-the-middle melalui phising, serta penggunaan ulang kata sandi (credential reuse). Bahkan kata sandi kompleks tetap dapat dieksfiltrasi jika komputer klien terinfeksi malware tipe keylogger atau infostealer.
Penggunaan kunci enkripsi SSH standar (seperti RSA 4096-bit atau Ed25519 standar) meningkatkan enkripsi lalu lintas data. Namun, file kunci privat (private key) yang tersimpan di dalam media penyimpanan lokal (~/.ssh/id_ed25519) tetap berisiko dicuri oleh pencuri identitas berbasis malware. Jika kunci privat lokal berhasil diunduh oleh peretas dan passphrase kunci lemah, penyerang dapat memecahkannya secara offline menggunakan alat seperti John the Ripper atau Hashcat.
Teknologi autentikasi FIDO2 (Fast IDentity Online 2) dan WebAuthn menyelesaikan masalah eksfiltrasi ini. Menggunakan tipe kunci ed25519-sk (Security Key), pasangan kunci kriptografi dibuat dan diproses langsung di dalam modul hardware terisolasi (Secure Element) pada perangkat fisik seperti YubiKey atau SoloKeys. Kunci privat tidak pernah keluar dari chip hardware tersebut. Proses autentikasi membutuhkan dua faktor validasi fisik:
- User Presence (UP): Penekanan tombol fisik pada token hardware untuk membuktikan keberadaan pengguna.
- User Verification (UV): Verifikasi koden PIN lokal yang diproses langsung di dalam perangkat hardware sebelum permintaan otorisasi disetujui.
2. Arsitektur & Prasyarat FIDO2 pada OpenSSH
Dukungan native untuk perangkat keamanan FIDO2/U2F tersedia mulai dari OpenSSH versi 8.2. OpenSSH menyediakan dua tipe algoritma kunci hardware:
ed25519-sk: Kunci Security Key berbasis Kurva Eliptik Ed25519. Memiliki performa tinggi dan perlindungan native terhadap serangan side-channel timing attack. Ini adalah opsi standar yang direkomendasikan.ecdsa-sk: Kunci Security Key berbasis ECDSA NIST P-256. Digunakan sebagai opsi alternatif jika perangkat keras FIDO2 tidak mendukung ed25519-sk.
FIDO2 pada OpenSSH juga mendukung dua metode penyimpanan metadata kunci:
- Non-resident Keys (Standar): File kunci publik dan file kunci privat parsial (berisi key handle) disimpan di komputer klien. Kunci privat utama tetap berada di dalam kunci hardware.
- Resident Keys (Discoverable Credentials): Metadata kunci disimpan penuh di dalam memori internal perangkat hardware FIDO2. Hal ini memungkinkan pengguna melakukan autentikasi ke server target dari komputer mana pun tanpa perlu membawa file kunci publik/privat lokal.
Prasyarat Sistem
- VPS server menjalankan distro Linux modern (Ubuntu 20.04+, Debian 11+, RHEL 8+, atau AlmaLinux).
- OpenSSH versi 8.2 atau lebih baru di server dan mesin klien. Check versi dengan
ssh -V. - Pustaka
libfido2terinstal pada sistem klien dan server. - Perangkat keras FIDO2/U2F Security Key yang mendukung FIDO2 (seperti YubiKey 5 Series atau SoloKeys).
3. Panduan Langkah demi Langkah Implementasi FIDO2 Passkey
Langkah 1: Instalasi Paket Dependency FIDO2
Jalankan perintah instalasi pustaka libfido2 pada komputer lokal dan server VPS target (contoh untuk distro berbasis Ubuntu/Debian):
sudo apt update && sudo apt install -y libfido2-1 libfido2-dev fido2-toolsUntuk distro berbasis RHEL/Fedora/AlmaLinux:
sudo dnf install -y libfido2 libfido2-devel fido2-toolsLangkah 2: Generate Keypair FIDO2 dengan Verifikasi PIN
Tancapkan kunci hardware FIDO2 ke port USB atau hubungkan via NFC pada komputer lokal. Jalankan perintah pembuatan kunci berikut di terminal lokal:
ssh-keygen -t ed25519-sk -O verify-required -O resident -C "admin-vps-production"Penjelasan parameter:
-t ed25519-sk: Menginstruksikan OpenSSH menggunakan tipe algoritma Ed25519 Security Key.-O verify-required: Memaksa proses autentikasi meminta input PIN hardware (User Verification) setiap kali kunci digunakan untuk koneksi SSH.-O resident: Menyimpan metadata credential di dalam hardware key agar kunci dapat dipanggil kembali (discoverable) dari komputer lain.-C "admin-vps-production": Label komensator untuk mengidentifikasi pemilik kunci di log server.
Sistem akan meminta Anda memasukkan PIN hardware FIDO2 dan menyentuh sensor fisik pada perangkat hardware.
Langkah 3: Diseminasi Public Key ke VPS Target
Kirimkan file kunci publik id_ed25519_sk.pub ke file authorized_keys di server VPS:
ssh-copy-id -i ~/.ssh/id_ed25519_sk.pub -p 22 useradmin@IP_SERVER_VPSAtur hak akses direktori .ssh dan file authorized_keys di server VPS untuk mencegah eskalasi hak akses:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keysLangkah 4: Hardening Konfigurasi OpenSSH Daemon (sshd)
Buka atau buat file konfigurasi terisolasi pada direktori /etc/ssh/sshd_config.d/hardening.conf untuk memastikan konfigurasi custom tidak tertimpa pembaruan paket sistem:
sudo nano /etc/ssh/sshd_config.d/hardening.confMasukkan parameter keamanan tingkat tinggi berikut:
# Perubahan Port & Pembatasan Akses Direct
Port 2222
PermitRootLogin no
AllowUsers useradmin
# Pengetatan Autentikasi
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PubkeyAuthOptions verify-required
# Pembatasan Percobaan & Sesi Timeout
MaxAuthTries 3
MaxSessions 2
ClientAliveInterval 300
ClientAliveCountMax 2
# Pembatasan Fitur yang Tidak Diperlukan
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding noRincian fungsi keamanan parameter:
Port 2222: Mengubah port SSH standar untuk mengurangi noise log dari botnet scanner otomatis.PermitRootLogin no: Menolak login langsung sebagai userroot. Sesi administrator harus dilakukan via user non-root dengan eskalasisudo.PasswordAuthentication no: Menghentikan total metode login berbasis kata sandi.PubkeyAuthOptions verify-required: Menolak login jika permintaan kunci FIDO2 tidak menyertakan flag validasi PIN (User Verification).MaxAuthTries 3: Menutup koneksi jika terjadi percobaan otentikasi gagal sebanyak 3 kali berturut-turut.ClientAliveInterval 300: Menutup koneksi SSH otomatis jika pengguna tidak aktif (idle) selama 5 menit (300 detik).
Langkah 5: Validasi Sintaks & Reload Daemon SSH
Sebelum menerapkan konfigurasi baru, uji sintaks file konfigurasi untuk menghindari terputusnya akses server akibat kesalahan ketik (syntax error):
sudo sshd -tJika tidak ada pesan kesalahan yang muncul, restart layanan OpenSSH:
sudo systemctl restart sshd4. Proteksi Intrusi Real-Time Menggunakan Fail2ban
Fail2ban bekerja sebagai agen keamanan latar belakang yang memantau berkas log autentikasi secara kontinu. Ketika pemindaian otomatis memicu batas kegagalan otentikasi yang ditentukan, Fail2ban secara dinamis menambahkan aturan pemblokiran IP pada tabel firewall (iptables atau nftables).
Instalasi & Konfigurasi Fail2ban
Pasang aplikasi Fail2ban pada server VPS:
sudo apt install -y fail2banBuat file konfigurasi lokal /etc/fail2ban/jail.local agar konfigurasi utama tidak ter-override saat update aplikasi:
sudo nano /etc/fail2ban/jail.localTambahkan skema proteksi berikut:
[DEFAULT]
bantime = 24h
findtime = 10m
maxretry = 3
banaction = iptables-multiport
backend = systemd
[sshd]
enabled = true
port = 2222
logpath = %(sshd_log)s
backend = %(sshd_backend)sPenjelasan konfigurasi:
bantime = 24h: Alamat IP penyerang diputus dan diblokir dari server selama 24 jam.findtime = 10m: Jendela waktu pemantauan kegagalan login (10 menit terakhir).maxretry = 3: Batas maksimal kegagalan otentikasi dalam durasifindtimesebelum penyerang diblokir.port = 2222: Mengarahkan pemantauan Fail2ban ke port custom SSH yang telah diubah pada langkah sebelumnya.
Aktifkan dan jalankan service Fail2ban:
sudo systemctl enable --now fail2ban
sudo fail2ban-client reload5. Network Hardening & Strategi Anti-Lockout
Konfigurasi Firewall UFW dengan Rate Limiting
Gunakan Uncomplicated Firewall (UFW) untuk mengatur kebijakan akses jaringan terbatas (least privilege access):
# Set Kebijakan Default Firewall
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Atur Rate Limiting pada Port SSH Custom
sudo ufw limit 2222/tcp comment 'Rate-limit SSH access'
# Izinkan Trafik Layanan Web (opsional)
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# Aktifkan Firewall
sudo ufw enablePerintah ufw limit 2222/tcp secara otomatis menolak koneksi dari IP yang melakukan percobaan koneksi sebanyak 6 kali atau lebih dalam waktu 30 detik pada tingkat kernel network stack.
Strategi Mitigasi Terkunci (Anti-Lockout)
Penerapan hardening ketat berisiko mengunci administrator keluar dari VPS (lockout). Terapkan protokol mitigasi ini:
- Sesi Terminal Tetap Aktif: Jangan pernah menutup jendela terminal utama yang sedang terhubung ke VPS saat mengubah konfigurasi SSH atau firewall. Buat jendela terminal baru untuk menguji koneksi.
- Redundansi Perangkat FIDO2: Daftarkan minimal dua perangkat hardware FIDO2 terpisah (kunci utama dan kunci cadangan) ke dalam file
~/.ssh/authorized_keys. Simpan kunci cadangan di lokasi fisik aman. - Akses Out-of-Band (OOB): Pastikan akses konsol darurat penyedia VPS (seperti Linode LISH, DigitalOcean Web Console, AWS Serial Console, atau VNC) tetap aktif dan kredensial aksesnya valid. Konsol OOB tidak terpengaruh oleh aturan SSH daemon atau pembokiran UFW/Fail2ban.
6. Pemantauan Log, Audit Keamanan & Prosedur Operasional
Pemeriksaan Pemblokiran & Pembebasan IP Fail2ban
Untuk melihat status proteksi jail SSH dan daftar IP yang sedang diblokir:
sudo fail2ban-client status sshdJika IP administrator secara tidak sengaja terblokir akibat kesalahan masukan PIN, lakukan pembebasan IP (unban) melalui konsol darurat VPS:
sudo fail2ban-client set sshd unbanip ALAMAT_IP_ADMINAnalisis Log Serangan SSH
Tampilkan 10 IP penyerang paling agresif yang mencoba melakukan serangan brute force pada server:
sudo grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | head -n 10Untuk sistem Linux yang menggunakan systemd journald:
sudo journalctl -u ssh -q | grep "Failed" | awk '{print $11}' | sort | uniq -c | sort -nr | head -n 10Audit Kriptografi Menggunakan ssh-audit
Lakukan pemindaian standar kriptografi pada daemon SSH VPS untuk memastikan tidak ada cipher atau algoritma pertukaran kunci yang usang (deprecated):
python3 -m pip install ssh-audit
ssh-audit -p 2222 IP_SERVER_VPS7. Checklist Keamanan SSH Server Production
| Parameter Keamanan | Setelan Direkomendasikan | Tujuan Keamanan |
|---|---|---|
| Password Authentication | PasswordAuthentication no | Menghilangkan vektor serangan kata sandi. |
| Direct Root Login | PermitRootLogin no | Mencegah pengambilalihan akun root secara langsung. |
| Hardware Key Enforce | PubkeyAuthOptions verify-required | Memaksa validasi PIN fisik hardware FIDO2. |
| Custom Port | Port 2222 (atau port acak >1024) | Menghindari noise pemindaian botnet otomatis. |
| Fail2ban Jail | bantime = 24h, maxretry = 3 | Memblokir IP agresif secara otomatis. |
| UFW Rate Limit | ufw limit 2222/tcp | Membatasi intensitas koneksi pada layer network. |
| Session Timeout | ClientAliveInterval 300 | Menutup sesi idle secara otomatis untuk mencegah hijacking. |
Kesimpulan
Pengamanan akses SSH pada VPS membutuhkan arsitektur pertahanan berlapis (defense-in-depth). Penggunaan passkey berbasis hardware FIDO2 (ed25519-sk) menutup celah kebocoran kunci privat dan serangan phising. Kombinasi parameter SSH daemon yang diperketat, pembatasan lalu lintas oleh UFW, serta mitigasi aktif dari Fail2ban memastikan infrastruktur server Linux terlindungi secara menyeluruh dari potensi ancaman brute force di lingkungan produksi.


