Best Practice Server Hardening Linux, Berhenti Membiarkan Server Kamu Terbuka

Kamandanu Wijaya 22 Januari 2026 ⏱️ 5 menit baca
Lapisan Keamanan Server Linux: Dari Network hingga Data

Saya masih ingat betul pertama kali saya menyewa sebuah VPS murah untuk belajar deployment. Dengan semangat membara, saya menginstal sistem operasi Linux, memasukkan password root yang cukup sederhana, dan membiarkannya menyala di malam hari.

Di artikel ini, kita membahas server hardening Linux secara praktis agar kamu paham konteks dan penerapannya.

Esok paginya, saya iseng mengecek log sistem. Mata saya terbelalak melihat ribuan baris percobaan login SSH dari alamat IP yang tidak saya kenal di seluruh dunia. Ribuan robot sedang mencoba mendobrak pintu server saya setiap detiknya. Saat itulah saya sadar, menyalakan server di internet publik tanpa pengamanan ekstra adalah seperti meninggalkan rumah dengan pintu terbuka lebar di tengah keramaian.

Server hardening bukan sekadar teori dari buku teks keamanan. Ini adalah benteng pertahanan pertama antara aplikasi berharga kamu dan dunia luar yang penuh potensi ancaman. Dalam artikel ini, saya akan membagikan praktik terbaik mengamankan server Linux berdasarkan pengalaman nyata menangani berbagai lingkungan produksi.

Mengapa server hardening sangat penting?

Secara default, kebanyakan distribusi Linux hadir dengan konfigurasi yang mengutamakan kemudahan akses. Ini bagus untuk belajar secara lokal, tapi sangat berbahaya untuk server yang terekspos ke internet.

Tujuan utama dari Server Hardening adalah mengurangi Attack Surface (luas area serangan). Bayangkan server kamu adalah sebuah gedung. Gedung dengan 50 pintu tanpa penjaga tentu lebih mudah disusupi daripada gedung dengan 1 pintu yang dijaga ketat oleh petugas keamanan bersenjata.

Hardening adalah proses menutup pintu-pintu yang tidak perlu, mengganti gembok yang lemah dengan gembok modern, dan memasang kamera pengawas di setiap sudut.

Visualisasi Pengurangan Attack Surface


Langkah 1: memperkuat barisan terdepan (SSH hardening)

SSH (Secure Shell) adalah pintu utama kamu masuk ke server. Karena ini pintu utama, penyerang juga akan memprioritaskan pintu ini.

Langkah pertama yang saya lakukan di setiap server baru adalah mengamankan konfigurasinya di /etc/ssh/sshd_config.

Gunakan key-based authentication

Berhentilah menggunakan password. Password sekuat apa pun tetap bisa dicoba dengan metode brute force. Menggunakan SSH Key jauh lebih aman karena penyerang harus memiliki file kunci privat kamu untuk bisa masuk.

Matikan akses root dan password

Saya selalu mematikan login sebagai user root serta menonaktifkan autentikasi password sepenuhnya setelah saya berhasil masuk menggunakan SSH Key.

Contoh konfigurasi SSH yang saya rekomendasikan:

# Edit file /etc/ssh/sshd_config
# Temukan dan ubah parameter berikut:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3

Setelah mengubahnya, jangan lupa perintah untuk restart service SSH: sudo systemctl restart ssh

Tips Pengalaman: Sebagian orang menyarankan untuk mengganti port default SSH (22) ke port lain (misal 2222). Ini tidak membuat server kamu “tidak bisa ditembus”, tapi sangat efektif untuk mengurangi kebisingan log dari robot-robot pemindai otomatis. Namun, pastikan kamu tidak kesulitan sendiri saat melakukan integrasi dengan tim lain.

Alur Hardening SSH


Tambahan SSH hardening yang sering diabaikan

Beberapa parameter tambahan di /etc/ssh/sshd_config yang membuat SSH lebih ketat:

AllowUsers adminops deploy
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
X11Forwarding no
AllowTcpForwarding no

Penjelasan singkat:

  • AllowUsers: hanya user tertentu yang bisa SSH.
  • LoginGraceTime: batasi waktu login.
  • ClientAlive*: putuskan koneksi idle.
  • X11Forwarding dan AllowTcpForwarding: matikan jika tidak perlu.

Setelah perubahan, validasi config:

sshd -t
sudo systemctl reload ssh

Langkah 2: manajemen pengguna dan hak akses

Salah satu prinsip dasar keamanan adalah Least Privilege (hak akses terkecil). Seseorang seharusnya hanya memiliki akses yang benar-benar mereka butuhkan untuk melakukan pekerjaan mereka.

Jangan gunakan user root untuk tugas harian

Selalu buat user biasa dengan hak akses sudo. Dengan begitu, kamu tidak akan sengaja menjalankan perintah yang merusak seluruh sistem sebagai root, dan setiap perintah yang menggunakan hak akses tinggi akan tercatat dalam log.

# Menambah user baru
sudo adduser kamandanu

# Memberikan hak akses sudo
sudo usermod -aG sudo kamandanu

Hapus atau kunci akun-akun yang tidak digunakan (default users) yang sering ada pada beberapa provider VPS untuk memperkecil celah.


Langkah 2.1: sudoers dan audit akses

Jangan berikan sudo tanpa kontrol. Gunakan visudo untuk mengatur siapa yang boleh apa:

sudo visudo

Contoh aturan sederhana:

%admin  ALL=(ALL) ALL
deploy  ALL=(ALL) NOPASSWD:/bin/systemctl restart nginx

Dengan ini, user deploy hanya boleh restart Nginx, bukan akses root penuh.


Langkah 3: memasang pagar keamanan (firewall)

Jika server kamu adalah rumah, firewall adalah pagar depannya. Firewall memastikan bahwa hanya lalu lintas data yang diizinkan saja yang boleh lewat.

Di sistem berbasis Ubuntu atau Debian, saya sangat menyukai UFW (Uncomplicated Firewall) karena kesederhanaannya namun cukup kuat.

# Pastikan default-nya adalah menolak semua koneksi masuk
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Hanya buka port yang benar-benar kamu butuhkan
sudo ufw allow 22/tcp    # SSH
sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS

# Aktifkan firewall
sudo ufw enable

Cek status port yang terbuka dengan perintah:

sudo ufw status verbose

Sebagai seorang sysadmin, saya juga sering memeriksa layanan apa saja yang sedang “mendengarkan” koneksi masuk menggunakan perintah ini untuk memastikan tidak ada aplikasi tersembunyi yang membuka port tanpa sepengetahuan saya:

sudo ss -tulpn

Filtrasi Port Firewall


Firewall lanjutan: rate limit dan default deny

UFW mudah, tapi di bawahnya tetap menggunakan iptables/nftables. Untuk kasus tertentu, kamu bisa tambahkan rate limit agar brute-force makin sulit:

sudo ufw limit 22/tcp

Jika kamu menggunakan distro modern, pertimbangkan nftables langsung untuk kontrol penuh.


Langkah 4: pencegahan otomatis dengan fail2ban

Bahkan setelah kamu mengubah port SSH atau mematikan password, robot penyerang tetap akan mencoba “getok pintu” berkali-kali. Ini bisa membebani log sistem kamu.

Di sinilah Fail2ban berperan. Fail2ban memantau log autentikasi kamu (/var/log/auth.log) dan secara otomatis memblokir IP yang gagal login berkali-kali menggunakan firewall sistem.

Instalasi dan konfigurasi dasar:

sudo apt install fail2ban

Saya biasanya membuat file jail.local untuk mengatur durasi blokir. Jika seseorang gagal login 3 kali dalam waktu singkat, saya ban IP mereka selama 24 jam. Ini sudah lebih dari cukup untuk membuat robot pemindai menyerah.


Langkah 5: hardening kernel dengan sysctl

Beberapa parameter kernel membantu mengurangi risiko serangan network:

sudo sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
sudo sysctl -w net.ipv4.conf.all.rp_filter=1
sudo sysctl -w net.ipv4.conf.all.accept_source_route=0
sudo sysctl -w net.ipv4.conf.all.accept_redirects=0

Agar permanen, simpan di /etc/sysctl.d/99-hardening.conf lalu:

sudo sysctl --system

Langkah 6: keamanan berbasis pemeliharaan (update & patch)

Server secanggih apa pun akan menjadi lemah jika sistem operasinya tidak pernah diperbarui. Celah keamanan (vulnerability) baru ditemukan setiap hari.

Saya pribadi selalu mengaktifkan Unattended Upgrades di server Linux saya. Ini memungkinkan server untuk mendownload dan menginstal pembaruan keamanan secara otomatis tanpa intervensi saya.

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Dengan langkah ini, saya bisa tidur lebih nyenyak karena tahu bahwa server saya memiliki patch keamanan terbaru bahkan saat saya tidak sedang memantaunya.


Langkah 7: monitoring dan logging

Keamanan bukan hanya tentang memasang gembok, tapi juga tentang mengetahui kapan seseorang mencoba merusaknya.

Luangkan waktu sejenak untuk memeriksa log autentikasi server kamu sesekali:

sudo tail -f /var/log/auth.log

Kamu akan terkejut melihat seberapa aktif dunia luar mencoba masuk ke server kamu. Selain itu, pastikan kamu memiliki strategi backup yang teratur. Backup bukanlah alat pengamanan dalam arti mencegah serangan, tapi itu adalah jaring pengaman terakhir jika server kamu berhasil ditembus atau saat ada kerusakan data.

Tambahan yang saya sarankan:

  • Auditd untuk audit aktivitas sistem:
    sudo apt install auditd
    sudo systemctl enable --now auditd
  • AIDE untuk integritas file sistem:
    sudo apt install aide
    sudo aideinit
  • Centralized logging (ELK/Graylog/Cloud logging) agar log tidak hilang kalau server down.

Checklist hardening sederhana saya

Setiap kali saya menyalakan server baru, ini adalah checklist minimal yang saya lakukan:

  1. Update semua paket sistem (apt update && apt upgrade).
  2. Buat user non-root dengan sudo.
  3. Pasang SSH Key dan nonaktifkan autentikasi password.
  4. Matikan PermitRootLogin.
  5. Konfigurasi UFW (hanya buka port 22, 80, 443).
  6. Instal dan aktifkan Fail2ban.
  7. Terapkan hardening sysctl dasar.
  8. Aktifkan otomatisasi update keamanan.
  9. Pasang audit/log monitoring (auditd/central log).
  10. Matikan layanan (services) yang tidak digunakan.

Yang tidak diselesaikan oleh hardening

Satu hal yang harus kamu pahami: Hardening server tidak mengamankan aplikasi kamu yang buruk. Jika kamu mengamankan server dengan sangat ketat tapi aplikasi web kamu memiliki celah SQL Injection atau password aplikasi yang lemah (admin123), server kamu tetap bisa dikendalikan oleh penyerang melalui celah aplikasi tersebut.

Hardening adalah mengamankan “wadahnya”. Isi dari wadah tersebut (aplikasi/kode) tetap menjadi tanggung jawab developer.

Penutup

Dulu, saya menganggap langkah-langkah di atas sebagai pekerjaan tambahan yang melelahkan. Namun sekarang, langkah-langkah ini sudah menjadi ritual wajib bagi saya setiap kali melakukan deployment. Bedanya hanya butuh sekitar 15 menit ekstra untuk mengamankan server, tapi itu bisa menyelamatkan kita dari pusing berhari-hari akibat kehilangan data atau server yang disusupi.

Ingat, keamanan adalah proses berkelanjutan, bukan sekadar sekali pasang lalu ditinggal. Tetaplah waspada, pantau log kamu, dan jangan pernah berhenti belajar.

Hardening server adalah langkah pertama. Pastikan juga kamu memahami cara troubleshooting production ketika ada masalah, seperti yang saya bahas di studi kasus container Docker yang crash dan studi kasus LVM error.

Apakah kamu punya ritual khusus saat mengamankan server baru? Atau ada pengalaman pahit yang mengajari kamu tentang pentingnya keamanan? Yuk, berbagi di kolom komentar! Selamat mengamankan infrastruktur kamu!


Semoga pembahasan server hardening Linux ini membantu kamu mengambil keputusan yang lebih tepat di lapangan.

Checklist Implementasi

  • Uji langkah di lab terlebih dulu sebelum produksi.
  • Dokumentasikan konfigurasi, versi, dan langkah rollback.
  • Aktifkan monitoring + alert untuk komponen yang diubah.
  • Audit akses dan terapkan prinsip least privilege.

Butuh Bantuan?

Jika ingin implementasi aman di produksi, saya bisa bantu assessment, eksekusi, dan hardening.

Hubungi Saya
Kamandanu Wijaya

Tentang Penulis

Kamandanu Wijaya

IT Infrastructure & Network Administrator

Administrator infrastruktur & jaringan dengan pengalaman enterprise 14+ tahun, fokus stabilitas, keamanan, dan automasi.

Sertifikasi: Google IT Support, Cisco Networking Academy, DevOps.

Lihat Profil

Butuh Solusi IT?

Tim DoWithSudo siap membantu setup server, VPS, dan sistem keamanan lo.

Hubungi Kami

Artikel Terkait

WhatsApp