Linux Server Hardening — Debian based

Daftar isi:


Bagian 1: Persiapan

Update Repositori & Package:

sudo apt update && sudo apt upgrade -y

Cek versi kernel:

uname -r

Cari apakah ada kerentanan di versi itu. Jika ada, segera upgrade.


Bagian 2: Keamanan Akses dan SSH

2.1 Ubah port standar

Perubahan port disarankan untuk dilakukan secara lokal, bukan melalui remote karena berpotensi putus koneksi di tengah jalan ketika sedang di setting

Sebelum merubah port ssh, pastikan dulu tidak ada lokal firewall atau jika ada lokal firewall dipastikan sudah ditambahkan policy allow port 23456

Pastikan juga jika sebelumnya sudah menggunakan SELinux atau AppArmor sudah di update untuk allow port 23456

sudo sed -i "s/#Port 22/Port 23456/" /etc/ssh/sshd_config

Cek listening port, pastikan port SSH sudah berubah:

ss -tunlp | grep ssh

# Atau
netstat -tunlp | grep 23456

Jika belum, kemungkinan sistem pakai Socket Activation. Jalankan perintah:

sudo systemctl status ssh.socket

Jika statusnya Active, maka konfigurasi di sshd_config akan diabaikan karena systemd “memaksa” port 22 tetap berjalan

Beritahu systemd untuk pindah port. Jalankan perintah edit ini:

sudo systemctl edit ssh.socket

Tambahkan atau edit baris berikut:

[Socket]
ListenStream=
ListenStream=23456

ListenStream= yang kosong pertama kali itu untuk menghapus port default 22

Muat ulang daemon dan restart socket:

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart ssh

2.2 Jangan izinkan login dengan user root

sed -i "s/PermitRootLogin yes/PermitRootLogin no/" /etc/ssh/sshd_config

2.3 Putus koneksi otomatis setelah tidak ada aktivitas

sed -i "s/#ClientAliveInterval 0/ClientAliveInterval 300/" /etc/ssh/sshd_config` (300 detik x 3)

Bagian 3: Manajemen User dan Hak Akses

3.1 Hapus user atau grup tidak terpakai

Cek di file /etc/passwd dan /etc/group

3.2 Selalu gunakan sudo

Untuk melakukan tugas administratif, pastikan selalu menggunakan sudo (tidak dijalankan langsung sebagai root)

3.3 Pastikan tidak ada user dengan id 0 dan group 0 selain root

awk -F: '($3 == 0) || ($4 == 0)' /etc/passwd

3.4 Pastikan tidak ada user dengan password kosong

Cek di file /etc/shadow


Bagian 4: Keamanan Jaringan

Cara mudah untuk cek apakah server sudah compromised:

lsof -i -nP | grep ESTABLISHED

Jika terlihat ada koneksi yang mencurigakan, segera tutup koneksi.

# kill [Process ID / PID]
# PID terlihat di kolom kedua pada output perintah sebelumnya

sudo kill 1234567

4.1 Tutup semua port, kecuali yang dibutuhkan

Cek port terbuka dengan: ss -tunlp atau netstat -tunlp

4.2 Aktifkan UFW

sudo systemctl enable --now ufw

Hanya izinkan koneksi masuk ke port yang dibutuhkan

ufw allow https

Proteksi dasar SSH

# Tolak IP yang coba login lebih dari 6x dalam 30 detik
sudo ufw limit ssh

4.3 Pasang iptables

Instalasi

sudo apt install iptables

Tolak koneksi berlebih untuk cegah DoS di port 80,443:

sudo iptables -I INPUT 1 -p tcp -m multiport --dports 80,443 -m connlimit --connlimit-above 20 --connlimit-mask 32 -j DROP

Izinkan koneksi loopback & yang sudah established:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Izinkan akses standar:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Tolak yang lain:

sudo iptables -P INPUT DROP
Perintah Deskripsi
sudo iptables -L -n Lihat rules standar
sudo iptables -L -n -v Lihat rules detail statistik
sudo iptables -L --line-numbers Lihat rules nomor baris
sudo iptables -S Lihat rules format skrip

4.4 Proteksi tambahan dengan fail2ban

Fungsinya untuk memproteksi terhadap serangan bruteforce dengan blokir IP

Instalasi

sudo apt install fail2ban

Buat salinan agar tidak tertimpa saat update:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Edit file jail.local:

[sshd]
enabled = true
port = ssh
bantime = 1d
findtime = 5m
maxretry = 3
backend = systemd -> jika pakai distro terbaru

Jika pakai ufw, tambahkan: banaction = ufw di bagian [DEFAULT]

Jika port SSH sudah diganti, sesuaikan di /etc/services

Cek status:

fail2ban-client status sshd

4.5 Matikan service tidak perlu

Cek:

systemctl list-unit-files --state=enabled

Bagian 5: Log, Audit dan Monitor

Perintah Deskripsi
who -H Lacak user yang login saat ini. membaca file /var/log/utmp
last -R Lacak pengguna yang sebelumnya pernah login. membaca file /var/log/wtmp
lastb Lacak upaya kegagalan login ke sistem. membaca file /var/log/btmp

5.1 Pakai lynis untuk audit keamanan sistem

Instalasi

sudo apt install lynis

Jalankan

lynis audit system

5.2 Pasang auditd

Instalasi

sudo apt install auditd

# Aktifkan
sudo systemctl enable --now auditd

Memantau File atau Direktori: auditctl -w [path_file] -p [izin] -k [label]

sudo auditctl -w /etc/passwd -p wa -k ubah-password

Memantau Panggilan Sistem (System Calls):

sudo auditctl -a exit,always -F arch=b64 -S unlink -k hapus-file

Buat aturan permanen

sudo nano /etc/audit/rules.d/audit.rules

Tambahkan atau edit:

-w /etc/shadow -p wa -k akses-shadow
-w /etc/ssh/sshd_config -p wa -k konfigurasi-ssh

Aktifkan perubahan:

sudo augenrules --load

Log ada di /var/log/audit/audit.log

Perintah Deskripsi
sudo ausearch -k ubah-password Cari event
sudo aureport -au Ringkasan laporan login
sudo aureport -c --failed Laporan Perintah yang Gagal
sudo aureport -f Ringkasan Akses File

Bagian 6: Pasang Malware Scanner

6.1 maldet

Instalasi

wget  http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar xzf maldetect-current.tar.gz
cd maldetect-*
./install.sh

Konfigurasi

sudo nano /usr/local/maldetect/conf.maldet

# Tambahkan atau edit
quarantine_hits="1"
quarantine_clean="1"

Jalankan

maldet -u
maldet -a /var/www/html/

6.2 clamAV

# Instalasi
sudo apt install clamav clamav-daemon

# Update database
sudo freshclam

# Penggunaan
sudo clamscan -r /

6.3 rkhunter

# Instalasi
sudo apt install rkhunter

# Penggunaan
sudo rkhunter --update
sudo rkhunter --propupd
sudo rkhunter --check

6.4 chkrootkit

# Instalasi
sudo apt install chkrootkit

# Penggunaan
sudo chkrootkit

Bagian 7: SELinux

Instalasi

sudo apt install policycoreutils selinux-utils selinux-basics

Cek status

sestatus

Aktifkan di Bootloader

sudo selinux-activate

Set ke mode permissive dulu sebelum reboot

sudo nano /etc/selinux/config

Edit -> SELINUX=permissive

Buat file penanda kernel saat proses booting

sudo touch /.autorelabel

Reboot

Cek port yang diizinkan

sudo semanage port -l

Daftarkan port kustom ke SELinux. e.g.,:

sudo semanage port -a 23456 -t ssh_port_t -p tcp
sudo semanage port -a 8000 -t http_port_t -p tcp

Jika port 8000 sudah digunakan oleh layanan lain dalam definisi SELinux, pakai -m (modify) sebagai ganti -a

Izinkan Reverse Proxy

sudo setbool -P httpd_can_network_connect 1

Jika muncul error semanage command not found, instal:

sudo apt install policycoreutils-python-utils

Cek apakah ada proses yang hampir diblokir

sudo ausearch -m avc -ts recent

Jika tidak ada output atau tidak ada pesan denied yang kritikal, berarti konfigurasi sudah benar

Lihat mode saat ini

getenforce

Aktifkan mode enforcing:

[Penting] Hati-hati sebelum di ubah ke mode enforcing. Pastikan SELinux tidak memblokir akses masuk seperti layanan SSH