Episode ini mengamankan akses remote DragonFlyBSD: konfigurasi sshd_config dengan kunci ed25519, menonaktifkan login root dan password, pembuatan kunci dengan ssh-keygen, tunneling, serta hardening dengan UseDNS no, MaxAuthTries, AllowUsers, dan fail2ban.

Di episode 12 sebelumnya kalian sudah memasang firewall pf dan ipfw untuk menjaga gerbang jaringan. Tapi ada satu pintu yang hampir selalu terbuka di setiap server: SSH. Port 22 adalah target serangan paling umum di internet — bot memindai, mencoba password, dan membanjiri log. Episode ini mengubah SSH dari titik lemah menjadi titik kuat.
Bayangkan SSH sebagai pintu belakang kantor yang hanya bisa dibuka dengan kunci khusus (ed25519). Episode ini mengajarkan: mengganti kunci yang mudah ditiru (password) dengan kunci yang praktis mustahil dipalsukan, menutup akses untuk akun berisiko tinggi (root), lalu memasang pengawas (fail2ban) yang mengusir orang yang terlalu sering mengetuk pintu.
File konfigurasi utama adalah /etc/ssh/sshd_config. Hardening dimulai dengan menonaktifkan otentikasi yang lemah dan menonaktifkan login root:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
ChallengeResponseAuthentication noPermitRootLogin no memaksa semua login memakai user biasa (lalu doas/su untuk privilege). PasswordAuthentication no menonaktifkan password — hanya kunci publik yang diterima. Kombinasi inilah yang membuat brute-force password menjadi sia-sia.
Pertama, buat kunci ed25519 di sisi klien:
ssh-keygen -t ed25519 -a 100
ssh-copy-id dewi@server-t ed25519 memilih algoritma kunci paling modern, -a 100 memperkuat KDF. ssh-copy-id menyalin kunci publik ke ~/.ssh/authorized_keys di server. Setelah verifikasi kunci bekerja, barulah aktifkan PasswordAuthentication no.
Dua setting yang mempersempit siapa yang boleh masuk:
MaxAuthTries 3
UseDNS no
AllowUsers dewi raka
AllowGroups wheelMaxAuthTries 3 membatasi percobaan otentikasi sebelum koneksi diputus. UseDNS no mematikan reverse-DNS lookup yang lambat dan tidak perlu. AllowUsers dan AllowGroups membatasi user/group yang boleh login — deny-by-default untuk akses SSH.
Warning
Sebelum menonaktifkan password dan root login, pastikan (1) kunci publik sudah terpasang dan bisa login, dan (2) kalian punya akses out-of-band (konsol, IPMI) sebagai jaring pengaman. Server tanpa pintu darurat adalah kecelakaan yang menunggu terjadi.
Setelah mengubah konfigurasi, validasi dan restart:
sshd -t
service sshd restartsshd -t memeriksa syntax konfigurasi tanpa memuatnya — kebiasaan wajib sebelum restart di server production.
SSH juga bisa menjadi pipa terenkripsi untuk layanan lain. Port forwarding meneruskan port lokal ke port di sisi lain:
ssh -L 8080:localhost:80 dewi@server
ssh -L 5432:db.internal:5432 dewi@serverPerintah pertama membuka port 8080 di mesin lokal yang diteruskan ke port 80 di server — mengakses aplikasi web internal tanpa membuka port di firewall. Baris kedua meneruskan ke host ketiga (db.internal) — contoh nyata akses database yang tidak pernah terekspos ke internet.
Meskipun password nonaktif, bot tetap bisa membanjiri log dan mencoba user lain. fail2ban memantau log dan memblokir IP yang menunjukkan pola mencurigakan:
pkg install py311-fail2banKonfigurasinya berada di /etc/fail2ban/. Aktifkan jail untuk sshd, dan fail2ban akan otomatis memblokir IP yang gagal login berkali-kali:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5Dengan pf sebagai firewall, fail2ban bisa memblokir IP langsung di ruleset pf — kombinasi yang sangat efektif dan ringan.
Di episode 13 ini kalian telah mengamankan akses remote DragonFlyBSD: memperkuat sshd_config dengan kunci ed25519, menonaktifkan root dan password login, membuat kunci dengan ssh-keygen, tunneling lewat port forwarding, serta hardening dengan UseDNS no, MaxAuthTries, AllowUsers, dan fail2ban.
Inti yang harus dibawa pulang:
PermitRootLogin no + PasswordAuthentication no adalah dua baris yang paling berdampak pada keamanan SSH.ssh-keygen -t ed25519 -a 100 dan pasang dengan ssh-copy-id.UseDNS no, MaxAuthTries 3, AllowUsers, dan AllowGroups mempersempit permukaan serangan.ssh -L) mengakses layanan internal tanpa membuka port di firewall.Di episode 14 selanjutnya kita mengamankan lapisan enkripsi: TLS, OpenSSL & certificates. Kalian akan membangkitkan key, CSR, dan cert dengan openssl req dan openssl verify, mengelola ca-certificates, lalu mendapatkan sertifikat Let's Encrypt dengan acme-client atau acme.sh serta memahami dasar PKI.