Server yang terhubung ke internet merupakan target aktif. Dalam hitungan menit setelah sebuah instance baru aktif secara online, bot otomatis akan mulai memindai open ports dan mencoba berbagai kombinasi credentials umum. Hal ini bukanlah alasan untuk panik, melainkan urgensi untuk bertindak sebelum ancaman terjadi.
Server hardening adalah proses sistematis untuk memperkecil attack surface, menonaktifkan services yang tidak diperlukan, memperketat default configuration, serta menambahkan lapisan monitoring dan access control. Server hardening bukanlah pekerjaan sekali jadi, melainkan sebuah praktik yang berkelanjutan.
Panduan ini disusun berdasarkan pengalaman dan best practices komunitas Linux sysadmin global yang ditujukan bagi administrator pengelola Ubuntu Server di lingkungan production. Setiap langkah dilengkapi dengan command yang dapat dieksekusi langsung beserta metode pengujiannya, sehingga Anda tidak hanya melakukan konfigurasi, tetapi juga memverifikasi bahwa konfigurasi tersebut berfungsi dengan baik.
⚠️ Penting Sebelum Memulai
Lakukan backup data sebelum menerapkan perubahan apa pun pada server yang sedang berjalan. Pastikan Anda memiliki akses alternatif (VPS console, out-of-band access) untuk mengantisipasi risiko lockout saat mengonfigurasi SSH atau firewall.
1. Update & Patching Sistem
Langkah pertama dan paling fundamental dalam hardening adalah memastikan seluruh system packages telah diperbarui ke versi terbaru. Mayoritas eksploitasi di dunia nyata memanfaatkan kerentanan yang sudah diketahui publik dan telah tersedia patch-nya. Hal ini berarti sistem yang tidak ter-update merupakan sistem yang rentan.
1.1 Update Manual Pertama Kali
Segera setelah server baru selesai di-provisioning, jalankan full system update:
# Perbarui daftar paket dari repository
sudo apt update
# Upgrade semua paket yang memiliki versi baru
sudo apt upgrade -y
# Hapus paket lama yang tidak dibutuhkan
sudo apt autoremove -y
sudo apt autocleanJika kernel diperbarui, lakukan reboot pada server agar perubahan tersebut diterapkan:
sudo reboot1.2 Mengaktifkan Automatic Security Updates
Untuk lingkungan production, melakukan manual update setiap hari tidaklah realistis. Package unattended-upgrades memungkinkan sistem menerapkan security patches secara otomatis tanpa intervensi manual.
# Install paket unattended-upgrades
sudo apt install -y unattended-upgrades
# Konfigurasi interaktif (pilih Yes untuk mengaktifkan)
sudo dpkg-reconfigure --priority=low unattended-upgradesVerifikasi konfigurasi yang dihasilkan:
cat /etc/apt/apt.conf.d/20auto-upgradesOutput yang diharapkan:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";Edit /etc/apt/apt.conf.d/50unattended-upgrades untuk menyesuaikan konfigurasi, seperti mengaktifkan email notification atau automatic reboot:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades// Aktifkan reboot otomatis jika diperlukan (opsional, perhatikan jam reboot)
Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::Automatic-Reboot-Time "02:00";
// Kirim notifikasi email (isi dengan alamat email administrator)
Unattended-Upgrade::Mail "[email protected]";Pengujian: Verifikasi Automatic Updates
# Simulasikan dry-run tanpa menginstall apapun
sudo unattended-upgrade --dry-run --debug
# Periksa log automatic upgrades
cat /var/log/unattended-upgrades/unattended-upgrades.log2. Manajemen User & Hak Sudo
Menjalankan seluruh operasi sebagai root merupakan praktik yang sangat buruk. Satu kesalahan command dapat menghapus system files secara permanen. Selain itu, jika root session diambil alih oleh penyerang, mereka akan memiliki akses tak terbatas ke seluruh sistem. Solusinya: buat non-root user dengan hak akses sudo yang terbatas dan teraudit (audited).
2.1 Membuat User Baru
Hindari nama user yang umum seperti admin, user, atau sysadmin, nama-nama ini adalah target pertama dalam serangan dictionary.
# Buat user baru dengan home directory
sudo adduser namauser
# Ikuti prompt untuk mengatur password dan informasi user2.2 Memberikan Hak Sudo
# Tambahkan user ke grup sudo
sudo usermod -aG sudo namauser
# Verifikasi keanggotaan grup
groups namauser2.3 Nonaktifkan Login Root
Setelah non-root user dengan akses sudo siap, kunci akun root agar tidak dapat digunakan untuk direct login. Langkah ini akan dilanjutkan pada konfigurasi SSH, namun sebagai lapisan keamanan tambahan, kunci juga password root secara permanen:
# Kunci password akun root (tidak menghapus akun, hanya mencegah login dengan password)
sudo passwd -l root2.4 Verifikasi Tidak Ada User Non-Root dengan UID 0
Hanya akun root yang seharusnya memiliki UID 0. Kehadiran user lain dengan UID 0 merupakan indikasi adanya compromise atau kesalahan konfigurasi.
# Tampilkan semua akun dengan UID 0
awk -F: '($3 == "0") {print}' /etc/passwdmenonaktifkanOutput yang valid hanya:
root:x:0:0:root:/root:/bin/bash2.5 Mengunci Akun Sistem yang Tidak Digunakan
# Tampilkan akun yang memiliki login shell aktif
grep -vE '(false|nologin)$' /etc/passwd
# Kunci akun sistem yang tidak perlu login
sudo usermod -L daemon
sudo usermod -L bin
sudo usermod -L sys2.6 Membatasi Penggunaan sudo
Untuk lingkungan yang lebih ketat, Anda dapat membatasi commands tertentu yang diizinkan untuk dijalankan oleh user menggunakan visudo:
# Edit sudoers dengan aman menggunakan visudo
sudo visudoSebagai contoh pembatasan, user deploy hanya diizinkan untuk melakukan restart pada service nginx:
deploy ALL=(ALL) NOPASSWD: /bin/systemctl restart nginxPengujian: Verifikasi Hak Sudo
# Login sebagai user baru dan cek akses sudo
su - namauser
sudo whoami
# Output yang diharapkan: root
# Coba login sebagai root (seharusnya gagal jika password dikunci)
su - root
# Output yang diharapkan: su: Authentication failure3. Hardening SSH (Secure Shell)
SSH merupakan pintu masuk utama ke server Anda. Bagi penyerang, layanan ini adalah target nomor satu. Konfigurasi default SSH sudah cukup fungsional, namun jauh dari optimal untuk lingkungan production. SSH hardening mencakup penggunaan key-based authentication, menonaktifkan root login via SSH, membatasi allowed users, serta memperketat parameter kriptografi.
3.1 Generate SSH Key Pair
Autentikasi berbasis SSH key jauh lebih aman dibandingkan password. Key dengan ribuan bit entropi tidak dapat di-brute force dalam jangka waktu yang masuk akal. Jalankan command berikut pada mesin lokal Anda (bukan pada server):
# Di mesin lokal — generate key pair Ed25519 (lebih modern dan aman dari RSA)
ssh-keygen -t ed25519 -C "namauser@production-server"
# Salin public key ke server
ssh-copy-id -i ~/.ssh/id_ed25519.pub namauser@ip-serverAtau secara manual di server, tambahkan public key ke authorized_keys:
# Di server, sebagai namauser
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
# Paste isi file id_ed25519.pub dari mesin lokal
chmod 600 ~/.ssh/authorized_keys🚨 Kritis
Pastikan Anda sudah dapat melakukan login menggunakan SSH key SEBELUM menonaktifkan password authentication. Jika tidak, Anda akan mengalami lockout dari server.
3.2 Hardening Konfigurasi SSHD
Edit file konfigurasi SSH daemon:
sudo nano /etc/ssh/sshd_configTerapkan konfigurasi hardening berikut:
# ── Authentication ──────────────────────────────────────
# Nonaktifkan login langsung sebagai root via SSH
PermitRootLogin no
# Nonaktifkan autentikasi password — wajibkan SSH key
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
# Gunakan SSH Protocol 2 saja (Protocol 1 sudah deprecated)
Protocol 2
# Batasi jumlah percobaan autentikasi
MaxAuthTries 3
MaxSessions 3
# ── Port & Interface ────────────────────────────────────
# Opsional: ganti port default 22 untuk mengurangi scan bot
# Pastikan UFW sudah mengizinkan port baru sebelum mengubah ini
Port 22
# ── Access Control ──────────────────────────────────────
# Whitelist user yang diizinkan login via SSH
AllowUsers namauser
# Atau izinkan dari IP tertentu saja
# AllowUsers [email protected]
# Nonaktifkan .rhosts dan hosts.equiv
IgnoreRhosts yes
HostbasedAuthentication no
# ── Session ─────────────────────────────────────────────
# Putus koneksi idle setelah 5 menit (300 detik)
ClientAliveInterval 300
ClientAliveCountMax 2
# Nonaktifkan X11 forwarding jika tidak diperlukan
X11Forwarding no
# ── Cryptography (Modern Ciphers) ───────────────────────
# Gunakan cipher dan algoritma kunci yang kuat
Ciphers [email protected],[email protected],[email protected]
MACs [email protected],[email protected]
KexAlgorithms curve25519-sha256,[email protected],diffie-hellman-group16-sha512
# Nonaktifkan metode autentikasi yang tidak diperlukan
KerberosAuthentication no
GSSAPIAuthentication noTest konfigurasi, lalu restart SSH daemon:
# Validasi syntax konfigurasi tanpa restart
sudo sshd -t
# Jika tidak ada error, restart SSH
sudo systemctl restart sshPengujian: Verifikasi Hardening SSH
# Test login sebagai root (harus ditolak)
ssh root@ip-server
# Expected: Permission denied (publickey)
# Test login dengan password (harus ditolak)
ssh -o PreferredAuthentications=password namauser@ip-server
# Expected: Permission denied (publickey)
# Test login dengan SSH key (harus berhasil)
ssh -i ~/.ssh/id_ed25519 namauser@ip-server
# Expected: Login berhasil
# Verifikasi konfigurasi SSH yang aktif
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|maxauthtries|allowusers'4. Konfigurasi Firewall dengan UFW
UFW (Uncomplicated Firewall) merupakan frontend yang lebih user-friendly untuk iptables. Prinsip dasarnya: tolak seluruh inbound connections secara default, serta izinkan hanya koneksi yang benar-benar diperlukan. Setiap open port merupakan potensi attack vector.
🚨 Urutan Kritis
Selalu izinkan SSH port SEBELUM mengaktifkan firewall. Jika tidak, Anda akan segera mengalami lockout dari server.
4.1 Install dan Konfigurasi UFW
# Install UFW (biasanya sudah tersedia di Ubuntu)
sudo apt install -y ufw
# Atur kebijakan default: tolak semua masuk, izinkan semua keluar
sudo ufw default deny incoming
sudo ufw default allow outgoing
# PENTING: Izinkan SSH dulu sebelum enable firewall
sudo ufw allow 22/tcp comment 'SSH'
# Aktifkan firewall
sudo ufw enable
# Cek status
sudo ufw status verbose4.2 Mengizinkan Port Layanan Tambahan
Hanya buka ports yang memang dibutuhkan oleh services yang Anda jalankan:
# Web server
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# Jika menggunakan port SSH custom (misal 2222)
sudo ufw allow 2222/tcp comment 'SSH Custom Port'
# Izinkan dari IP tertentu saja (lebih aman)
sudo ufw allow from 203.0.113.10 to any port 22 comment 'SSH dari IP kantor'
# Blokir IP tertentu yang mencurigakan
sudo ufw deny from 185.220.101.0/244.3 Manajemen Rules UFW
# Lihat rules dengan nomor urut
sudo ufw status numbered
# Hapus rule berdasarkan nomor
sudo ufw delete 3
# Reload firewall setelah perubahan
sudo ufw reload💡 Tip Production
Untuk server yang hanya diakses dari office IP atau static IP tertentu, pertimbangkan untuk membatasi akses SSH hanya dari alamat tersebut menggunakan perintah ufw allow from IP_KANTOR to any port 22. Langkah ini secara drastis akan mengurangi exposure terhadap pemindaian (scanning) dari internet.
Pengujian: Verifikasi Firewall UFW
# Tampilkan status lengkap dengan rules
sudo ufw status verbose
# Verifikasi dari luar menggunakan nmap (dari mesin lain)
nmap -sV ip-server
# Hanya port yang diizinkan UFW yang harus terlihat sebagai 'open'
# Cek log UFW
sudo tail -f /var/log/ufw.log5. Proteksi Brute Force dengan Fail2Ban
Bahkan dengan password authentication yang telah dinonaktifkan, bot akan tetap mencoba koneksi SSH secara terus-menerus, sehingga menghabiskan resource dan memenuhi log files. Fail2Ban merupakan intrusion prevention system yang memantau log files, mendeteksi pola failed login, dan secara otomatis memblokir IP mencurigakan menggunakan iptables rules.
5.1 Instalasi Fail2Ban
sudo apt install -y fail2ban
# Aktifkan dan start service
sudo systemctl enable fail2ban
sudo systemctl start fail2ban5.2 Konfigurasi jail.local
Jangan pernah mengedit jail.conf secara langsung, karena file ini akan tertimpa saat proses update berlangsung. Sebagai gantinya, buatlah file jail.local:
# Salin template konfigurasi
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Edit konfigurasi lokal
sudo nano /etc/fail2ban/jail.localTerapkan konfigurasi berikut pada bagian [DEFAULT] dan [sshd]:
[DEFAULT]
# Durasi ban dalam detik (3600 = 1 jam)
bantime = 3600
# Jendela waktu pemantauan (600 detik = 10 menit)
findtime = 600
# Jumlah percobaan gagal sebelum banned
maxretry = 5
# Backend pemantauan log (systemd untuk Ubuntu modern)
backend = systemd
# IP yang tidak akan pernah di-ban (IP lokal, IP tim)
ignoreip = 127.0.0.1/8 ::1 203.0.113.10
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600Lakukan restart pada Fail2Ban setelah konfigurasi selesai diterapkan:
sudo systemctl restart fail2ban5.3 Manajemen Fail2Ban
# Lihat status semua jail yang aktif
sudo fail2ban-client status
# Lihat IP yang sedang di-ban untuk SSH
sudo fail2ban-client status sshd
# Unban IP tertentu secara manual
sudo fail2ban-client set sshd unbanip 1.2.3.4
# Ban IP secara manual
sudo fail2ban-client set sshd banip 1.2.3.4Pengujian: Verifikasi Fail2Ban
# Cek status service
sudo systemctl status fail2ban
# Cek daftar jail yang aktif
sudo fail2ban-client status
# Expected output: Number of jail: 1 — Jail list: sshd
# Monitor log Fail2Ban secara real-time
sudo tail -f /var/log/fail2ban.log
# Simulasi ban (opsional, lakukan dengan hati-hati di lingkungan production)
# Lakukan percobaan SSH login dengan wrong password sebanyak maxretry kali dari remote IP lain
# Kemudian, verifikasi apakah IP address tersebut muncul di dalam ban list:
sudo fail2ban-client status sshd6. Mengamankan Shared Memory
Shared memory (/run/shm) merupakan mekanisme efisien untuk berbagi data antar proses (inter-process communication). Namun, karena di-mount sebagai read/write secara default, area ini dapat dieksploitasi oleh malicious processes untuk meningkatkan privilege atau mengeksekusi malicious code. Dengan melakukan re-mount menggunakan opsi noexec dan nosuid, kita dapat mengeliminasi potensi ancaman tersebut.
6.1 Konfigurasi /etc/fstab
# Edit fstab
sudo nano /etc/fstabTambahkan baris berikut di bagian paling bawah:
tmpfs /run/shm tmpfs defaults,noexec,nosuid 0 0Terapkan perubahan tersebut tanpa melakukan reboot:
sudo mount -o remount /run/shmPengujian: Verifikasi Shared Memory
# Verifikasi opsi mount yang aktif
mount | grep /run/shm
# Expected: tmpfs on /run/shm type tmpfs (rw,nosuid,noexec,...)
# Coba eksekusi binary dari shm (seharusnya gagal)
cp /bin/ls /run/shm/test
/run/shm/test
# Expected: bash: /run/shm/test: Permission denied
rm /run/shm/test7. Kernel Hardening via Sysctl
Kernel parameters pada /proc/sys dapat dikonfigurasi untuk meningkatkan ketahanan jaringan dan sistem terhadap berbagai serangan, seperti IP spoofing, SYN flood, ICMP redirect, dan ancaman lainnya. Konfigurasi ini bersifat persistent melalui sysctl.d.
7.1 Buat File Konfigurasi Hardening
sudo nano /etc/sysctl.d/99-hardening.confMasukkan konfigurasi berikut:
## ── Network Security ─────────────────────────────────────
# Proteksi IP Spoofing (Reverse Path Filtering)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Abaikan ICMP broadcast (mencegah Smurf attack)
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Nonaktifkan source routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
# Nonaktifkan penerimaan ICMP redirect
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
# Nonaktifkan pengiriman ICMP redirect
net.ipv4.conf.all.send_redirects = 0
# Aktifkan SYN flood protection (SYN cookies)
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5
# Nonaktifkan IP forwarding (aktifkan hanya jika server ini router/gateway)
net.ipv4.ip_forward = 0
net.ipv6.conf.all.forwarding = 0
# Log suspicious packets (martian packets)
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
## ── Kernel Protection ────────────────────────────────────
# Batasi akses ke dmesg (log kernel)
kernel.dmesg_restrict = 1
# Batasi akses ke kernel pointer melalui /proc
kernel.kptr_restrict = 2
# Nonaktifkan magic SysRq key
kernel.sysrq = 0
# Batasi ptrace hanya untuk proses parent-child
kernel.yama.ptrace_scope = 1Terapkan konfigurasi tanpa reboot:
sudo sysctl -p /etc/sysctl.d/99-hardening.confPengujian: Verifikasi Kernel Parameters
# Verifikasi parameter yang diterapkan
sudo sysctl net.ipv4.tcp_syncookies
# Expected: net.ipv4.tcp_syncookies = 1
sudo sysctl net.ipv4.conf.all.rp_filter
# Expected: net.ipv4.conf.all.rp_filter = 1
sudo sysctl kernel.dmesg_restrict
# Expected: kernel.dmesg_restrict = 1
# Lihat semua parameter hardening yang aktif
sudo sysctl -a 2>/dev/null | grep -E 'rp_filter|syncookies|accept_redirects|log_martians'8. Menghapus Services yang Tidak Diperlukan
Setiap service yang berjalan merupakan potential attack surface. Legacy services seperti telnet, FTP, dan rsh mentransmisikan data, termasuk password dalam bentuk plaintext. Tidak ada alasan logis untuk membiarkan services tersebut terinstal pada lingkungan production.
8.1 Hapus Layanan Legacy yang Tidak Aman
# Hapus layanan usang dan tidak aman
sudo apt --purge remove -y \
xinetd \
nis \
yp-tools \
tftpd \
atftpd \
tftpd-hpa \
telnetd \
rsh-server \
rsh-redone-server
# Bersihkan dependensi yang tidak lagi diperlukan
sudo apt autoremove -y8.2 Audit Layanan yang Berjalan
# Lihat semua port yang sedang listening
sudo ss -tulpn
# Lihat semua service yang aktif
systemctl list-units --type=service --state=running
# Nonaktifkan service yang tidak dibutuhkan (contoh: avahi-daemon)
sudo systemctl disable avahi-daemon
sudo systemctl stop avahi-daemon8.3 Nonaktifkan IPv6 jika Tidak Digunakan
Jika infrastruktur Anda belum menggunakan IPv6, menonaktifkannya akan membantu memperkecil attack surface. Tambahkan konfigurasi berikut ke dalam /etc/sysctl.d/99-hardening.conf:
# Nonaktifkan IPv6 sepenuhnya (jika tidak digunakan)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1Pengujian: Audit Port Terbuka
# Hanya port yang Anda izinkan di UFW yang seharusnya listening
sudo ss -tulpn | grep LISTEN
# Konfirmasi telnet tidak bisa digunakan
telnet localhost 22
# Expected: command not found atau connection refused9. Automatic Security Audit dengan Lynis
Setelah menerapkan seluruh langkah di atas, gunakan Lynis, sebuah open-source security auditing tool untuk memverifikasi konfigurasi secara menyeluruh serta mendapatkan rekomendasi tambahan yang spesifik bagi sistem Anda. Lynis mengevaluasi ratusan aspek keamanan dan memberikan hardening index score.
9.1 Install dan Jalankan Lynis
# Install Lynis
sudo apt install -y lynis
# Jalankan audit sistem penuh
sudo lynis audit systemLynis akan menghasilkan laporan lengkap. Perhatikan bagian Warnings dan Suggestions, serta prioritaskan items dengan label [HIGH]:
9.2 Membaca Hasil Audit
# Lihat log audit lengkap
sudo cat /var/log/lynis.log
# Lihat hanya warnings dan suggestions
sudo grep -E "WARNING|SUGGESTION" /var/log/lynis.log
# Lihat hardening index score
sudo lynis audit system --quick 2>/dev/null | grep "Hardening index"💡 Tip
Jalankan Lynis secara berkala (misalnya setiap minggu melalui cron) dan bandingkan hardening index score dari waktu ke waktu. Peningkatan score mengindikasikan postur keamanan yang membaik, sedangkan penurunan score menandakan adanya perubahan konfigurasi yang perlu segera dievaluasi.
Pengujian: Interpretasi Hasil Lynis
# Lihat ringkasan hasil audit
sudo lynis show summary
# Target minimum untuk production server: Hardening Index >= 70
# Score di atas 80 mengindikasikan konfigurasi yang solidSecurity Checklist Akhir
Gunakan checklist ini untuk memverifikasi bahwa seluruh langkah hardening telah diterapkan sebelum server masuk ke lingkungan production:
- [ ] Seluruh system packages telah diperbarui ke versi terbaru (apt upgrade)
- [ ] Automatic security updates (unattended-upgrades) telah aktif dan dikonfigurasi
- [ ] Non-root user dengan akses sudo telah dibuat; nama user tidak bersifat umum atau generik
- [ ] Root login via SSH telah dinonaktifkan (PermitRootLogin no)
- [ ] Tidak terdapat non-root user dengan UID 0 di dalam /etc/passwd
- [ ] SSH key pair (Ed25519) telah di-generate dan dikonfigurasi
- [ ] Password authentication pada SSH telah dinonaktifkan (PasswordAuthentication no)
- [ ] Parameter AllowUsers pada sshd_config telah dikonfigurasi untuk whitelist user tertentu
- [ ] Parameter MaxAuthTries dan ClientAliveInterval pada SSH telah dikonfigurasi
- [ ] SSH cipher suites telah menggunakan algoritme modern
- [ ] UFW firewall telah aktif dengan kebijakan default deny incoming
- [ ] Hanya ports yang diperlukan yang terbuka pada konfigurasi UFW
- [ ] Fail2Ban telah terinstal serta aktif, dan jail sshd telah dikonfigurasi
- [ ] Shared memory (/run/shm) telah di-mount dengan opsi noexec dan nosuid
- [ ] Kernel parameters pada sysctl telah di-hardening (SYN cookies, rp_filter, dll.)
- [ ] Legacy services (telnet, rsh, FTP plaintext) telah dihapus dari sistem
- [ ] Ports yang tidak diperlukan telah dipastikan tidak dalam status listening (diverifikasi melalui ss -tulpn)
- [ ] Audit menggunakan Lynis telah dijalankan dan rekomendasi berlabel [HIGH] telah ditangani
- [ ] Backup konfigurasi telah dibuat sebelum dan sesudah hardening
Ringkasan Langkah Hardening
| # | Langkah | Tool / File | Prioritas |
|---|---|---|---|
| 1 | Update & Patching | apt, unattended-upgrades | 🔴 Kritis |
| 2 | Manajemen User & Sudo | adduser, visudo | 🔴 Kritis |
| 3 | Hardening SSH | /etc/ssh/sshd_config | 🔴 Kritis |
| 4 | Konfigurasi Firewall | ufw | 🔴 Kritis |
| 5 | Proteksi Brute Force | fail2ban | 🟠 Tinggi |
| 6 | Mengamankan Shared Memory | /etc/fstab | 🟠 Tinggi |
| 7 | Kernel Hardening | /etc/sysctl.d/99-hardening.conf | 🟠 Tinggi |
| 8 | Hapus Service Tidak Perlu | apt remove, systemctl | 🟡 Medium |
| 9 | Security Audit | lynis | 🟡 Medium |
Penutup
Hardening server bukan tindakan sekali jalan, ini adalah sikap berkelanjutan. Ancaman berkembang, kerentanan baru ditemukan, dan konfigurasi bisa berubah seiring waktu karena update software atau kebutuhan operasional baru. Setelah menyelesaikan semua langkah dalam panduan ini, Anda telah secara signifikan memperkecil attack surface Ubuntu Server Anda: akses remote terkontrol ketat melalui SSH key, firewall memblokir traffic yang tidak diizinkan, Fail2Ban melindungi dari brute force, dan kernel dikonfigurasi untuk menolak teknik eksploitasi jaringan yang umum. Keamanan yang solid bukan tentang satu pertahanan sempurna, melainkan tentang defense in depth: banyak lapisan perlindungan yang saling melengkapi, sehingga bahkan jika satu lapisan berhasil ditembus, lapisan berikutnya masih berdiri.
💡 Ingat
Dokumentasikan setiap perubahan konfigurasi yang Anda buat. Jalankan Lynis audit secara berkala. Pantau log server secara rutin. Serta selalu uji bahwa konfigurasi keamanan yang Anda terapkan benar-benar berfungsi sebelum server masuk production.




