Keamanan VPS dari Nol: Kunci SSH, Firewall, dan Fail2ban
VPS baru tidak boleh langsung dianggap aman setelah Ubuntu dipasang. Sebelum akses dikonfigurasi, server sudah terlihat oleh pemindai: mereka mencoba kata sandi SSH, mencari panel kontrol yang terbuka, dan memeriksa kerentanan umum. Dalam panduan ini, kita akan membahas langkah dasar untuk mengamankan VPS dari awal: membuat pengguna terpisah, mengonfigurasi autentikasi dengan kunci SSH, membatasi port jaringan menggunakan UFW, dan menambahkan Fail2ban. Semua langkah berfungsi di Ubuntu 22.04 dan 24.04 ketika perintah dijalankan oleh pengguna dengan hak sudo.
Sebelum memulai: buat daftar port
Jangan membuka port hanya “untuk berjaga-jaga”. Server web biasa memerlukan:
22/tcp— SSH; idealnya batasi berdasarkan IP atau pindahkan ke port lain hanya sebagai langkah tambahan;80/tcp— HTTP; biasanya diperlukan untuk mengarahkan ke HTTPS dan memvalidasi sertifikat;443/tcp— HTTPS.
Port aplikasi seperti 3000, 8080, atau 9000 tidak boleh dapat diakses dari internet jika Nginx atau Caddy berjalan di depannya. Bind aplikasi ke 127.0.0.1 atau izinkan portnya hanya di jaringan internal. Pertama, cari tahu apa saja yang sedang mendengarkan di server:
sudo ss -tulpnSetelah memasang Docker, periksa aturan iptables-nya secara terpisah: publikasi -p 3000:3000 dapat membuka port di luar konfigurasi yang diharapkan. Untuk layanan publik, lebih aman menggunakan proxy HTTPS dan menyembunyikan port internal.
Langkah 1. Perbarui sistem dan buat administrator
Hubungkan ke VPS menggunakan kredensial yang diberikan, lalu pasang pembaruan:
sudo apt update
sudo apt full-upgrade -y
sudo apt install -y ufw fail2ban unattended-upgradesBuat pengguna pribadi. Ganti alex dengan nama Anda sendiri:
sudo adduser alex
sudo usermod -aG sudo alexJangan hapus akses awal sebelum menguji akun baru di jendela terminal terpisah. Ini aturan penting: kesalahan SSH lebih mudah diperbaiki saat sesi saat ini masih terbuka.
Langkah 2. Buat kunci SSH dan pasang di server
Di komputer Linux, macOS, atau Windows PowerShell, jalankan:
ssh-keygen -t ed25519 -C "alex@my-computer"Tekan Enter untuk menyimpan kunci di file default, lalu tetapkan passphrase. Jangan pernah mengirim kunci privat melalui chat, memasukkannya ke repositori, atau menyalinnya ke VPS. Hanya file dengan ekstensi .pub yang boleh dipindahkan ke server:
ssh-copy-id alex@SERVER_IPJika ssh-copy-id tidak tersedia, tampilkan kunci publik dengan Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub di PowerShell, lalu tambahkan ke server:
sudo install -d -m 700 -o alex -g alex /home/alex/.ssh
sudo nano /home/alex/.ssh/authorized_keys
sudo chown alex:alex /home/alex/.ssh/authorized_keys
sudo chmod 600 /home/alex/.ssh/authorized_keysTempelkan kunci dalam satu baris dan uji login sebelum menonaktifkan kata sandi:
ssh alex@SERVER_IP
sudo whoamiHasil yang diharapkan dari perintah terakhir adalah root. Jika klien SSH tidak menemukan kunci, tentukan secara eksplisit: ssh -i ~/.ssh/id_ed25519 alex@SERVER_IP.
Langkah 3. Nonaktifkan login root dan autentikasi kata sandi
Buat cadangan konfigurasi SSH:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_configPastikan file berisi parameter berikut:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
MaxAuthTries 3Di Ubuntu, pengaturan mungkin berada di /etc/ssh/sshd_config.d/*.conf, jadi periksa konfigurasi yang efektif:
sudo sshd -t
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries'Jika sshd -t melaporkan kesalahan, jangan memulai ulang layanan sampai sintaksnya diperbaiki. Setelah pemeriksaan berhasil, terapkan pengaturan:
sudo systemctl reload sshBiarkan koneksi SSH lama tetap terbuka dan uji login berbasis kunci di jendela baru. Menonaktifkan kata sandi tanpa kunci yang telah diverifikasi adalah cara paling umum kehilangan akses ke server.
Langkah 4. Konfigurasikan UFW tanpa memblokir SSH
UFW adalah pembungkus yang nyaman untuk aturan jaringan Linux. Tetapkan default yang aman terlebih dahulu, lalu izinkan port SSH dan web:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enablePastikan aktivasi hanya dilakukan setelah aturan SSH ditambahkan. Tinjau hasilnya:
sudo ufw status verbose
sudo ufw status numberedUntuk IP kantor permanen, Anda dapat membatasi SSH ke alamat tersebut:
sudo ufw delete allow 22/tcp
sudo ufw allow from YOUR.PUBLIC.IP to any port 22 proto tcp comment 'SSH office'Gunakan opsi ini hanya dengan IP permanen dan akses ke konsol penyedia: jika alamat berubah, Anda dapat terkunci di luar server.
Cara membuka port aplikasi untuk sementara
Jika perlu memeriksa layanan secara langsung, buat aturan dengan sumber yang dibatasi:
sudo ufw allow from YOUR.PUBLIC.IP to any port 8080 proto tcpSetelah pengujian, hapus menggunakan nomor yang ditampilkan oleh ufw status numbered:
sudo ufw delete RULE_NUMBERJangan gunakan sudo ufw allow 1:65535/tcp: aturan semacam itu membuat firewall hanya menjadi formalitas.
Langkah 5. Aktifkan Fail2ban untuk SSH
Fail2ban menganalisis log dan menambahkan aturan pemblokiran sementara setelah beberapa upaya login gagal. Fail2ban tidak menggantikan kunci SSH atau firewall, tetapi mengurangi gangguan dari percobaan brute-force otomatis.
Buat konfigurasi lokal agar pembaruan paket tidak menimpa pengaturan Anda:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.localTetapkan nilai yang wajar di bagian [DEFAULT]:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
banaction = ufw
[sshd]
enabled = true
port = 22Mulai layanan dan periksa jail:
sudo systemctl enable --now fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshdDalam output sshd, periksa jumlah percobaan gagal dan alamat yang diblokir. Jangan masukkan IP Anda sendiri ke daftar ban. Untuk pengecualian permanen, gunakan ignoreip = 127.0.0.1/8 YOUR.PUBLIC.IP di [DEFAULT].
Langkah 6. Aktifkan pembaruan otomatis
Pembaruan otomatis berguna untuk paket keamanan, tetapi reboot kernel tetap harus dikelola:
sudo dpkg-reconfigure -plow unattended-upgrades
sudo systemctl status unattended-upgradesSeminggu sekali, periksa apakah reboot diperlukan:
test -f /var/run/reboot-required && echo 'Требуется перезапуск'Sebelum melakukan reboot manual, pastikan Anda memiliki kunci yang berfungsi dan akses ke konsol VPS. Setelah reboot, periksa layanan aplikasi, Nginx, UFW, dan Fail2ban.
Langkah 7. Periksa hasilnya dari luar
Periksa perlindungan dari komputer lain, bukan hanya dengan membaca konfigurasi:
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no alex@SERVER_IPPerintah tersebut harus berakhir dengan penolakan. Uji login berbasis kunci yang berfungsi secara terpisah:
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 alex@SERVER_IPDi VPS, periksa alamat yang mendengarkan dan aturan firewall:
sudo ss -lntup
sudo ufw status numbered
sudo fail2ban-client status sshdPort aplikasi harus mendengarkan di 127.0.0.1 jika tidak dimaksudkan untuk akses langsung. Dari host eksternal, Anda dapat menggunakan nmap SERVER_IP, tetapi pindai hanya server milik sendiri: memeriksa infrastruktur orang lain tanpa izin dapat melanggar hukum dan aturan penyedia.
Cadangan dan pemulihan
Perlindungan SSH tidak melindungi dari data yang terhapus, kesalahan administrator, atau aplikasi yang disusupi. Simpan salinan database, konfigurasi, dan file pengguna secara terpisah dari VPS. Penyiapan minimum adalah cadangan harian, beberapa versi dari hari-hari sebelumnya, dan pengujian pemulihan secara berkala.
Jangan menulis kata sandi atau token ke dalam skrip teks biasa. Jika sebuah rahasia terbuka, segera cabut dan buat yang baru.
Cara memilih VPS untuk proyek yang aman
Keamanan dimulai dari kendali atas infrastruktur. Di VPS, Anda dapat memilih sistem operasi, aturan firewall, metode akses, cadangan, dan penempatan layanan sendiri. Untuk situs web atau API kecil, jaringan yang stabil, penyimpanan SSD, dan konsol pemulihan lebih penting daripada kelebihan core virtual.
Saat meluncurkan proyek di VPS tropic.host, tentukan titik masuk publik sejak awal: dalam banyak kasus, SSH, HTTP, dan HTTPS sudah cukup. Simpan database dan panel kontrol di dalam jaringan internal. Saat proyek berkembang, instans VPS terpisah untuk aplikasi, database, dan pemantauan membantu mengisolasi domain kegagalan.
Kesalahan umum
- Menonaktifkan kata sandi sebelum menguji login berbasis kunci. Biarkan sesi saat ini tetap terbuka dan uji login baru secara terpisah.
- Membiarkan
22/tcpterbuka untuk seluruh dunia meskipun dapat diizinkan hanya dari alamat tepercaya. - Mempublikasikan port Docker secara langsung. Periksa aturan Docker dan UFW terlebih dahulu.
- Memasang Fail2ban lalu tidak pernah memeriksa log lagi. Tinjau
journalctl -u sshdan status jail setelah perubahan.
Kesimpulan
Perlindungan dasar VPS tidak membutuhkan banyak waktu jika langkah-langkah dilakukan dalam urutan yang benar: buat pengguna terpisah, pasang kunci SSH, verifikasi akses, nonaktifkan login root dan kata sandi, aktifkan UFW, konfigurasikan Fail2ban, dan siapkan pembaruan otomatis. Setelah itu, tambahkan cadangan, logging, dan pemantauan eksternal.
Langkah-langkah ini tidak membuat server kebal, tetapi menghilangkan kesalahan konfigurasi awal yang paling umum. Langkah berikutnya adalah menyesuaikan profil keamanan dengan aplikasi tertentu: perbarui dependensi, batasi izin layanan, lindungi panel admin, dan periksa port yang terbuka secara rutin.
FAQ
Apakah port SSH default perlu diubah?
Tidak harus. Memindahkan port mengurangi gangguan otomatis, tetapi tidak menggantikan kunci, kata sandi yang dinonaktifkan, UFW, atau Fail2ban. Jika mengubah port, perbarui aturan firewall dan parameter port di jail Fail2ban.
Apa yang harus dilakukan jika kehilangan akses setelah mengonfigurasi UFW?
Gunakan konsol web atau rescue dari penyedia, lalu periksa aturan SSH dan konfigurasi sshd. Jangan menutup sesi lama yang masih berfungsi sampai login baru dikonfirmasi.
Apakah Fail2ban cukup untuk melindungi SSH?
Tidak. Fail2ban merespons kegagalan login yang sudah terjadi. Fondasinya harus berupa kunci SSH, autentikasi kata sandi yang dinonaktifkan, izin pengguna minimal, dan firewall yang dibatasi.
Bisakah SSH diizinkan hanya dari satu alamat IP?
Ya, jika alamatnya permanen: tambahkan aturan UFW allow from untuk IP tersebut. Siapkan akses konsol penyedia atau jalur cadangan lain sebelumnya karena koneksi akan diblokir setelah IP berubah.
Seberapa sering keamanan VPS harus diperiksa?
Setelah setiap perubahan pada SSH, firewall, atau publikasi port Docker, lakukan pemeriksaan port dan uji login. Sebagai pemeliharaan rutin, tinjau pembaruan dan log setidaknya seminggu sekali, serta uji pemulihan cadangan secara berkala.
