Setiap hari, server Linux yang terhubung ke internet menjadi target ribuan percobaan login otomatis dari bot dan scanner jahat. Jika Anda pernah membuka log /var/log/auth.log pada server yang baru saja online beberapa jam, kemungkinan besar Anda akan menemukan puluhan bahkan ratusan percobaan login SSH yang gagal dari alamat IP asing. Fenomena ini disebut serangan brute force, dan tanpa perlindungan yang tepat, server Anda bisa menjadi korban berikutnya.
Bagi seorang sysadmin, DevOps engineer, atau bahkan pemilik VPS pribadi, mengamankan akses SSH bukan lagi sekadar opsi tambahan — ini adalah kebutuhan dasar. SSH adalah pintu utama menuju server Anda, dan jika pintu ini tidak dikunci dengan benar, seluruh infrastruktur yang ada di baliknya menjadi rentan: database, aplikasi web, file konfigurasi, hingga data pelanggan.
Artikel ini akan membahas secara lengkap dan praktis bagaimana melakukan hardening SSH melalui perubahan port default, menonaktifkan login root, serta memasang dan mengonfigurasi Fail2ban agar IP mencurigakan diblokir secara otomatis. Baik Anda pemula yang baru belajar mengelola VPS, maupun profesional yang ingin mereview best practice keamanan server, panduan ini disusun agar mudah diikuti langkah demi langkah.
Mengapa Keamanan SSH Itu Penting?
SSH (Secure Shell) adalah protokol standar untuk mengakses server Linux dari jarak jauh secara terenkripsi. Karena sifatnya yang esensial, SSH hampir selalu aktif dan dapat diakses dari internet — inilah yang membuatnya menjadi target favorit penyerang.
Beberapa risiko nyata jika SSH tidak diamankan dengan baik:
- Brute force attack: penyerang mencoba ribuan kombinasi username dan password secara otomatis menggunakan tools seperti Hydra atau Medusa.
- Credential stuffing: penggunaan kombinasi username/password yang bocor dari database lain.
- Resource exhaustion: banyaknya percobaan login dapat membebani CPU dan bandwidth server.
- Akses root langsung: jika login root diizinkan, penyerang yang berhasil menebak password langsung mendapatkan kontrol penuh atas server.
Analoginya sederhana: membiarkan port SSH default (22) terbuka dengan login root aktif dan tanpa proteksi tambahan seperti meninggalkan pintu rumah dengan kunci standar yang mudah ditiru, sambil menempelkan alamat rumah Anda di papan pengumuman kota. Cepat atau lambat, seseorang akan mencobanya.
Strategi Hardening SSH: Tiga Lapis Pertahanan
Pendekatan yang akan kita gunakan dalam panduan ini terdiri dari tiga lapis pertahanan yang saling melengkapi:
- Mengubah port SSH default — mengurangi visibilitas server dari scanner otomatis.
- Menonaktifkan root login — memaksa penyerang menebak dua hal sekaligus: username dan password.
- Memasang Fail2ban — memblokir otomatis IP yang melakukan percobaan login berulang kali.
Ketiga lapis ini tidak saling menggantikan, melainkan saling memperkuat. Mengubah port saja tidak cukup jika root login masih aktif. Menonaktifkan root login saja tidak akan menghentikan bot yang terus mencoba user lain. Kombinasi ketiganya adalah yang membuat server benar-benar tangguh.
Langkah 1: Mengubah Port SSH Default
Secara default, SSH berjalan di port 22. Karena port ini sangat umum diketahui, hampir semua scanner otomatis akan mengarahkan serangan ke port tersebut terlebih dahulu.
Langkah-langkah:
1. Buka file konfigurasi SSH
sudo nano /etc/ssh/sshd_config
2. Cari baris Port 22 dan ubah menjadi port lain
Disarankan menggunakan port di atas 1024 dan di bawah 65535, misalnya:
Port 2222
3. Simpan file, lalu restart layanan SSH
sudo systemctl restart sshd
4. Buka port baru di firewall (contoh dengan UFW)
sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp
Penting: Sebelum menutup port 22, pastikan Anda sudah menguji koneksi ke port baru menggunakan sesi terminal terpisah, agar tidak terkunci dari server jika terjadi kesalahan konfigurasi.
ssh -p 2222 user@ip_server
Mengganti port tidak membuat server 100% aman — ini disebut security through obscurity — namun secara signifikan mengurangi jumlah percobaan login otomatis dari bot yang hanya menyasar port 22.
Langkah 2: Menonaktifkan Root Login
Login langsung sebagai root melalui SSH sangat berisiko. Jika kredensial root berhasil ditebak, penyerang langsung memiliki akses penuh tanpa perlu eskalasi privilege.
Langkah-langkah:
1. Buat user baru dengan hak akses sudo (jika belum ada)
sudo adduser namauser
sudo usermod -aG sudo namauser
2. Edit kembali file sshd_config
sudo nano /etc/ssh/sshd_config
3. Cari baris berikut dan ubah nilainya
PermitRootLogin no
4. Aktifkan juga otentikasi berbasis key (opsional tapi sangat direkomendasikan)
PubkeyAuthentication yes
PasswordAuthentication no
Menonaktifkan PasswordAuthentication mengharuskan login menggunakan SSH key, yang jauh lebih aman dibandingkan password karena tidak bisa ditebak melalui brute force konvensional.
5. Restart layanan SSH
sudo systemctl restart sshd
Studi Kasus Sederhana
Bayangkan sebuah VPS baru yang dipasang tanpa hardening apa pun. Dalam 24 jam pertama, log menunjukkan lebih dari 300 percobaan login sebagai root dari berbagai IP. Setelah PermitRootLogin no diterapkan dan port diubah ke 2222, jumlah percobaan login yang tercatat turun drastis karena scanner otomatis tidak lagi menemukan target yang familiar.
Langkah 3: Instalasi dan Konfigurasi Fail2ban
Fail2ban adalah aplikasi yang memantau file log (seperti auth.log) dan secara otomatis memblokir IP yang menunjukkan pola percobaan login gagal berulang kali, menggunakan firewall seperti iptables atau nftables.
Instalasi Fail2ban
Untuk Debian/Ubuntu:
sudo apt update
sudo apt install fail2ban -y
Untuk CentOS/RHEL/Rocky Linux:
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
Konfigurasi jail.local
Fail2ban menggunakan file konfigurasi utama jail.conf, namun praktik terbaik adalah tidak mengedit file ini langsung. Sebagai gantinya, buat salinan sebagai jail.local agar konfigurasi tidak tertimpa saat update.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Cari bagian [sshd] dan sesuaikan seperti berikut:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 600
bantime = 3600
Penjelasan parameter:
- enabled: mengaktifkan jail untuk SSH.
- port: sesuaikan dengan port SSH yang sudah diubah sebelumnya.
- maxretry: jumlah maksimal percobaan gagal sebelum IP diblokir (di sini 5 kali).
- findtime: rentang waktu (dalam detik) untuk menghitung percobaan gagal (600 detik = 10 menit).
- bantime: durasi pemblokiran IP (3600 detik = 1 jam). Bisa diubah menjadi
-1untuk blokir permanen.
Mengaktifkan dan Menjalankan Fail2ban
sudo systemctl enable fail2ban
sudo systemctl restart fail2ban
Memeriksa Status Fail2ban
sudo fail2ban-client status sshd
Output akan menampilkan jumlah IP yang sedang diblokir, jumlah total percobaan gagal, dan daftar IP yang di-ban.
Simulasi Serangan yang Diblokir
Untuk menguji apakah Fail2ban bekerja, Anda bisa mencoba login SSH dengan password salah sebanyak maxretry kali dari mesin lain. Setelah batas tercapai, Fail2ban akan otomatis menambahkan aturan block di firewall, dan Anda bisa memverifikasinya dengan:
sudo iptables -L -n | grep DROP
atau untuk sistem berbasis nftables:
sudo fail2ban-client status sshd
IP penyerang akan muncul dalam daftar “Banned IP list”, menandakan koneksi dari IP tersebut telah diblokir secara otomatis oleh sistem.
Best Practice Tambahan
Selain tiga langkah utama di atas, berikut beberapa praktik terbaik yang bisa meningkatkan keamanan server lebih jauh:
- Gunakan SSH key, bukan password, sebagai metode autentikasi utama.
- Batasi user yang boleh login SSH dengan directive
AllowUsers namauserdisshd_config. - Aktifkan two-factor authentication (2FA) menggunakan Google Authenticator PAM module untuk lapisan keamanan tambahan.
- Update sistem secara rutin dengan
apt update && apt upgradeuntuk menutup celah keamanan yang sudah diketahui. - Monitor log secara berkala menggunakan tools seperti
logwatchatau dashboard monitoring terpusat. - Backup konfigurasi sebelum melakukan perubahan besar, agar mudah rollback jika terjadi kesalahan.
Kesalahan yang Sering Terjadi
1. Menutup port 22 sebelum menguji port baru
- Penyebab: terburu-buru menerapkan firewall rule tanpa verifikasi.
- Dampak: sysadmin terkunci total dari server (lockout).
- Solusi: selalu buka sesi terminal terpisah dan uji koneksi ke port baru sebelum menutup port lama.
2. Lupa menyesuaikan port di jail.local Fail2ban
- Penyebab: mengubah port SSH tanpa memperbarui konfigurasi Fail2ban.
- Dampak: Fail2ban tidak memonitor port yang benar sehingga proteksi tidak berjalan.
- Solusi: pastikan parameter
portdijail.localsesuai dengan port SSH aktual.
3. Menonaktifkan password authentication tanpa key yang valid
- Penyebab: langsung set
PasswordAuthentication notanpa memastikan SSH key sudah terpasang dan berfungsi. - Dampak: kehilangan akses sepenuhnya ke server.
- Solusi: uji login dengan key terlebih dahulu sebelum menonaktifkan password.
4. Bantime terlalu singkat
- Penyebab: konfigurasi default yang tidak disesuaikan dengan kebutuhan.
- Dampak: penyerang bisa kembali mencoba setelah blokir berakhir dalam waktu singkat.
- Solusi: sesuaikan
bantimesesuai tingkat risiko, atau gunakanbantime.incrementuntuk menambah durasi blokir pada pelanggaran berulang.
Tips dan Rekomendasi
- Gunakan kombinasi port non-default + key authentication + Fail2ban sebagai standar minimum untuk semua server produksi.
- Untuk lingkungan enterprise, pertimbangkan solusi tambahan seperti VPN atau bastion host sehingga SSH tidak perlu terekspos langsung ke internet publik.
- Integrasikan Fail2ban dengan sistem notifikasi (email atau webhook) agar Anda mendapat peringatan real-time saat terjadi pemblokiran.
- Audit konfigurasi keamanan server secara berkala, minimal setiap tiga bulan.

Kesimpulan
Mengamankan server Linux dari serangan brute force bukanlah pekerjaan sekali jadi, melainkan proses berkelanjutan yang dimulai dari langkah-langkah fundamental: mengganti port SSH default, menonaktifkan login root, dan memasang Fail2ban untuk pemblokiran otomatis. Ketiga langkah ini, jika diterapkan bersama dengan praktik keamanan tambahan seperti autentikasi berbasis key dan pembatasan user, akan membuat server Anda jauh lebih tangguh terhadap upaya akses ilegal.
Poin penting yang perlu diingat:
- Ubah port SSH default untuk mengurangi eksposur terhadap scanner otomatis.
- Nonaktifkan root login dan gunakan user dengan hak sudo.
- Pasang dan konfigurasikan Fail2ban dengan parameter yang sesuai kebutuhan server Anda.
- Selalu uji setiap perubahan sebelum menerapkannya secara permanen.
Sudah menerapkan hardening SSH dan Fail2ban di server Anda? Bagikan pengalaman atau kendala yang Anda temui di kolom komentar di bawah!
Jika artikel ini bermanfaat, jangan ragu untuk membagikannya ke rekan sysadmin atau komunitas Anda. Jangan lupa juga untuk membaca artikel terkait lainnya seputar keamanan server dan infrastruktur IT di website ini.
Frequently Asked Questions (FAQ)
Pertanyaan: Apakah mengganti port SSH default benar-benar efektif? Jawaban: Mengganti port SSH secara signifikan mengurangi jumlah percobaan login otomatis dari bot dan scanner yang hanya menargetkan port 22, meskipun bukan solusi keamanan yang berdiri sendiri.
Pertanyaan: Apakah aman menonaktifkan login root sepenuhnya? Jawaban: Ya, sangat disarankan. Menonaktifkan root login memaksa penyerang menebak username dan password sekaligus, serta memudahkan audit karena setiap aksi tercatat atas nama user spesifik.
Pertanyaan: Berapa lama sebaiknya durasi bantime di Fail2ban? Jawaban: Tergantung tingkat risiko server, namun umumnya 1 jam hingga 24 jam sudah cukup efektif. Untuk server dengan data sensitif, blokir permanen (bantime = -1) bisa dipertimbangkan.
Pertanyaan: Apakah Fail2ban bisa memblokir serangan selain SSH? Jawaban: Bisa. Fail2ban mendukung banyak jail untuk layanan lain seperti Nginx, Apache, Postfix, dan FTP, selama log aktivitasnya tersedia dan filter yang sesuai dikonfigurasi.
Pertanyaan: Bagaimana jika saya terkunci dari server setelah mengubah konfigurasi SSH? Jawaban: Sebagian besar penyedia VPS menyediakan akses konsol darurat (console/VNC) melalui panel kontrol yang bisa digunakan untuk memperbaiki konfigurasi tanpa memerlukan koneksi SSH.
Sudah coba terapkan langkah-langkah di atas di server Anda? Tulis pengalaman, pertanyaan, atau kendala Anda di kolom komentar
mari berdiskusi bersama! Jika artikel ini membantu, bagikan ke rekan atau komunitas sysadmin Anda, dan jangan lupa untuk terus mengikuti artikel-artikel terbaru seputar Linux, networking, dan cybersecurity di website ini.