Cara mengamankan SSH di VPS agar tidak dihack
Pelajari cara memperkuat keamanan SSH pada VPS dengan menonaktifkan login root dan password. Gunakan SSH key serta Fail2ban untuk mencegah serangan brute force.
Mengapa SSH adalah hal pertama yang harus diperkuat
SSH adalah cara Anda mengontrol server, sehingga menjadi target utama bagi setiap penyerang. Begitu VPS online, pemindai akan mulai menebak nama pengguna dan kata sandi pada port 22. Anda dapat melihat aktivitas ini di log dalam hitungan menit. Memperkuat SSH berarti menghilangkan elemen yang dapat ditebak: matikan login kata sandi sepenuhnya, matikan login root, dan hanya izinkan kunci kriptografi. Setelah dilakukan, upaya penebakan terus-menerus tidak akan berhasil karena tidak ada kata sandi yang bisa ditemukan.
Langkah ini mengasumsikan SSH Anda sudah berfungsi. Jika Anda dapat masuk, Anda dapat memperkuatnya. Lakukan langkah-langkah secara berurutan dan biarkan sesi saat ini tetap terbuka hingga sesi baru berhasil masuk, agar kesalahan tidak menyebabkan Anda terkunci dari sistem.
Langkah 1: Pastikan autentikasi kunci berfungsi terlebih dahulu
Autentikasi kunci mengganti kata sandi dengan pasangan kunci: kunci privat yang tetap berada di komputer Anda dan kunci publik yang Anda pasang di server. Server membuktikan bahwa Anda memegang kunci privat tanpa kunci tersebut meninggalkan mesin Anda. Sebelum menonaktifkan kata sandi, pastikan kunci berfungsi agar Anda tidak terkunci dari sistem.
Pada komputer Anda, buat kunci jika Anda belum memilikinya:
ssh-keygen -t ed25519Salin bagian publik ke server:
ssh-copy-id user@your-serverKemudian buka sesi SSH baru. Jika Anda dapat masuk tanpa diminta kata sandi, kunci Anda berfungsi dan aman untuk menonaktifkan kata sandi. Jika Anda baru mengenal kunci atau menggunakan lebih dari satu komputer, dasar-dasar manajemen kunci SSH menjelaskan model lengkapnya: satu kunci per perangkat, izin yang diminta oleh sshd, dan cara mencabut kunci jika laptop hilang.
Step 2: Perkuat sshd dengan file drop-in
Jangan mengedit /etc/ssh/sshd_config secara langsung. Ubuntu 24.04 membaca file drop-in dari /etc/ssh/sshd_config.d/. Menggunakan file kecil di direktori tersebut lebih bersih, tetap ada setelah pembaruan paket, dan mudah dihapus jika terjadi kesalahan. Nama file sangat penting: sshd akan menggunakan nilai pertama yang dibaca untuk setiap pengaturan. Ubuntu cloud images menyertakan 50-cloud-init.conf dengan PasswordAuthentication yes di direktori ini. Beri nama file Anda 00- agar diurutkan sebelum file tersebut dan menjadi prioritas; file 99- akan kalah secara diam-diam. Buat file baru:
sudo nano /etc/ssh/sshd_config.d/00-hardening.confMasukkan ini ke dalam file:
# Key-only login: no passwords to guess.
PasswordAuthentication no
KbdInteractiveAuthentication no
# No direct root login. Log in as your user, then use sudo.
PermitRootLogin noSetiap baris menutup celah keamanan. PasswordAuthentication no adalah yang paling utama: dengan menonaktifkan password, serangan brute-force tidak memiliki target untuk dicoba. KbdInteractiveAuthentication no menutup jalur kedua berbasis password. PermitRootLogin no berarti penyerang harus mengetahui username Anda dan memiliki kunci Anda, tidak hanya menargetkan satu akun, root, yang ada di setiap sistem.
Step 3: Uji konfigurasi, lalu muat ulang
Periksa konfigurasi untuk memastikan tidak ada kesalahan sebelum diterapkan. Hal ini mencegah kesalahan pengetikan yang dapat merusak layanan:
sudo sshd -tJika tidak ada output yang muncul, konfigurasi sudah valid. Muat ulang SSH:
sudo systemctl reload sshKemudian periksa pengaturan yang digunakan oleh sshd. Hal ini berguna untuk mendeteksi jika ada file drop-in yang kalah prioritas dibandingkan file lain:
sudo sshd -T | grep -Ei 'passwordauthentication|permitrootlogin'Keduanya harus menampilkan no. Sekarang, tanpa menutup sesi saat ini, buka sesi baru dari terminal lain. Jika Anda berhasil masuk menggunakan kunci Anda, proses selesai. Jika terjadi kesalahan, sesi pertama Anda masih terbuka untuk melakukan perbaikan. Metode ini adalah jaring pengaman, jadi jangan pernah melewatkannya.
Step 4: Port non-standar opsional
Memindahkan SSH dari port 22 ke port seperti 2222 tidak meningkatkan keamanan secara nyata, karena penyerang yang gigih akan memindai semua port. Langkah ini hanya mengurangi kebisingan log, karena sebagian besar pemindai otomatis hanya mencoba port 22. Jika Anda menginginkannya, tambahkan Port 2222 ke dalam file konfigurasi Anda, izinkan port baru tersebut di firewall, lalu jalankan sudo systemctl daemon-reload && sudo systemctl restart ssh.socket dan hubungkan menggunakan ssh -p 2222. Pada Ubuntu 24.04, ssh.socket mengelola port yang mendengarkan (listening port), sehingga perintah reload ssh biasa akan membiarkan sshd tetap berada di port 22; Anda harus memulai ulang socket untuk menerapkan port baru tersebut. Anggap langkah ini sebagai kerapian sistem, bukan sebagai perlindungan.
Step 5: Tambahkan lapisan pertahanan tambahan
SSH key yang diperkuat adalah fondasi utama, dan ada dua lapisan tambahan di atasnya.
Fail2ban memantau log Anda dan memblokir alamat yang terus gagal. Hal ini mengurangi gangguan pemindai (scanner) dan mengusir mereka lebih awal. Fitur ini bekerja secara alami dengan autentikasi berbasis key saja: lihat Fail2ban di Ubuntu untuk menghentikan serangan SSH.
Metode yang lebih kuat adalah dengan mematikan akses SSH dari internet publik sepenuhnya. Jika Anda menempatkan SSH di balik WireGuard VPN dan membatasi port 22 hanya untuk tunnel tersebut, pengguna di luar VPN tidak akan bisa menjangkaunya. Serangan brute-force tidak lagi sekadar sulit, melainkan mustahil dilakukan. Semua ini mengasumsikan penggunaan firewall dengan kebijakan default-deny, seperti pengaturan UFW pada VPS.
SSH hanyalah satu bagian dari daftar periksa yang lebih besar: 10 menit pertama pada VPS baru menyusun langkah-langkah sesuai urutan, dan pembaruan keamanan otomatis pada Ubuntu menjaga server tetap ter-patch setelahnya.
FAQ
Bagaimana cara menonaktifkan login password untuk SSH di Ubuntu 24.04?
Buat file drop-in di /etc/ssh/sshd_config.d/00-hardening.conf (awalan 00 membuatnya diurutkan sebelum 50-cloud-init.conf, yang nilai PasswordAuthentication yes-nya akan menang jika tidak, karena sshd menggunakan nilai pertama yang dibaca) yang berisi PasswordAuthentication no dan KbdInteractiveAuthentication no, jalankan sudo sshd -t untuk memeriksanya, lalu sudo systemctl reload ssh. Pastikan login menggunakan kunci berfungsi di sesi baru sebelum Anda mengandalkannya. Mengedit drop-in alih-alih sshd_config akan tetap aman saat pembaruan paket dan mudah untuk dibatalkan.
Haruskah saya menonaktifkan login root melalui SSH?
Ya. Atur PermitRootLogin no agar tidak ada orang yang dapat login langsung sebagai root. Login sebagai pengguna biasa Anda dan gunakan sudo untuk tugas admin. Root ada di setiap sistem Linux, sehingga membiarkannya dapat diakses memberikan username yang sudah diketahui kepada penyerang untuk ditargetkan. Menonaktifkannya berarti penyerang harus mengetahui nama akun Anda dan memiliki kunci Anda.
Apakah mengubah port SSH membuat server saya lebih aman?
Tidak secara signifikan. Berpindah dari port 22 menyembunyikan Anda dari pemindai malas yang hanya memindai port 22, yang mengurangi kebisingan log, tetapi penyerang asli akan memindai setiap port dan tetap menemukannya. Autentikasi hanya menggunakan kunci adalah hal yang benar-benar menghentikan penyusupan. Jika Anda mengubah port, buka port baru di firewall terlebih dahulu, lalu jalankan sudo systemctl daemon-reload && sudo systemctl restart ssh.socket; pada Ubuntu 24.04, socket mengelola listener, dan reload biasa akan membiarkan sshd tetap di port 22.
Apakah saya memerlukan Fail2ban jika saya menggunakan SSH keys?
Ini opsional tetapi tetap berguna. Dengan autentikasi hanya kunci, tebakan password tidak akan berhasil, sehingga Fail2ban bukan hal yang menahan penyerang. Fail2ban membatasi laju kegagalan berulang dari satu alamat, yang mengurangi kebisingan pemindai pada log Anda dan mengusir pelanggar berulang lebih awal; serangan lambat dan terdistribusi tetap berada di bawah ambang batas blokirnya. Jalankan ini di atas autentikasi kunci, dan idealnya simpan SSH di balik VPN.
Bagaimana cara pemulihan jika saya terkunci dari SSH?
Gunakan konsol web penyedia layanan Anda, yang mengakses server melalui koneksi serial atau VNC yang tidak melalui SSH. Dari sana Anda dapat login, memperbaiki file drop-in sshd, dan memuat ulang layanan. Inilah alasan mengapa Anda harus menguji konfigurasi SSH baru di terminal kedua sebelum menutup sesi pertama Anda, dan mengapa autentikasi kunci harus sudah berfungsi sebelum Anda mematikan password.