AizuDemy

Tutorial Hardening SSH VPS: Autentikasi Passkey FIDO2 & Fail2ban

Tutorial Hardening SSH VPS: Autentikasi Passkey FIDO2 & Fail2ban
๐ŸŽง
Dengarkan Artikel Ini
Suara AI Otomatis โ€ข 8 mnt baca baca
โšก TL;DR

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.
๐Ÿ“‹ Daftar Isi Materi Tutup โ–ด

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:

  1. 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.
  2. 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 libfido2 terinstal 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-tools

Untuk distro berbasis RHEL/Fedora/AlmaLinux:

sudo dnf install -y libfido2 libfido2-devel fido2-tools

Langkah 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_VPS

Atur hak akses direktori .ssh dan file authorized_keys di server VPS untuk mencegah eskalasi hak akses:

chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

Langkah 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.conf

Masukkan 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 no

Rincian fungsi keamanan parameter:

  • Port 2222: Mengubah port SSH standar untuk mengurangi noise log dari botnet scanner otomatis.
  • PermitRootLogin no: Menolak login langsung sebagai user root. Sesi administrator harus dilakukan via user non-root dengan eskalasi sudo.
  • 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 -t

Jika tidak ada pesan kesalahan yang muncul, restart layanan OpenSSH:

sudo systemctl restart sshd

4. 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 fail2ban

Buat file konfigurasi lokal /etc/fail2ban/jail.local agar konfigurasi utama tidak ter-override saat update aplikasi:

sudo nano /etc/fail2ban/jail.local

Tambahkan 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)s

Penjelasan 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 durasi findtime sebelum 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 reload

5. 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 enable

Perintah 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:

  1. 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.
  2. 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.
  3. 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 sshd

Jika 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_ADMIN

Analisis 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 10

Untuk sistem Linux yang menggunakan systemd journald:

sudo journalctl -u ssh -q | grep "Failed" | awk '{print $11}' | sort | uniq -c | sort -nr | head -n 10

Audit 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_VPS

7. Checklist Keamanan SSH Server Production

Parameter KeamananSetelan DirekomendasikanTujuan Keamanan
Password AuthenticationPasswordAuthentication noMenghilangkan vektor serangan kata sandi.
Direct Root LoginPermitRootLogin noMencegah pengambilalihan akun root secara langsung.
Hardware Key EnforcePubkeyAuthOptions verify-requiredMemaksa validasi PIN fisik hardware FIDO2.
Custom PortPort 2222 (atau port acak >1024)Menghindari noise pemindaian botnet otomatis.
Fail2ban Jailbantime = 24h, maxretry = 3Memblokir IP agresif secara otomatis.
UFW Rate Limitufw limit 2222/tcpMembatasi intensitas koneksi pada layer network.
Session TimeoutClientAliveInterval 300Menutup 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.

๐Ÿ“– Artikel Terkait