Hardening Dasar Server Linux: Mengganti Port SSH untuk Mengurangi Brute Force
Pendahuluan
Kalau kamu baru saja deploy server Linux (VPS atau cloud instance), ada satu fakta pahit yang hampir pasti terjadi: port SSH 22 akan langsung diserang brute force. Bahkan dalam hitungan menit setelah server online, bot otomatis dari berbagai penjuru dunia sudah mulai coba login pakai username-password random.
Kenapa bisa begitu? Karena port 22 adalah default SSH, dan bot attacker hidup dari asumsi default. Mereka tidak peduli server kamu penting atau tidak—yang penting bisa ditembus.
Salah satu langkah hardening paling dasar (dan murah secara effort) adalah mengganti port SSH. Ini bukan solusi absolut, tapi sangat efektif untuk mengurangi noise serangan dan memperkecil permukaan attack.
Fase Pengintaian: Port Scanning dengan Nmap
Sebelum ngoprek server, kita buktikan dulu satu hal: port 22 memang kelihatan dari luar.
Dari mesin lokal kamu (bukan dari server itu sendiri), jalankan:
nmap -p 22 <IP_SERVER>Contoh:
nmap -p 22 103.xxx.xxx.xxxKalau hasilnya seperti ini:
22/tcp open ssh
Artinya jelas: SSH kamu terbuka lebar di port default.

Ini adalah informasi yang sama persis dengan yang dilihat attacker. Sekarang kita masuk ke fase pengamanan.
Instalasi Firewall (UFW)
UFW (Uncomplicated Firewall) adalah firewall favorit banyak sysadmin Linux karena simple, readable, dan nggak ribet.
Install UFW
Di Ubuntu / Debian:
sudo apt update
sudo apt install ufw -yCek status awal:
sudo ufw statusBiasanya masih inactive.
Skenario Testing: SSH Sebelum & Sesudah UFW
Sebelum UFW Aktif
Pastikan kamu bisa SSH normal:
ssh user@<IP_SERVER>Kalau bisa login, lanjut.
Aktifkan UFW (Masih di Port 22)
Izinkan SSH default dulu:
sudo ufw allow sshAtau eksplisit:
sudo ufw allow 22/tcpAktifkan UFW:
sudo ufw enableCek ulang:
sudo ufw statusSekarang coba SSH lagi dari lokal. Harusnya masih bisa masuk.
Kalau di tahap ini kamu sudah terkunci, berarti ada yang salah. Jangan lanjut sebelum beres.
Mengganti Port SSH
Sekarang bagian inti dari hardening.
Edit Konfigurasi SSH
Buka file konfigurasi SSH:
sudo nano /etc/ssh/sshd_configCari baris:
#Port 22Ubah jadi misalnya:
Port 2222Tips:
- Hindari port umum (22, 80, 443)
- Gunakan port >1024
- Jangan pakai port random yang nanti kamu sendiri lupa
PENTING: Allow Port Baru di UFW
Ini bagian paling krusial.
Sebelum restart SSH, WAJIB izinkan port baru di UFW:
sudo ufw allow 2222/tcpCek:
sudo ufw statusPastikan 22 dan 2222 sama-sama masih allowed untuk sementara.
Kalau kamu restart SSH tanpa allow port baru, kemungkinan besar:
kamu akan terkunci dari server (lockout)
Restart Service SSH
Setelah semuanya siap:
sudo systemctl restart sshAtau:
sudo systemctl restart sshdSekarang, jangan tutup session SSH lama dulu.
Dari terminal baru, coba login:
ssh -p 2222 user@<IP_SERVER>Kalau berhasil:
- Kamu aman
- Baru hapus rule port 22
sudo ufw delete allow 22/tcpProteksi Tambahan: Fail2Ban sebagai Satpam Otomatis
Meskipun kamu sudah mengganti port SSH, service SSH tetap bisa terdeteksi oleh Nmap jika dilakukan scanning yang cukup agresif. Artinya, brute force masih mungkin terjadi—hanya saja jumlahnya jauh berkurang.
Di sinilah Fail2Ban berperan sebagai satpam otomatis.
Secara konsep, Fail2Ban bekerja seperti ini:
- Memantau log service (contohnya
/var/log/auth.log) - Mendeteksi pola gagal login berulang
- Jika melewati ambang batas → IP langsung di-ban via firewall (iptables/UFW)
Dengan kata lain, bot boleh coba-coba, tapi cuma sebentar.
Instalasi Fail2Ban
sudo apt install fail2ban -ySetelah terinstal, service biasanya langsung aktif:
sudo systemctl status fail2banKonfigurasi Dasar: jail.local
Fail2Ban tidak disarankan diedit langsung dari jail.conf. Best practice-nya adalah membuat jail.local.
sudo nano /etc/fail2ban/jail.localContoh konfigurasi minimal untuk SSH di port baru:
[sshd]
enabled = true
port = 2222
logpath = /var/log/auth.log
maxretry = 5
findtime = 10m
bantime = 1hPenjelasan singkat:
- maxretry: maksimal gagal login
- findtime: rentang waktu percobaan
- bantime: durasi IP diblokir
Artinya: 5 kali gagal login dalam 10 menit → IP di-ban 1 jam.
Restart Fail2Ban:
sudo systemctl restart fail2banSimulasi Kasus: Ada yang Maksa Login SSH
Misalnya ada attacker yang mencoba brute force ke server kamu di port 2222.
Di log SSH (/var/log/auth.log), kamu akan melihat entri seperti:
Jan 15 13:02:41 server sshd[1823]: Failed password for invalid user admin from 185.225.xxx.xxx port 53122 ssh2
Jan 15 13:02:44 server sshd[1823]: Failed password for invalid user root from 185.225.xxx.xxx port 53122 ssh2
Jan 15 13:02:47 server sshd[1823]: Failed password for invalid user test from 185.225.xxx.xxx port 53122 ssh2Fail2Ban membaca pola ini.
Setelah melewati batas maxretry, log Fail2Ban (/var/log/fail2ban.log) akan mencatat:
2026-01-15 13:02:49,112 fail2ban.actions [1823]: NOTICE [sshd] Ban 185.225.xxx.xxxArtinya:
- IP attacker sudah resmi diblokir
- Percobaan login berikutnya langsung mental
Cek Status & IP yang Terkena Ban
Untuk melihat status jail SSH:
sudo fail2ban-client status sshdOutput biasanya seperti:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 7
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 3
`- Banned IP list: 185.225.xxx.xxx
Kalau perlu membuka blokir manual:
sudo fail2ban-client set sshd unbanip 185.225.xxx.xxxCatatan Penting
Fail2Ban bukan pengganti firewall atau SSH key dan Fail2Ban bekerja paling efektif jika dikombinasikan dengan SSH key-based authentication, Disable login root dan Rate limiting firewall.
Namun untuk level hardening dasar, Fail2Ban sudah sangat worth it.
Penutup
Hardening server Linux tidak selalu harus dimulai dari konfigurasi yang rumit atau mahal. Mengganti port SSH, mengaktifkan firewall, dan menambahkan Fail2Ban sudah cukup untuk menyingkirkan mayoritas serangan otomatis yang beredar di internet. Dengan langkah-langkah dasar ini, kamu mengubah server dari target empuk menjadi sistem yang lebih disiplin, lebih tenang log-nya, dan lebih aman untuk dikembangkan ke tahap security berikutnya. Ingat, keamanan adalah proses berkelanjutan—mulai dari dasar yang benar adalah keputusan paling rasional.
Referensi
Berikut ini adalah beberapa dokumen resmi dan sumber yang berguna jika kamu ingin mempelajari lebih lanjut:
