Linux yang baru dipasang belum otomatis aman. Hardening adalah proses mengurangi permukaan serangan, membatasi hak akses, memperkuat autentikasi, dan menyiapkan monitoring agar perubahan mencurigakan dapat diketahui lebih cepat. Panduan ini berfokus pada server Linux yang diakses melalui SSH.

1. Buat baseline sebelum perubahan

Catat hostname, alamat IP, port yang terbuka, service aktif, user, versi kernel, dan lokasi konfigurasi penting. Baseline membantu membedakan perubahan yang direncanakan dari perubahan yang tidak dikenal.

hostnamectl
ss -tulpn
systemctl --type=service --state=running
sudo getent passwd
sudo ufw status verbose

Pastikan kamu memiliki akses console atau recovery dari provider VPS sebelum mengubah SSH atau firewall. Kesalahan konfigurasi dapat mengunci administrator dari server.

2. Perbarui sistem dan aktifkan update keamanan

Mulai dengan memasang update terbaru:

sudo apt update
sudo apt full-upgrade -y
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades

Pada distribusi lain, gunakan package manager resmi. Hindari memasang binary dari sumber tidak dikenal. Setelah update kernel atau library penting, jadwalkan restart dan verifikasi service kembali aktif.

3. Gunakan user administratif tanpa login root

Buat user khusus administrator dan berikan akses sudo sesuai kebutuhan:

sudo adduser deployadmin
sudo usermod -aG sudo deployadmin
sudo visudo

Gunakan file di /etc/sudoers.d/ untuk aturan yang spesifik. Jangan memberikan NOPASSWD: ALL kecuali benar-benar diperlukan dan risikonya dipahami.

4. Perkuat konfigurasi SSH

Gunakan key-based authentication dengan Ed25519. Setelah key berhasil diuji pada sesi kedua, ubah konfigurasi SSH:

sudoedit /etc/ssh/sshd_config.d/ hardening.conf

Contoh pengaturan:

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
X11Forwarding no
AllowUsers deployadmin

Validasi sebelum reload:

sudo sshd -t
sudo systemctl reload ssh

Jangan menonaktifkan password login sebelum memastikan public key sudah berfungsi. Jika server dikelola oleh automation, masukkan user automation ke AllowUsers atau gunakan aturan yang setara.

5. Terapkan firewall default-deny

Buka hanya port yang benar-benar dibutuhkan aplikasi. Contoh menggunakan UFW:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from ADMIN_IP to any port 22 proto tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status numbered

Jika IP administrator berubah-ubah, gunakan VPN atau bastion host daripada membuka SSH ke seluruh internet. Jangan membuka port database, Redis, Docker API, atau dashboard internal secara publik.

6. Kelola service dan paket yang tidak diperlukan

Setiap service yang aktif menambah permukaan serangan. Identifikasi service yang tidak digunakan dan nonaktifkan setelah memastikan tidak menjadi dependensi:

systemctl list-unit-files --state=enabled
sudo systemctl disable --now nama-service
sudo apt purge nama-paket

Jangan mematikan service secara membabi buta. Periksa dependency, dokumentasi aplikasi, dan lakukan pengujian setelah perubahan.

7. Amankan permission dan secret

Secret aplikasi tidak boleh readable oleh semua user. Terapkan permission minimum:

sudo chown root:appgroup /etc/myapp/app.env
sudo chmod 640 /etc/myapp/app.env
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Hindari secret di command line karena dapat muncul di process list atau history. Gunakan environment file dengan permission terbatas, secret manager, atau systemd credentials sesuai kebutuhan.

8. Lindungi filesystem dan kernel

Gunakan filesystem mount options seperti nodev, nosuid, dan noexec hanya setelah memahami kebutuhan aplikasi. Aktifkan pembatasan kernel yang sesuai dengan threat model, misalnya parameter jaringan melalui sysctl. Uji perubahan di staging karena konfigurasi yang terlalu ketat dapat merusak container, monitoring, atau networking.

Untuk workload sensitif, pertimbangkan AppArmor atau SELinux. Kontrol mandatory access membantu membatasi dampak jika sebuah service berhasil dieksploitasi.

9. Pasang proteksi brute force dan monitoring

Fail2ban dapat membantu memblokir pola login gagal yang berulang:

sudo apt install fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status

Fail2ban bukan pengganti key authentication dan firewall. Kirim log penting ke lokasi terpusat atau platform monitoring agar penyerang tidak dapat menghapus seluruh jejak dari server.

10. Backup dan uji pemulihan

Backup harus terenkripsi, memiliki retensi yang jelas, dan tidak hanya berada di disk yang sama. Lakukan restore test berkala. Backup yang belum pernah dipulihkan belum dapat dianggap sebagai strategi pemulihan.

Dokumentasikan siapa yang memiliki akses, kapan key dibuat, kapan rotation dilakukan, dan bagaimana akses darurat dicabut.

11. Verifikasi setelah hardening

Ulangi pemeriksaan baseline:

ss -tulpn
sudo ufw status verbose
sudo journalctl -p warning -b
sudo systemctl --failed
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication'

Lakukan vulnerability scan dari lingkungan yang berwenang, periksa header dan TLS untuk service web, serta review konfigurasi secara berkala. Hardening adalah proses berulang karena kernel, paket, aplikasi, dan ancaman terus berubah.

Checklist ringkas

  • Sistem dan paket keamanan selalu diperbarui.
  • Login root dan password SSH dinonaktifkan setelah key diuji.
  • User administratif memakai sudo dengan hak minimum.
  • Firewall default-deny dan hanya membuka port yang dibutuhkan.
  • Service serta paket tidak terpakai dihapus atau dinonaktifkan.
  • Permission file secret dan SSH dibatasi.
  • AppArmor atau SELinux dipertimbangkan untuk service penting.
  • Log, alert, backup, dan restore test tersedia.
  • Konfigurasi dicatat dan direview setelah perubahan.

Kesimpulan

Hardening Linux yang baik bukan sekadar mengganti port SSH atau memasang satu tool keamanan. Hasil yang kuat berasal dari kombinasi patch rutin, identitas yang aman, least privilege, firewall, pembatasan service, logging, backup, dan pengujian pemulihan. Terapkan perubahan bertahap, simpan akses recovery, dan verifikasi setiap langkah agar keamanan meningkat tanpa mengorbankan ketersediaan server.