Halo, Rekan ArtonLabs. Kalau Anda baru saja menyewa VPS, luangkan setengah jam untuk tulisan ini sebelum memasang apa pun.
VPS baru mulai diketuk bot dalam hitungan menit setelah alamatnya hidup. Kami pernah melihat ribuan percobaan login SSH di hari pertama sebuah server uji. Kabar baiknya, langkah-langkah yang menutup hampir semua serangan otomatis itu sederhana dan bisa selesai dalam setengah jam. Urutan di bawah adalah yang kami jalankan di setiap server baru, sebelum memasang apa pun yang lain.
Daftar Isi
- Pengguna Non-root dengan sudo
- SSH: Kunci, Bukan Sandi
- Firewall dengan UFW
- Fail2Ban
- Pembaruan Keamanan Otomatis
- Beberapa Hal Kecil yang Sering Terlupa
- Memeriksa Hasilnya
- Penutup
Pengguna Non-root dengan sudo
adduser admin
usermod -aG sudo admin
Bekerja sebagai root setiap hari berarti satu salah ketik bisa menghapus sistem, dan satu kebocoran sandi berarti seluruh server. Pengguna biasa dengan sudo memberi jeda berpikir sebelum perintah berbahaya, dan jejak siapa melakukan apa di log.
SSH: Kunci, Bukan Sandi
Di laptop Anda, buat pasangan kunci kalau belum ada, lalu salin kunci publiknya ke server:
ssh-keygen -t ed25519 -C "laptop-saya"
ssh-copy-id admin@alamat-server
Pastikan Anda bisa masuk dengan kunci di jendela terminal baru sebelum melanjutkan. Baru setelah itu matikan login dengan sandi dan login root langsung di /etc/ssh/sshd_config:
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
sudo systemctl restart ssh
Jangan tutup sesi yang sedang terbuka sampai sesi baru terbukti bisa masuk. Mengganti port SSH boleh saja untuk mengurangi kebisingan log, tetapi itu bukan pengamanan; bot memindai semua port. Kunci yang menjadi pengamannya.
Firewall dengan UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
Izinkan SSH sebelum enable, kalau tidak Anda mengunci diri sendiri. Port lain, misalnya database atau Ollama, tidak pernah dibuka ke publik; kalau layanan lain di jaringan harus mengaksesnya, izinkan hanya dari alamat itu: sudo ufw allow from 10.0.0.5 to any port 5432. Di VinzaPanel, aturan ini dikelola dari halaman Firewall, tetapi perintah di atas adalah yang sebenarnya berjalan.
Fail2Ban
sudo apt install -y fail2ban
sudo tee /etc/fail2ban/jail.local > /dev/null <<'EOF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
EOF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
Lima kegagalan dalam sepuluh menit memblokir alamat itu selama satu jam. Setelah beberapa hari, jalankan fail2ban-client status sshd dan lihat jumlah alamat yang diblokir; angkanya biasanya membuat orang baru sadar seberapa sering servernya dicoba. Kalau Anda menjalankan mail atau FTP, aktifkan jail untuk keduanya juga.
Pembaruan Keamanan Otomatis
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Ini memasang pembaruan keamanan setiap hari tanpa campur tangan. Di /etc/apt/apt.conf.d/50unattended-upgrades, kami biasanya menyalakan Remove-Unused-Dependencies dan membiarkan reboot otomatis mati, lalu memeriksa /var/run/reboot-required saat pemeliharaan terjadwal. Pembaruan kernel memang butuh reboot; lebih baik Anda yang memilih waktunya.
Beberapa Hal Kecil yang Sering Terlupa
- Sinkronkan waktu:
timedatectl set-ntp true. Log dengan jam yang salah menyulitkan penyelidikan. - Hapus layanan yang tidak dipakai:
ss -tulpnmenunjukkan apa yang mendengarkan; kalau ada yang tidak Anda kenal, cari tahu. - Pasang
sudo apt install -y needrestartagar tahu layanan mana yang masih memakai pustaka lama setelah pembaruan. - Aktifkan swap kecil di VPS dengan RAM terbatas supaya proses tidak dibunuh mendadak:
fallocate -l 1G /swapfile,chmod 600,mkswap,swapon, lalu tambahkan ke/etc/fstab. - Backup. Pengamanan tidak menggantikan salinan yang bisa dipulihkan.
Kalau Sudah Terlanjur Disusupi
Tanda-tandanya: proses yang tidak dikenal memakan CPU (top), koneksi keluar yang aneh (ss -tnp), entri cron yang tidak Anda buat, atau kunci SSH baru di authorized_keys. Kalau Anda menemukannya, jangan berusaha "membersihkan" server itu; anggap seluruhnya tidak bisa dipercaya. Ambil salinan data dan log untuk dipelajari, bangun server baru dari nol dengan langkah-langkah di atas, pulihkan dari backup yang dibuat sebelum tanggal penyusupan, dan ganti semua sandi serta kunci yang pernah ada di server lama. Ini alasan lain mengapa backup offsite dan catatan konfigurasi begitu penting.
Memeriksa Hasilnya
Dari mesin lain, nmap -Pn alamat-server harus hanya menampilkan 22, 80, dan 443. ssh root@alamat-server harus ditolak. sudo journalctl -u ssh --since today | grep -c "Failed password" akan menunjukkan percobaan yang masih datang, dan fail2ban-client status sshd menunjukkan yang sudah diblokir. Kalau Anda memakai VinzaPanel, plugin Port Scanner melakukan pemeriksaan pertama itu dari dalam panel.
Memantau Siapa yang Masuk
last -n 20 # login terakhir yang berhasil
sudo lastb -n 20 # percobaan gagal
sudo journalctl -u ssh --since "24 hours ago" | grep Accepted
Biasakan melihat last setelah pemeliharaan. Login berhasil dari alamat yang tidak Anda kenal adalah tanda yang jauh lebih penting daripada ribuan percobaan gagal. Kalau ada beberapa admin, beri masing-masing akun sendiri; akun bersama membuat jejak ini tidak berarti.
Merapikan sudo dan Akun
Periksa siapa yang punya sudo dengan getent group sudo, dan cabut yang tidak perlu. Untuk akun layanan (pengguna aplikasi, pengguna website), pastikan shell-nya nologin kalau memang tidak perlu masuk, atau batasi kuncinya hanya untuk deploy. Kunci SSH untuk deploy otomatis sebaiknya terikat satu repositori dan satu tujuan; kunci tingkat akun yang bisa membuka semuanya jangan pernah disimpan di server.
Pemeriksaan Mandiri dengan Lynis
sudo apt install -y lynis
sudo lynis audit system
Lynis memindai konfigurasi dan memberi daftar saran berperingkat. Tidak semua saran relevan untuk VPS kecil, tetapi ia menangkap hal-hal yang mudah terlewat: izin berkas yang terlalu longgar, layanan yang mendengarkan tanpa alasan, atau pengaturan kernel yang bisa diperketat. Jalankan sekali setelah pengaturan awal, lalu setiap beberapa bulan.
, dan justru itu intinya: sebagian besar server yang diretas bukan karena serangan canggih, melainkan karena sandi lemah, port terbuka, dan paket yang tidak diperbarui. Tiga puluh menit ini menutup ketiganya. Setelahnya, lapisan tambahan seperti WAF atau pemindai berkas menjadi pilihan, bukan keharusan mendesak.Semoga server Anda tenang, Rekan ArtonLabs. Kalau ada langkah pengamanan lain yang menurut Anda wajib masuk daftar, kabari kami.