SSH Hardening
Pendahuluan
SSH (Secure Shell) adalah protokol utama untuk administrasi jarak jauh server Linux. Karena sering menjadi entry point utama - baik oleh administrator maupun penyerang - hardening sisi server sshd sangat krusial. Halaman ini berfokus pada server-side SSH hardening (sshd), berbeda dengan konfigurasi klien SSH yang dibahas di bagian lain.
Hardening sshd_config
File konfigurasi utama SSH daemon terletak di
/etc/ssh/sshd_config. Berikut parameter-parameter kunci
yang wajib di-harden:
Protokol dan Otentikasi
# Hanya gunakan SSH Protocol 2 (Protocol 1 sudah deprecated dan rawan)
Protocol 2
# Nonaktifkan login root langsung
PermitRootLogin no
# Wajibkan autentikasi berbasis kunci, nonaktifkan password
PasswordAuthentication no
PubkeyAuthentication yes
AuthenticationMethods publickey
# Batasi user yang diizinkan login SSH
AllowUsers admin user1 user2
# Atau gunakan AllowGroups jika lebih praktis
AllowGroups ssh-users
Timeout dan Rate Limiting
# Batasi percobaan autentikasi maksimal
MaxAuthTries 3
# Kirim keepalive tiap 300 detik, putuskan koneksi jika 3 kali timeout berturut-turut
ClientAliveInterval 300
ClientAliveCountMax 3
# Batasi jumlah sesi simultan per koneksi
MaxSessions 2
Port dan Binding
# Ubah port default 22 ke port non-standar (contoh: 2222)
Port 2222
# (Opsional) Bind hanya ke IP tertentu
ListenAddress 192.168.1.100
Catatan: Mengubah port bukanlah security sejati (security through obscurity), tetapi efektif mengurangi noise dari automated scanner dan brute-force bot.
Fitur Lain yang Perlu Dinonaktifkan
# Nonaktifkan forwarding yang tidak diperlukan
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
# Nonaktifkan empty password
PermitEmptyPasswords no
# Nonaktifkan login dengan host-based authentication (rentan spoofing)
HostbasedAuthentication no
IgnoreRhosts yes
# Log level verbose untuk mendeteksi aktivitas mencurigakan
LogLevel VERBOSE
# Batasi algoritma kriptografi hanya yang kuat
KexAlgorithms curve25519-sha256,diffie-hellman-group-exchange-sha256
Ciphers [email protected],[email protected]
Setelah perubahan, selalu restart sshd:
sudo sshd -t # Test konfigurasi
sudo systemctl restart sshd
Key Management
Jenis Kunci yang Direkomendasikan
| Tipe Kunci | Minimal Bit | Keterangan |
|---|---|---|
| Ed25519 | 256 | Paling direkomendasikan - cepat, aman, dan future-proof |
| RSA | 4096 | Fallback untuk klien lama, pastikan > 2048 bit |
| ECDSA | 256 | Aman jika menggunakan kurva NIST P-256 |
Contoh pembuatan kunci:
# Ed25519 (rekomendasi utama)
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C "admin@server"
Praktik Terbaik Key Management
- Gunakan passphrase pada private key - jangan pernah menyimpan private key tanpa passphrase.
- Rotasi kunci secara berkala - setidaknya setahun sekali atau setelah ada indikasi kompromi.
- Cabut akses segera saat pengguna
meninggalkan organisasi - hapus public key dari
~/.ssh/authorized_keysatau dari pusat provisioning. - Gunakan
ssh-keygen -l -funtuk memverifikasi fingerprint kunci publik sebelum menambahkannya ke server.
Fail2ban untuk SSH
Fail2ban adalah intrusion prevention framework yang memblokir alamat IP setelah mendeteksi pola brute-force di log.
Instalasi:
sudo apt install fail2ban # Debian/Ubuntu
sudo yum install fail2ban # RHEL/CentOS
Konfigurasi dasar untuk SSH (buat
/etc/fail2ban/jail.local):
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600 # 1 jam
findtime = 600 # dalam 10 menit
Jika SSH menggunakan custom port, sesuaikan
port = 2222.
SSH Certificate Authority (SSH CA)
SSH CA memungkinkan otentikasi terpusat tanpa perlu menyebarkan kunci publik ke setiap server secara manual.
Cara Kerja
- CA server menandatangani kunci publik user dengan private key CA.
- Server SSH dikonfigurasi untuk trust kunci publik CA (bukan kunci individu).
- User cukup menunjukkan sertifikat yang sudah ditandatangani untuk login.
Konfigurasi Sisi Server
# Di /etc/ssh/sshd_config - arahkan ke kunci publik CA
TrustedUserCAKeys /etc/ssh/ca.pub
# Di /etc/ssh/ca.pub - berisi public key dari SSH CA
Keuntungan SSH CA
- Centralized access control - cukup revoke sertifikat, tidak perlu menyentuh setiap server.
- Key rotation - user tidak harus menyebarkan ulang kunci publik.
- Validity period - sertifikat bisa diberi masa berlaku (misalnya 24 jam) untuk mengurangi risiko jika kunci bocor.
Audit Konfigurasi SSH dengan ssh-audit
ssh-audit adalah alat open-source untuk mengaudit konfigurasi SSH server. Alat ini memeriksa algoritma kriptografi yang didukung, menandai algoritma weak atau deprecated, dan memberikan rekomendasi peningkatan.
Penggunaan:
# Install
git clone https://github.com/jtesta/ssh-audit.git
cd ssh-audit
# Audit server sendiri
python3 ssh-audit.py localhost
# Audit server jarak jauh
python3 ssh-audit.py 192.168.1.100 -p 2222
Contoh output:
- Warnai algoritma berbahaya (merah) - segera nonaktifkan
- Warnai algoritma lemah (kuning) - rencanakan migrasi
- Warnai algoritma aman (hijau) - pertahankan
Ringkasan Praktik Terbaik
| Area | Rekomendasi |
|---|---|
| Protokol | Wajib Protocol 2, nonaktifkan Protocol 1 |
| Otentikasi | Password-based login dinonaktifkan, wajib public key |
| Login Root | Nonaktifkan langsung, gunakan sudo via user
biasa |
| Rate Limiting | MaxAuthTries 3, fail2ban untuk
brute-force protection |
| Kriptografi | Hanya algoritma modern (Ed25519, Curve25519, AES-GCM) |
| Monitoring | Audit berkala dengan ssh-audit dan pantau
/var/log/auth.log |
| Akses | Gunakan AllowUsers/AllowGroups
untuk whitelist user |
Dengan menerapkan langkah-langkah di atas secara konsisten, risiko unauthorized access melalui SSH dapat diminimalkan secara signifikan.