Server Linux yang menghadap internet rata-rata menerima ratusan upaya brute-force SSH setiap hari. Dalam hitungan menit setelah menyediakan DigitalOcean Droplet baru, bot sudah mulai memindai port 22. Saya belajar hal ini dengan cara yang menyakitkan ketika sebuah VPS awal di Commsult Indonesia dikompromikan melalui kata sandi root yang lemah dalam 48 jam setelah online. Sejak itu, saya menjalankan checklist hardening yang sama di setiap server baru sebelum men-deploy aplikasi apa pun.
SSH adalah pintu depan setiap server Linux dan target nilai tertinggi bagi penyerang. CIS Benchmark untuk Ubuntu merekomendasikan menonaktifkan login root, menonaktifkan autentikasi kata sandi, dan menggunakan pasangan kunci SSH sebagai baseline minimum. Kunci SSH secara kriptografis kebal terhadap brute-force — kunci RSA 2048-bit memiliki lebih banyak kombinasi yang mungkin daripada atom di alam semesta yang dapat diamati.
Edit /etc/ssh/sshd_config dengan pengaturan kritis ini: PermitRootLogin no, PasswordAuthentication no, MaxAuthTries 3, PubkeyAuthentication yes, X11Forwarding no, AllowTcpForwarding no (kecuali diperlukan), dan ubah port dari 22 ke port non-standar (misalnya 2222) untuk mengurangi kebisingan pemindaian otomatis. Setelah membuat perubahan, selalu uji konfigurasi baru dengan sshd -t sebelum reload.
UFW (Uncomplicated Firewall) adalah alat yang tepat untuk manajemen firewall VPS yang mudah. Mulai dengan kebijakan default-deny-all-incoming, lalu masukkan daftar putih hanya yang Anda butuhkan: port SSH Anda, HTTP (80), dan HTTPS (443). Jangan pernah membuka port database (5432, 3306, 6379) ke internet publik — database hanya boleh dapat dijangkau di antarmuka loopback atau jaringan privat.
┌─────────────────────────────────────────────────────┐
│ LINUX SERVER HARDENING LAYERS │
├─────────────────────────────────────────────────────┤
│ [1] Cloud Firewall — Block before it hits VPS │
│ [2] UFW — Host-level packet filter │
│ [3] SSH Hardening — Key-only, non-standard port │
│ [4] Fail2ban — Auto-ban brute-forcers │
│ [5] Unattended-upgrades — Auto security patches │
│ [6] Kernel sysctl — SYN cookies, ASLR │
│ [7] Audit (Lynis) — Verify what you hardened │
└─────────────────────────────────────────────────────┘Dari pengalaman saya mengamankan server di Jakarta dengan bandwidth admin yang terbatas, siapkan UFW sebelum mengubah port SSH Anda. Urutan penting: tambahkan aturan port SSH baru (ufw allow 2222/tcp), aktifkan UFW, lalu ubah port sshd_config dan reload SSH. Melakukannya di luar urutan telah mengunci saya sebanyak dua kali — Anda akhirnya membuka sesi konsol DigitalOcean untuk memperbaikinya.
Paket yang tidak ditambal bertanggung jawab atas sebagian besar kompromi server. Di Ubuntu/Debian, unattended-upgrades menangani pembaruan keamanan otomatis tanpa intervensi manual. Instal, aktifkan reboot otomatis selama jendela traffic rendah, dan konfigurasikan notifikasi email untuk kejadian reboot. Unit Riset Ancaman Qualys menemukan bahwa 60% pelanggaran melibatkan kerentanan yang tersedia patch-nya namun tidak diterapkan.
Di luar SSH dan firewall, terapkan hardening tingkat kernel via /etc/sysctl.conf: nonaktifkan IP forwarding (kecuali ini adalah router), aktifkan SYN cookies untuk mencegah serangan SYN flood, atur kernel.randomize_va_space=2 untuk ASLR, dan batasi core dump. Instal dan konfigurasikan fail2ban untuk pemblokiran IP otomatis pada kegagalan autentikasi berulang.
# SSH hardening — /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
X11Forwarding no
AllowTcpForwarding no
Port 2222
# UFW setup
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp # SSH (new port)
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
ufw enable
# Kernel hardening — /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
kernel.randomize_va_space = 2
net.ipv4.conf.all.rp_filter = 1
fs.suid_dumpable = 0Fail2ban adalah deteksi intrusi minimum yang layak untuk VPS. Ia memantau file log dan melarang IP yang melebihi ambang kegagalan. Di luar fail2ban, pertimbangkan menginstal OSSEC atau Wazuh untuk pemantauan integritas file — mereka memberi tahu Anda ketika file sistem kritis berubah, yang merupakan sinyal kuat dari kompromi.
Saya pernah menerapkan hardening CIS Level 2 ke server NestJS produksi tanpa mengujinya terlebih dahulu — ia menonaktifkan fitur kernel yang diandalkan runtime Node.js untuk performa, menyebabkan crash intermiten di bawah beban. Selalu uji perubahan hardening di lingkungan staging yang mencerminkan produksi. Jalankan CIS-CAT atau Lynis setelah menerapkan perubahan untuk mengaudit apa yang sebenarnya Anda hardening.
Jangan pernah menjalankan beban kerja aplikasi sebagai root. Buat pengguna sistem khusus untuk setiap layanan (misalnya www-data untuk Nginx, nestjs untuk aplikasi Node.js Anda) dengan izin minimal. Gunakan sudo untuk eskalasi hak istimewa dan konfigurasikan /etc/sudoers dengan hati-hati — catat semua perintah sudo. Audit pengguna yang ada secara berkala dengan getent passwd.
Saya memelihara skrip bash yang menjalankan semua langkah ini secara idempoten — saya bisa menjalankannya di server baru atau menjalankan ulang di server yang sudah ada tanpa merusak apa pun. Skrip ini mengatur konfigurasi SSH, mengonfigurasi UFW, menginstal dan mengonfigurasi fail2ban, mengaktifkan unattended-upgrades, menerapkan hardening sysctl, dan menghapus paket yang tidak diperlukan.