TDCTF Academy Logo TDCTF ACADEMY

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

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

  1. Gunakan passphrase pada private key - jangan pernah menyimpan private key tanpa passphrase.
  2. Rotasi kunci secara berkala - setidaknya setahun sekali atau setelah ada indikasi kompromi.
  3. Cabut akses segera saat pengguna meninggalkan organisasi - hapus public key dari ~/.ssh/authorized_keys atau dari pusat provisioning.
  4. Gunakan ssh-keygen -l -f untuk 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

  1. CA server menandatangani kunci publik user dengan private key CA.
  2. Server SSH dikonfigurasi untuk trust kunci publik CA (bukan kunci individu).
  3. 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.

PADA HALAMAN INI