TeknoTUT

Cara Mengamankan VPS Linux Baru: SSH Key, UFW, dan Fail2ban

Panduan lengkap mengamankan VPS Linux baru: login dengan SSH key, matikan login root, aktifkan firewall UFW, dan pasang Fail2ban.

Ditulis oleh 11 menit bacaEnglish
Ilustrasi perisai dan gembok di depan server VPS Linux
Daftar Isi

Jika anda baru saja menyewa VPS, tentu anda sudah tidak sabar untuk langsung meng-install aplikasi, website, atau project yang sudah anda siapkan. Namun, tahukah anda bahwa beberapa menit setelah VPS anda menyala, sudah ada bot di internet yang mencoba masuk ke server anda?

Bot-bot ini bekerja tanpa henti memindai alamat IP di seluruh internet, mencari port SSH yang terbuka, lalu mencoba ribuan kombinasi username dan password (brute force). Jika VPS anda masih memakai pengaturan bawaan, yaitu login root dengan password, cepat atau lambat salah satu percobaan itu bisa saja berhasil.

Kabar baiknya, mengamankan VPS tidak serumit yang dibayangkan. Dengan beberapa langkah sederhana dan waktu sekitar 15–20 menit, VPS anda sudah jauh lebih aman dari sebagian besar serangan otomatis.

Dalam artikel kali ini, kita akan membahas tuntas cara mengamankan VPS Linux baru, mulai dari membuat user baru, login menggunakan SSH key, mematikan login root dan password, mengaktifkan firewall UFW, memasang Fail2ban, hingga mengaktifkan update keamanan otomatis. Mari kita mulai!

Mengapa VPS Baru Harus Segera Diamankan?

Berbeda dengan komputer di rumah yang berada di balik router, VPS langsung terhubung ke internet dengan alamat IP publik. Artinya, siapa saja di internet bisa mencoba terhubung ke VPS anda kapan saja.

Coba saja nanti, setelah VPS anda berjalan beberapa jam, jalankan perintah berikut untuk melihat percobaan login yang gagal:

sudo journalctl -u ssh --since "1 hour ago" | grep -i "failed\|invalid"

Jangan kaget jika outputnya berisi puluhan, bahkan ratusan baris percobaan login dari alamat IP yang tidak anda kenal. Itulah bot yang sedang mencoba peruntungannya.

Pengaturan bawaan VPS dari kebanyakan penyedia biasanya cukup "longgar" demi kemudahan:

  • Login sebagai root diizinkan: root adalah user dengan akses penuh. Jika akun ini berhasil dibobol, seluruh server ada di tangan penyerang.
  • Login dengan password diizinkan: password, sekuat apa pun, tetap bisa ditebak dengan brute force.
  • Belum ada firewall: semua port yang dibuka oleh aplikasi langsung bisa diakses dari internet.
  • Tidak ada pembatasan percobaan login: bot bebas mencoba sebanyak apa pun.

Langkah-langkah di artikel ini akan menutup celah-celah tersebut satu per satu.

Persiapan

Sebelum memulai, pastikan anda sudah memiliki:

  • VPS dengan Ubuntu 24.04 LTS atau 26.04 LTS yang masih baru. Perintah di artikel ini ditujukan untuk kedua versi tersebut. Distro turunan Debian lainnya umumnya mirip, tetapi bisa ada sedikit perbedaan.
  • Alamat IP VPS dan password root (atau akses awal lain) dari penyedia VPS anda.
  • Terminal di komputer lokal: Terminal di Mac/Linux, atau PowerShell di Windows 10/11 yang sudah menyertakan OpenSSH.

Penting: selama mengikuti tutorial ini, jangan tutup sesi SSH yang sedang aktif sebelum anda memastikan bisa login lewat sesi baru. Jika ada konfigurasi yang salah, sesi lama inilah penyelamat anda. Sebagai cadangan terakhir, kebanyakan penyedia VPS juga menyediakan web console di dashboard mereka.

Pada contoh di artikel ini, kita akan memakai alamat IP 203.0.113.10 dan user baru bernama budi. Silakan ganti dengan IP dan nama user anda sendiri.

Langkah-Langkah Mengamankan VPS Linux

Langkah #1: Update Sistem

Hal pertama yang harus dilakukan pada VPS baru adalah memperbarui semua paket. Image sistem operasi dari penyedia VPS sering kali dibuat beberapa minggu atau bulan sebelumnya, sehingga mungkin sudah ada celah keamanan yang ditambal sejak saat itu.

Login ke VPS sebagai root:

ssh [email protected]

Lalu jalankan update dengan perintah berikut:

apt update && apt upgrade -y

Jika ada pembaruan kernel, sebaiknya reboot VPS agar kernel baru langsung digunakan:

reboot

Tunggu sekitar satu menit, lalu login kembali sebagai root.

Langkah #2: Buat User Baru dengan Akses sudo

Bekerja sehari-hari menggunakan root itu berisiko. Satu perintah yang salah ketik bisa merusak sistem, dan root juga merupakan target utama para bot. Oleh karena itu, kita akan membuat user biasa yang bisa menjalankan perintah administrator lewat sudo.

Buat user baru dengan perintah berikut:

adduser budi

Anda akan diminta membuat password untuk user ini, lalu beberapa informasi tambahan seperti nama lengkap yang boleh dikosongkan saja dengan menekan Enter. Simpan password ini baik-baik, karena nantinya akan dipakai setiap kali menjalankan sudo.

Selanjutnya, tambahkan user tersebut ke grup sudo:

usermod -aG sudo budi

Untuk memastikan user baru sudah memiliki akses sudo, coba pindah ke user tersebut dan jalankan perintah sederhana:

su - budi
sudo whoami

Jika outputnya adalah root, berarti user budi sudah bisa menjalankan perintah sebagai administrator. Ketik exit untuk kembali ke sesi root.

Langkah #3: Login Menggunakan SSH Key

Inilah langkah yang paling berpengaruh terhadap keamanan VPS anda. SSH key adalah pasangan kunci kriptografi: private key yang tersimpan di komputer anda, dan public key yang dipasang di server. Login hanya bisa dilakukan oleh komputer yang memiliki private key tersebut.

Bayangkan perbedaannya seperti ini: password itu seperti kode PIN yang bisa ditebak, sedangkan SSH key seperti kunci fisik yang sangat rumit. Tanpa memegang kuncinya, bot tidak punya kesempatan sama sekali.

Langkah ini dilakukan di komputer lokal anda, bukan di VPS. Buka terminal baru, lalu buat SSH key dengan perintah berikut:

ssh-keygen -t ed25519 -C "laptop-budi"

Tekan Enter untuk menyimpan di lokasi default (~/.ssh/id_ed25519). Anda juga akan diminta membuat passphrase. Sangat disarankan untuk mengisinya, agar private key tetap aman meskipun laptop anda dicuri.

Algoritma Ed25519 lebih modern, lebih cepat, dan menghasilkan kunci yang jauh lebih pendek dibandingkan RSA, dengan tingkat keamanan yang sangat baik. Hampir semua server SSH modern sudah mendukungnya.

Sekarang salin public key ke VPS untuk user budi. Di Mac/Linux, cukup gunakan perintah berikut:

ssh-copy-id [email protected]

Di Windows (PowerShell), perintah ssh-copy-id tidak tersedia. Gunakan perintah berikut sebagai gantinya:

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh budi@203.0.113.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Anda akan diminta memasukkan password user budi untuk terakhir kalinya. Setelah itu, coba login menggunakan SSH key:

ssh [email protected]

Jika anda langsung masuk tanpa ditanya password user (hanya passphrase SSH key, bila anda mengisinya), selamat! SSH key anda sudah terpasang dengan benar.

Langkah #4: Nonaktifkan Login Root dan Login Password

Setelah SSH key berfungsi, saatnya menutup pintu yang paling sering diserang: login sebagai root dan login menggunakan password.

Pada Ubuntu versi baru, konfigurasi SSH sebaiknya tidak diubah langsung di file utama /etc/ssh/sshd_config, melainkan lewat file tambahan di folder /etc/ssh/sshd_config.d/. Buat file baru dengan perintah berikut:

sudo nano /etc/ssh/sshd_config.d/00-hardening.conf

Isikan konfigurasi berikut:

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3

Simpan file dengan menekan CTRL+X, lalu Y, dan Enter.

Penjelasan singkat setiap baris:

  • PermitRootLogin no: root tidak bisa login lewat SSH sama sekali.
  • PasswordAuthentication no: login dengan password dimatikan, hanya SSH key yang diterima.
  • KbdInteractiveAuthentication no: menutup metode login interaktif yang bisa menjadi "jalan belakang" untuk password.
  • PubkeyAuthentication yes: memastikan login dengan SSH key tetap aktif.
  • MaxAuthTries 3: koneksi diputus setelah 3 kali percobaan autentikasi gagal.

Kenapa nama filenya diawali 00-? Banyak VPS dengan Ubuntu menyertakan file 50-cloud-init.conf di folder yang sama, yang berisi PasswordAuthentication yes. SSH memakai nilai pertama yang ia baca, dan file di folder ini dibaca berurutan sesuai nama. Dengan awalan 00-, pengaturan kita dibaca lebih dulu dan tidak tertimpa oleh file tersebut.

Sebelum menerapkannya, periksa dulu apakah ada kesalahan penulisan konfigurasi:

sudo sshd -t

Jika tidak muncul pesan apa pun, berarti konfigurasi valid. Lalu pastikan pengaturan yang benar-benar aktif sudah sesuai harapan:

sudo sshd -T | grep -E "permitrootlogin|passwordauthentication|kbdinteractiveauthentication|pubkeyauthentication"

Outputnya kira-kira seperti ini:

permitrootlogin no
pubkeyauthentication yes
passwordauthentication no
kbdinteractiveauthentication no

Jika semua sudah sesuai, terapkan konfigurasi dengan me-restart layanan SSH:

sudo systemctl restart ssh

Sekarang, tanpa menutup sesi yang sedang aktif, buka terminal baru dan uji dua hal berikut:

  1. Login sebagai budi dengan ssh [email protected] harus berhasil.
  2. Login sebagai root dengan ssh [email protected] harus ditolak dengan pesan Permission denied (publickey).

Jika keduanya sesuai, sesi lama boleh ditutup.

Langkah #5: Aktifkan Firewall UFW

UFW (Uncomplicated Firewall) adalah frontend firewall bawaan Ubuntu yang, sesuai namanya, sangat mudah digunakan. Prinsipnya sederhana: tolak semua koneksi masuk, lalu buka hanya port yang benar-benar dibutuhkan.

Pertama, pastikan UFW sudah terpasang:

sudo apt install ufw -y

Atur kebijakan default: tolak semua koneksi masuk dan izinkan semua koneksi keluar.

sudo ufw default deny incoming
sudo ufw default allow outgoing

Lalu izinkan SSH. Langkah ini wajib dilakukan sebelum mengaktifkan UFW, jika tidak, anda akan langsung terkunci dari VPS sendiri.

sudo ufw allow OpenSSH

Jika VPS anda akan menjalankan website, buka juga port HTTP dan HTTPS:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Setelah itu, aktifkan UFW dengan perintah berikut, lalu ketik y saat diminta konfirmasi:

sudo ufw enable

Cek status firewall untuk memastikan aturannya sudah aktif:

sudo ufw status verbose

Outputnya kurang lebih seperti di bawah ini:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
 
To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)

Jika statusnya active dan port SSH tercantum di daftar ALLOW IN, berarti firewall sudah bekerja dengan benar.

Catatan untuk pengguna Docker: Docker memiliki aturan firewall sendiri, sehingga port yang di-publish oleh container (misalnya -p 8080:80) bisa tetap terbuka ke internet walaupun tidak diizinkan di UFW. Jika anda menjalankan Docker, sebaiknya publish port hanya ke 127.0.0.1 lalu akses lewat reverse proxy.

Langkah #6: Pasang Fail2ban

Meskipun login password sudah dimatikan, bot akan tetap terus mencoba. Hal ini memang tidak berbahaya, tetapi memenuhi log dan membuang sumber daya server. Di sinilah Fail2ban berperan.

Fail2ban memantau log login, lalu otomatis memblokir alamat IP yang terlalu sering gagal login dalam waktu tertentu. Install Fail2ban dengan perintah berikut:

sudo apt install fail2ban -y

Di Ubuntu, jail untuk SSH sebenarnya sudah aktif secara default. Namun, kita akan membuat konfigurasi sendiri agar aturannya lebih jelas dan tidak tertimpa saat paket diperbarui. Buat file jail.local:

sudo nano /etc/fail2ban/jail.local

Isikan konfigurasi berikut:

[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1
 
[sshd]
enabled = true
port    = ssh
backend = systemd

Artinya, alamat IP yang gagal login 5 kali dalam 10 menit akan diblokir selama 1 jam. Opsi backend = systemd dipakai karena Ubuntu versi baru mencatat log SSH di journal systemd, bukan lagi di file /var/log/auth.log.

Tips: jika anda memiliki alamat IP statis (misalnya IP kantor), tambahkan ke baris ignoreip agar anda tidak pernah terblokir secara tidak sengaja, contohnya ignoreip = 127.0.0.1/8 ::1 198.51.100.25.

Aktifkan Fail2ban dan jalankan ulang agar konfigurasi baru terbaca:

sudo systemctl enable fail2ban
sudo systemctl restart fail2ban

Untuk memastikan jail SSH sudah bekerja, gunakan perintah berikut:

sudo fail2ban-client status sshd

Outputnya kira-kira seperti ini:

Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- Journal matches:	_SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned:	0
   |- Total banned:	0
   `- Banned IP list:

Biarkan VPS berjalan beberapa jam, lalu jalankan perintah di atas sekali lagi. Biasanya angka Total failed dan Total banned sudah mulai bertambah, dan itu tanda Fail2ban sedang bekerja menghalau bot.

Total failed tetap 0? Bandingkan dengan log SSH menggunakan perintah sudo journalctl -u ssh --since "1 hour ago" | grep -i "invalid\|closed". Jika log menunjukkan banyak percobaan login, tetapi Fail2ban tidak mencatat satu pun, kemungkinan filter bawaannya belum mengenali nama proses OpenSSH versi baru (sshd-session). Buat file /etc/fail2ban/filter.d/sshd.local yang berisi dua baris berikut, lalu restart Fail2ban:

[Init]
journalmatch = _SYSTEMD_UNIT=ssh.service

Jika suatu saat IP anda sendiri ikut terblokir, buka blokirnya lewat web console dengan perintah berikut:

sudo fail2ban-client set sshd unbanip 198.51.100.25

Langkah #7: Aktifkan Update Keamanan Otomatis

Celah keamanan baru ditemukan hampir setiap minggu. Agar VPS anda selalu mendapatkan tambalan terbaru tanpa harus login setiap hari, aktifkan unattended-upgrades, fitur yang otomatis meng-install update keamanan.

Pada Ubuntu, paket ini umumnya sudah terpasang dan aktif secara default. Namun tidak ada salahnya memastikan. Jalankan perintah berikut:

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades

Pilih Yes saat ditanya apakah ingin mengunduh dan meng-install update stabil secara otomatis.

Untuk memeriksa apakah konfigurasinya berjalan dengan benar, lakukan simulasi dengan perintah berikut:

sudo unattended-upgrade --dry-run --debug

Jika tidak ada pesan error, berarti update keamanan otomatis sudah siap bekerja. Secara default, unattended-upgrades hanya meng-install update dari repositori keamanan, sehingga risiko update merusak aplikasi anda sangat kecil.

Opsional: Mengganti Port SSH

Mengganti port SSH dari 22 ke port lain (misalnya 2222) bukan pengganti langkah-langkah di atas, karena bot yang lebih canggih tetap bisa menemukan port baru. Namun, cara ini cukup efektif mengurangi "kebisingan" percobaan login otomatis di log anda.

Jika anda ingin melakukannya, perhatikan urutannya agar tidak terkunci. Pertama, buka port baru di UFW:

sudo ufw allow 2222/tcp

Kedua, tambahkan baris berikut di file /etc/ssh/sshd_config.d/00-hardening.conf:

Port 2222

Ketiga, terapkan perubahan. Mulai Ubuntu 22.10, SSH dijalankan lewat socket activation systemd, sehingga cukup me-restart ssh saja tidak akan memindahkan port. Gunakan perintah berikut:

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket

Keempat, uji login dari terminal baru dengan port yang baru:

ssh -p 2222 [email protected]

Jika berhasil, tutup port lama di UFW dan sesuaikan Fail2ban dengan mengubah baris port = ssh menjadi port = 2222 di /etc/fail2ban/jail.local, lalu restart Fail2ban:

sudo ufw delete allow OpenSSH
sudo systemctl restart fail2ban

Checklist Keamanan VPS

Berikut ringkasan semua langkah yang sudah kita lakukan:

Langkah Fungsi Perintah Cek
Update sistem Menambal celah keamanan yang sudah diketahui apt list --upgradable
User sudo Tidak bekerja sebagai root sehari-hari groups budi
SSH key Login tanpa password yang bisa ditebak ssh budi@IP-VPS
Matikan root & password Menutup target utama brute force sudo sshd -T | grep permitrootlogin
Firewall UFW Hanya port yang dibutuhkan yang terbuka sudo ufw status
Fail2ban Memblokir IP yang mencoba brute force sudo fail2ban-client status sshd
Update otomatis Tambalan keamanan terpasang tanpa campur tangan systemctl status unattended-upgrades

Kesimpulan

Dari artikel ini, kita dapat menyimpulkan bahwa mengamankan VPS Linux baru sebenarnya cukup mudah dan tidak membutuhkan aplikasi yang rumit. Kuncinya ada pada beberapa langkah dasar: memakai user biasa dengan sudo, login hanya dengan SSH key, mematikan login root dan password, mengaktifkan firewall UFW, memasang Fail2ban, dan membiarkan update keamanan berjalan otomatis.

Dari semua langkah tersebut, mematikan login password dan beralih ke SSH key adalah yang paling berdampak. Dengan langkah ini saja, hampir semua serangan brute force otomatis langsung tidak berguna.

Yang perlu diingat, keamanan bukanlah pekerjaan sekali jadi. Biasakan untuk sesekali memeriksa log, memantau status Fail2ban, dan hanya membuka port yang memang dibutuhkan setiap kali anda memasang aplikasi baru.

Setelah VPS anda aman, anda bisa mulai memasang aplikasi dengan tenang. Jika VPS anda memiliki RAM kecil, jangan lupa baca juga cara mengatur swap memory di Linux. Jika ingin men-deploy aplikasi dengan mudah layaknya Heroku, silakan simak tutorial cara install CapRover.

Semoga artikel ini membantu.

Bacaan Selanjutnya

Artikel lain yang mungkin menarik buatmu.