30 Menit Pertama: Daftar Periksa Pengamanan VPS
VPS baru mendapat probe SSH pertama dalam hitungan menit setelah mendapatkan IP. Berikut urutan persis yang saya jalankan di setiap mesin baru — siap salin-tempel untuk Debian 13, dengan tabel daftar periksa di bagian akhir.
Asumsi: image Debian 13 baru dari deploy VPSRento Anda, Anda masuk sebagai root melalui SSH, dan contoh IP adalah 185.220.101.14 — ganti dengan milik Anda. Total waktu: sekitar setengah jam. Kerjakan langkah-langkah secara berurutan; langkah 2 bisa mengunci Anda jika terburu-buru.
1. Buat pengguna sudo Anda
Bekerja sebagai root adalah cara typo menjadi insiden. Buat pengguna sungguhan, beri sudo, dan lakukan semuanya dari sana:
# create the user (you'll set a password — still useful for sudo)
adduser ops
# grant sudo
usermod -aG sudo ops
Semua yang di bawah titik ini berjalan sebagai ops kecuali dinyatakan lain.
2. Hanya kunci SSH — tanpa kata sandi, tanpa login root
Autentikasi kata sandi adalah lubang terbesar pada mesin yang menghadap internet. Bot menghantam port 22 dengan daftar kredensial sepanjang hari, setiap hari. Kunci membuat seluruh kelas serangan menjadi tidak relevan. Di mesin lokal Anda:
# generate a keypair if you don't have one (ed25519, no passphrase tradeoff is yours)
ssh-keygen -t ed25519 -C "ops@atlas"
# push the public key to the server
ssh-copy-id [email protected]
Verifikasi Anda bisa masuk dengan kunci di terminal baru terminal — ssh [email protected] — sebelum menyentuh konfigurasi. Pertahankan sesi root yang ada sebagai jalur pelarian. Kemudian edit /etc/ssh/sshd_config:
# /etc/ssh/sshd_config — the three lines that matter
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
# validate the config, then reload (Debian 13 uses ssh.service)
sshd -t && systemctl reload ssh
prohibit-password daripada no datar untuk root dengan sengaja: root masih bisa mengautentikasi dengan kunci dari workstation Anda, yang kadang berguna untuk pemulihan konsol penyedia — tetapi tidak ada kata sandi yang akan pernah berfungsi, untuk siapa pun, dari mana pun. Konfirmasi dengan sshd -T | grep -E 'passwordauthentication|permitrootlogin'.
3. Firewall: tolak default, izinkan hanya yang Anda jalankan
ufw Debian adalah lapisan tipis dan masuk akal di atas nftables. Kebijakan adalah keamanannya; aturan hanyalah pengecualian terhadapnya:
apt update && apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
# SSH stays open — add this BEFORE enabling
ufw allow 22/tcp comment 'SSH'
# whatever your box actually serves, e.g.:
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw enable
ufw status verbose
Setiap port yang Anda buka harus punya nama dan alasan. Jika Anda tidak bisa menyebutkan untuk apa sebuah port, port itu tidak mendapat aturan.
4. fail2ban: perlambat bot hingga merangkak
Dengan autentikasi kata sandi dinonaktifkan, brute force sudah mati — tetapi fail2ban menjaga log Anda tetap terbaca dan memblokir pemindai yang menyentuh hal lain:
apt install -y fail2ban
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h
systemctl enable --now fail2ban
# watch it work
fail2ban-client status sshd
5. Pembaruan keamanan otomatis
CVE yang tidak ditambal adalah risiko lebih besar daripada reboot. unattended-upgrades Debian memasang pembaruan keamanan sendiri:
apt install -y unattended-upgrades
# answer Yes to auto-install updates
dpkg-reconfigure -plow unattended-upgrades
Konfigurasi default di /etc/apt/apt.conf.d/50unattended-upgrades hanya menarik dari suite keamanan — yang memang Anda inginkan di server: perbaikan keamanan otomatis, yang lain saat Anda pilih.
6. Matikan yang tidak Anda jalankan
Setiap layanan yang berjalan adalah permukaan serangan yang harus Anda tambal. Lihat apa yang sebenarnya mendengarkan:
# who is listening, on what, as which process
ss -tulpn
# everything enabled at boot
systemctl list-unit-files --state=enabled
# example: you don't run a print server — nobody does
systemctl disable --now cups
Aturannya: jika Anda tidak bisa menyebutkan fungsi pendengar, cari tahu sebelum membiarkannya hidup. Pada image VPSRento minimal seharusnya sangat sedikit selain sshd dan aplikasi Anda sendiri.
7. Opsional tetapi disarankan: bidang manajemen WireGuard
Versi keamanan SSH terkuat adalah SSH yang tidak menghadap internet sama sekali. Jalankan WireGuard di mesin, izinkan SSH hanya di dalam tunnel, dan port 22 akan hilang dari semua pemindai di dunia:
apt install -y wireguard
# /etc/wireguard/wg0.conf — minimal management tunnel
# [Interface] Address = 10.8.0.1/24, ListenPort = 51820
# open the tunnel, not the shell
ufw allow 51820/udp comment 'WireGuard'
ufw allow in on wg0 to any port 22 proto tcp comment 'SSH via WG'
ufw delete allow 22/tcp
systemctl enable --now wg-quick@wg0
Setelah itu Anda ssh [email protected] melalui tunnel, dan IP publik hanya menjawab pada satu port UDP. Panduan lengkap WireGuard — kunci, peer, konfigurasi klien, kode QR ponsel — ada di panduan pendamping.
Daftar periksa 10 poin
Jalankan tabel ini setelah setiap deploy baru, dan lagi setelah setiap layanan yang Anda tambahkan:
| # | Item | Di mana berada | Verifikasi dengan |
|---|---|---|---|
| 1 | Pengguna sudo non-root | /etc/passwd | id ops |
| 2 | Autentikasi SSH hanya kunci | sshd_config | sshd -T | grep passwordauth |
| 3 | Login root dengan kata sandi dinonaktifkan | sshd_config | sshd -T | grep permitrootlogin |
| 4 | Firewall default-deny untuk lalu lintas masuk | ufw | ufw status verbose |
| 5 | Hanya port bernama yang terbuka | ufw | ufw status numbered |
| 6 | Jail fail2ban sshd aktif | jail.local | fail2ban-client status sshd |
| 7 | Pembaruan keamanan otomatis | apt | systemctl status unattended-upgrades |
| 8 | Tidak ada listener yang tidak dijelaskan | — | ss -tulpn |
| 9 | Manajemen melalui WireGuard (opsional) | wg0.conf | wg show |
| 10 | Snapshot setelah hardening | Add-on area klien, $1.99/bln | Layanan → VPS Anda → snapshot |
Item 10 layak mendapat satu kalimat: harden dulu, snapshot kedua, dalam urutan itu — snapshot dari mesin yang bersih dan ter-hardening adalah rollback Anda untuk setiap kesalahan di masa depan. Snapshot offsite harian adalah add-on $1.99/bln di area klien. Tiga puluh menit pencegahan, satu klik asuransi.