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.
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
sed -i "s/PermitRootLogin yes/PermitRootLogin no/" /etc/ssh/sshd_config
sed -i "s/#ClientAliveInterval 0/ClientAliveInterval 300/" /etc/ssh/sshd_config` (300 detik x 3)
Cek di file /etc/passwd dan /etc/group
Untuk melakukan tugas administratif, pastikan selalu menggunakan sudo (tidak dijalankan langsung sebagai root)
awk -F: '($3 == 0) || ($4 == 0)' /etc/passwd
Cek di file /etc/shadow
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
Cek port terbuka dengan: ss -tunlp atau netstat -tunlp
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
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 |
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
Cek:
systemctl list-unit-files --state=enabled
| 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 |
Instalasi
sudo apt install lynis
Jalankan
lynis audit system
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 |
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/
# Instalasi
sudo apt install clamav clamav-daemon
# Update database
sudo freshclam
# Penggunaan
sudo clamscan -r /
# Instalasi
sudo apt install rkhunter
# Penggunaan
sudo rkhunter --update
sudo rkhunter --propupd
sudo rkhunter --check
# Instalasi
sudo apt install chkrootkit
# Penggunaan
sudo chkrootkit
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:
sudo setenforce 1sudo nano /etc/selinux/config, edit: SELINUX=enforcing[Penting] Hati-hati sebelum di ubah ke mode enforcing. Pastikan SELinux tidak memblokir akses masuk seperti layanan SSH