SSH Security
Definisi
SSH (Secure Shell) adalah protokol jaringan kriptografi yang menyediakan remote login, eksekusi perintah jarak jauh, dan tunneling aman antara dua perangkat. SSH menggantikan protokol tidak aman seperti Telnet, rlogin, dan rsh yang mengirim data dalam bentuk teks polos (plaintext). SSH berjalan di port 22 TCP dan menggunakan model client-server.
SSH Protocol Versions
SSHv1 (1995)
SSH versi 1 adalah protokol awal yang sekarang dianggap tidak aman. Kerentanan utama:
- CRC-32 integrity check yang lemah - rentan terhadap serangan insertion attack
- Tidak ada perlindungan sesi setelah login
- Algoritma kriptografi usang
- EOL (End of Life) - semua implementasi modern seharusnya menonaktifkan SSHv1
SSHv2 (1996, distandarisasi 2006)
SSH versi 2 adalah protokol yang aman dan digunakan secara luas. Perbaikan utama:
- HMAC untuk integrity check yang lebih kuat
- Diffie-Hellman key exchange yang wajib
- Dukungan berbagai algoritma kriptografi modern
- Strict host key checking
- Session rekeying untuk PFS
Semua sistem operasi modern sudah menggunakan SSHv2 secara default. Jika masih ada yang mengaktifkan SSHv1, harus segera dinonaktifkan.
Key Types
SSH menggunakan pasangan kunci publik-privat untuk otentikasi. Berikut jenis kunci yang umum:
| Jenis | Algoritma | Ukuran | Keamanan | Kinerja |
|---|---|---|---|---|
| RSA | Rivest-Shamir-Adleman | 2048-4096 bit | Kuat (4096) | Sedang |
| ECDSA | Elliptic Curve DSA | 256-521 bit | Setara RSA 3072 (256-bit) | Cepat |
| Ed25519 | Edwards-curve DSA | 256 bit | Sangat kuat | Sangat cepat |
Ed25519 adalah pilihan terbaik untuk kunci SSH modern:
- Ukuran kecil (~68 byte public key)
- Tanda tangan cepat dan deterministik
- Keamanan tinggi (Curve25519)
- Didukung oleh OpenSSH 6.5+
RSA masih banyak digunakan dan kompatibel dengan sistem lama. Disarankan ukuran minimal 2048 bit, idealnya 4096 bit. ECDSA aman tetapi ada kekhawatiran tentang kurva NIST (backdoor potensial). Ed25519 tidak memiliki kekhawatiran tersebut.
Hardening sshd_config
Berkas konfigurasi utama SSH server adalah
/etc/ssh/sshd_config. Berikut rekomendasi hardening:
1. Disable Root Login
PermitRootLogin no
Mencegah login langsung sebagai root. Administrator harus login
sebagai user biasa, lalu menggunakan sudo atau
su. Ini membatasi serangan brute-force terhadap akun
root.
2. Key-Only Authentication
PasswordAuthentication no
PubkeyAuthentication yes
Matikan autentikasi password - hanya izinkan login dengan kunci publik. Password rentan terhadap brute-force, sedangkan kunci SSH secara praktis tidak bisa ditebak.
3. Change Port (Opsional)
Port 2222
Mengubah port default (22) ke port lain mengurangi serangan bot otomatis yang memindai port 22. Ini bukan langkah keamanan sesungguhnya (security through obscurity) tetapi mengurangi noise log.
4. AllowUsers / AllowGroups
AllowUsers alice bob charlie
AllowGroups ssh-users
Batasi user atau grup mana yang bisa login SSH. User yang tidak tercantum ditolak secara otomatis.
5. Disable Empty Passwords
PermitEmptyPasswords no
Pastikan akun dengan password kosong tidak bisa login.
6. Limit Authentication Retries
MaxAuthTries 3
MaxSessions 2
Batasi jumlah percobaan autentikasi untuk mencegah brute-force.
7. Idle Timeout
ClientAliveInterval 300
ClientAliveCountMax 0
Putuskan koneksi SSH yang idle setelah 5 menit.
8. Protocol Version
Protocol 2
Pastikan hanya SSHv2 yang diaktifkan.
9. Strong Ciphers and MACs
Ciphers [email protected],[email protected]
MACs hmac-sha2-512
KexAlgorithms curve25519-sha256,diffie-hellman-group-exchange-sha256
Contoh sshd_config Aman
Port 2222
Protocol 2
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers alice bob
MaxAuthTries 3
MaxSessions 2
ClientAliveInterval 300
ClientAliveCountMax 0
PermitEmptyPasswords no
Fail2ban
Fail2ban adalah tools keamanan yang memindai log
file (misalnya /var/log/auth.log) untuk mendeteksi pola
serangan brute-force. Ketika terdeteksi banyak percobaan login gagal
dari IP yang sama, fail2ban menambahkan aturan
iptables/nftables untuk memblokir IP tersebut
sementara.
Konfigurasi dasar untuk SSH:
[sshd]
enabled = true
port = ssh,maxretry = 3
bantime = 3600
findtime = 600
Parameter:
maxretry = 3: blokir setelah 3 kali gagalbantime = 3600: blokir selama 1 jamfindtime = 600: dalam jendela 10 menit
Fail2ban sangat efektif mengurangi percobaan brute-force dan membersihkan log dari percobaan otomatis.
SSH Audit
SSH audit adalah proses memeriksa konfigurasi SSH server untuk memastikan keamanan. Tools yang bisa digunakan:
ssh-audit (Python)
ssh-audit.py example.com
Tool ini secara otomatis memeriksa:
- Algoritma kunci host yang didukung
- Ciphers, MACs, dan KEX algorithms
- Level keamanan tiap algoritma (baik/warn/lemah)
- Versi protokol SSH
- Rekomendasi peningkatan
Lynis
Lynis adalah security auditing tool untuk Linux yang mencakup audit SSH detail:
lynis audit system
Lynis akan memeriksa sshd_config dan memberikan skor serta rekomendasi.
Manual Check
Cek langsung konfigurasi dengan:
sudo sshd -T
Perintah ini menampilkan konfigurasi efektif SSH (termasuk default) yang sedang digunakan.
Kesimpulan
Keamanan SSH adalah fondasi penting administrasi server. Beberapa langkah kunci: gunakan SSHv2 saja, pilih Ed25519 untuk kunci, terapkan key-only authentication, nonaktifkan root login, dan lindungi dengan fail2ban. Audit konfigurasi secara berkala dengan tools seperti ssh-audit untuk memastikan tidak ada algoritma lemah yang masih diaktifkan. Dengan kombinasi langkah-langkah ini, risiko serangan terhadap layanan SSH dapat diminimalkan secara signifikan.