Mengurangi permukaan serangan server secara sistematis: menerapkan CIS benchmarks, mengaktifkan SELinux dan AppArmor, serta membangun dari instalasi minimal yang berprinsip least privilege

Di episode 17 kita menjaga server tetap ter-update. Tapi keamanan bukan hanya soal meng-update — melainkan juga soal mengurangi permukaan serangan. Sebuah server yang di-hardening bisa tetap aman bahkan saat ada CVE yang belum di-patch, karena layanan yang tidak perlu sudah tidak berjalan, dan hak aksesnya dibatasi. Inilah inti episode 18: system hardening.
Mengapa episode ini penting? Karena mayoritas server yang di-hack bukan karena exploit canggih, melainkan karena dasar yang lemah: port terbuka tak perlu, service menganggur yang berjalan sebagai root, atau konfigurasi default yang longgar. Hardening adalah biaya murah yang mencegah kerugian besar — dan menjadi syarat wajib untuk compliance (episode 20).
Dua prinsip yang menaungi semua praktik hardening:
Kedua prinsip ini bekerja karena setiap paket, service, dan user adalah pintu masuk potensial.
CIS Benchmarks adalah daftar rekomendasi hardening yang disusun komunitas keamanan — semacam "standard emas" yang dipakai auditor di seluruh dunia. Strukturnya berbasis kontrol: setiap rekomendasi punya ID, level (1 = praktis, 2 = defense-in-depth), dan skrip verifikasi.
Contoh kontrol umum (CIS Benchmark untuk Linux):
| Kontrol | Aksi |
|---|---|
| File system permissions | Konfigurasi fstab yang aman, partisi terpisah |
| Service port | Matikan service yang tidak dipakai |
| Network hardening | Firewall aktif, disable IP forwarding jika tak perlu |
| User accounts | Kebijakan password kuat, lock akun tidak aktif |
| Audit | auditd aktif, log terpusat |
| Warning banner | Banner login |
Tool yang mempermudah: CIS-CAT, OpenSCAP, atau script audit open source seperti Lynis:
sudo lynis audit systemOutput Lynis memberikan hardening index (persentase) dan daftar kontrol yang perlu diperbaiki. Jalankan secara berkala dan bandingkan skornya dari waktu ke waktu.
Linux tradisional memakai DAC (Discretionary Access Control): siapa pun pemilik file mengontrol aksesnya. MAC (Mandatory Access Control) menambahkan lapisan di atasnya: kebijakan sistem yang tidak bisa diabaikan user — bahkan oleh root. Dua implementasi utama:
| Aspek | SELinux | AppArmor |
|---|---|---|
| Default | RHEL/Rocky, Fedora | Debian, Ubuntu, SUSE |
| Model | Label berbasis tipe (dikembangkan NSA) | Profile berbasis path |
| Kompleksitas | Lebih kompleks | Lebih mudah dipahami |
| Konteks | Container/K8s juga terintegrasi | Fokus host/aplikasi |
AppArmor membatasi program dengan profile — daftar path yang boleh diakses:
sudo aa-status
sudo apparmor_status | grep "profiles are loaded"Contoh mematikan sementara profile untuk troubleshooting:
sudo aa-complain /usr/sbin/nginx # mode log (tidak memblokir)
sudo aa-enforce /usr/sbin/nginx # mode enforce (memblokir)Mulailah dengan mode complain (hanya log), amati log pelanggaran di dmesg/journalctl, perbaiki profile, baru aktifkan enforce.
Warning
Mengaktifkan SELinux/AppArmor di server produksi yang berjalan bisa memblokir aplikasi yang sebelumnya lancar — karena perilakunya ditegakkan baru saat itu. Pola yang benar: aktifkan sejak provisioning (episode 9), test di staging (episode 17), dan gunakan mode complain dulu untuk mempelajari perilaku aplikasi sebelum enforce.
SELinux menggunakan label dan boolean untuk mengatur perilaku:
getenforce # Enforcing / Permissive / Disabled
sudo setsebool -P httpd_can_network_connect 1
sudo ausearch -m avc -ts recent # cek pelanggaran (AVC denials)Mode yang disarankan untuk produksi: Enforcing. Gunakan Permissive hanya sementara saat debugging — dan jangan pernah Disabled di produksi.
Saat provisioning (episode 9), pilih minimal install: Ubuntu Server minimal, Rocky Linux tanpa GUI. Setiap paket ditambahkan harus punya alasan. Contoh di Debian/Ubuntu, cek paket yang tidak dipakai:
sudo apt autoremove --purge -y
sudo apt list --installed | wc -lsystemctl list-units --type=service --state=running
sudo systemctl disable --now <service-tak-terpakai>Setiap service yang berjalan adalah pintu potensial. Biasakan meninjau daftar ini setelah instalasi.
Rangkuman langkah hardening yang bisa diterapkan segera:
# 1. Update semua paket
sudo apt update && sudo apt upgrade -y
# 2. Aktifkan firewall, hanya izinkan port yang dipakai
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80,443/tcp
sudo ufw enable
# 3. Amankan SSH: larang root login, wajib key
# (Edit /etc/ssh/sshd_config, lalu restart sshd)
# 4. Instal & aktifkan auditd
sudo apt install -y auditd
sudo systemctl enable --now auditd
# 5. Matikan service tak terpakai & bersihkan paket
sudo systemctl disable --now <unused>
sudo apt autoremove --purge -y
# 6. Audit dengan Lynis
sudo lynis audit systemDetail SSH hardening akan dibahas lebih dalam di episode 19; di sini cukup aktifkan fondasinya.
Inti yang harus dibawa pulang:
auditd, pembersihan paket.Di episode 19 selanjutnya kita mendalami lapisan keamanan akses: access control & PAM — SSH, sudo, dan multi-factor authentication. Sampai jumpa di episode 19!