Studi Kasus Infrastruktur
Server yang diamankan memiliki layanan:
- Nginx (Web Server)
- WordPress (3–4 Website)
- MariaDB (Database)
- Bind9 (DNS Server)
- Mail Server (Postfix, Dovecot, OpenDKIM)
Server dengan banyak service dalam satu VPS memiliki attack surface yang besar, sehingga membutuhkan pendekatan keamanan berlapis (layered security), bukan hanya firewall dasar.
Tujuan Part 1:
- Hardening sistem operasi Ubuntu 24
- Pengamanan akses SSH
- Konfigurasi firewall dan network security
- Hardening service utama (Nginx, MariaDB, Mail, Bind9)
- Fondasi monitoring dan logging keamanan
1. Update dan Patch Sistem (Langkah Wajib)
Sistem yang tidak diperbarui merupakan target utama eksploitasi karena kerentanan lama sering sudah diketahui publik.
Perbarui seluruh paket:
sudo apt update && sudo apt upgrade -y
sudo apt dist-upgrade -y
Aktifkan automatic security updates:
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure unattended-upgrades
Manfaat:
- Patch kerentanan kernel
- Update security patch otomatis
- Mengurangi risiko zero-day exploit lama
2. Hardening Akses SSH (Keamanan Pintu Utama Server)
2.1 Nonaktifkan Login Root dan Password
Edit konfigurasi SSH:
sudo nano /etc/ssh/sshd_config
Ubah parameter berikut:
Port 8801
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Restart service SSH:
sudo systemctl restart ssh
Penjelasan:
- Disable root login mencegah brute force langsung ke akun administrator
- Disable password authentication mencegah serangan dictionary attack
- Public key jauh lebih aman dibanding password
2.2 Gunakan SSH Key Authentication (Sangat Direkomendasikan)
Di komputer lokal:
ssh-keygen -t ed25519
ssh-copy-id -p 8801 user@IP_SERVER
Keuntungan:
- Hampir mustahil di-bruteforce
- Standar keamanan server produksi
- Lebih aman untuk akses jarak jauh
3. Firewall dan Network Security (UFW)
Install UFW:
sudo apt install ufw -y
Konfigurasi default policy:
sudo ufw default deny incoming
sudo ufw default allow outgoing
Buka hanya port yang diperlukan:
sudo ufw allow 8801/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 25/tcp # SMTP
sudo ufw allow 587/tcp # Mail Submission
sudo ufw allow 993/tcp # IMAPS
sudo ufw allow 53 # DNS (Bind9)
Aktifkan firewall:
sudo ufw enable
sudo ufw status verbose
Catatan keamanan:
Port database (3306) sebaiknya tidak dibuka ke publik kecuali benar-benar diperlukan.
4. Audit dan Nonaktifkan Service yang Tidak Digunakan
Semakin sedikit service aktif, semakin kecil permukaan serangan.
Cek port terbuka:
ss -tulnp
Cek service aktif:
systemctl list-units --type=service --state=running
Nonaktifkan service yang tidak diperlukan:
sudo systemctl disable nama-service
sudo systemctl stop nama-service
5. Hardening Kernel dan Network Stack
Edit konfigurasi sysctl:
sudo nano /etc/sysctl.conf
Tambahkan konfigurasi berikut:
net.ipv4.tcp_syncookies = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
Terapkan konfigurasi:
sudo sysctl -p
Fungsi:
- Mitigasi SYN flood attack
- Perlindungan terhadap IP spoofing
- Mengurangi risiko network reconnaissance
6. Hardening MariaDB (Database Security)
Edit konfigurasi MariaDB:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Pastikan binding hanya lokal:
bind-address = 127.0.0.1
Jalankan secure installation:
sudo mysql_secure_installation
Rekomendasi pengamanan:
- Hapus anonymous user
- Nonaktifkan remote root login
- Hapus test database
- Gunakan password kuat untuk root database
Alasan:
Database adalah target utama pencurian data dan privilege escalation.
7. Hardening Nginx (Web Server Security)
Edit konfigurasi utama:
sudo nano /etc/nginx/nginx.conf
Tambahkan:
server_tokens off;
client_max_body_size 20M;
Tambahkan security headers di setiap server block:
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "no-referrer-when-downgrade";
Manfaat:
- Mengurangi fingerprinting server
- Mitigasi clickjacking
- Perlindungan dasar terhadap XSS dan MIME sniffing
8. Hardening Mail Server (Postfix, Dovecot, OpenDKIM)
Edit konfigurasi Postfix:
sudo nano /etc/postfix/main.cf
Pastikan konfigurasi berikut:
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
Tujuan:
- Mencegah open relay
- Menghindari penyalahgunaan server untuk spam
- Meningkatkan reputasi IP mail server
9. Hardening Bind9 (DNS Security)
Edit konfigurasi:
sudo nano /etc/bind/named.conf.options
Tambahkan:
recursion no;
allow-transfer { none; };
version "not disclosed";
Penjelasan:
- Mencegah DNS amplification attack
- Menyembunyikan versi Bind9 dari attacker
- Mencegah zone transfer ilegal
10. Install Fail2Ban (Anti Brute Force Protection)
Install Fail2Ban:
sudo apt install fail2ban -y
Buat konfigurasi lokal:
sudo nano /etc/fail2ban/jail.local
Contoh konfigurasi dasar:
[sshd]
enabled = true
port = 8801
maxretry = 5
bantime = 1h
Restart Fail2Ban:
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban
Fungsi:
- Blokir otomatis brute force SSH
- Proteksi login attack WordPress
- Proteksi layanan mail dari login abuse
11. Logging dan Audit Security
Install audit daemon:
sudo apt install auditd -y
sudo systemctl enable auditd
sudo systemctl start auditd
Lokasi log penting:
/var/log/auth.log
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/mail.log
Manfaat logging:
- Deteksi aktivitas mencurigakan
- Investigasi insiden keamanan
- Monitoring percobaan login ilegal
12. Praktik Keamanan Tambahan yang Direkomendasikan
Beberapa praktik profesional yang sering diabaikan pemula:
- Gunakan user non-root untuk operasional server
- Backup database harian (mysqldump atau backup otomatis)
- Gunakan SSL/TLS untuk semua website (HTTPS wajib)
- Batasi permission file WordPress (chmod dan chown yang benar)
- Pisahkan network service jika memungkinkan (frontend dan backend)
- Gunakan password kuat dan unik untuk setiap service
- Monitor penggunaan resource dan trafik server secara berkala
Kesimpulan Part 1
Setelah seluruh hardening di atas diterapkan, server akan memiliki peningkatan keamanan signifikan:
- Lebih tahan terhadap brute force attack
- Risiko exploit service berkurang
- Database tidak terekspos publik
- Mail server tidak menjadi open relay
- DNS lebih aman dari abuse
- Fondasi siap untuk implementasi IDS/IPS dan WAF pada tahap lanjutan
Part 1 ini merupakan fondasi keamanan wajib sebelum masuk ke tingkat lanjutan seperti Intrusion Detection System (Snort/Suricata), Web Application Firewall (ModSecurity), dan Security Monitoring terpusat yang akan dibahas pada Part 2.
Pada tahap ini kita akan membahas:
- Konsep IDS vs IPS
- Implementasi Snort atau Suricata
- Integrasi dengan firewalld (auto blocking)
- Web Application Firewall (ModSecurity untuk Nginx)
- Malware scanning
- Monitoring dan alerting real-time
- Rekomendasi arsitektur keamanan untuk VPS 1–2 GB RAM
— Advanced Security & Intrusion Detection
1. Memahami IDS dan IPS
Sebelum instalasi, penting memahami konsepnya.
IDS (Intrusion Detection System)
- Mendeteksi aktivitas mencurigakan
- Mengirim alert
- Tidak langsung memblokir
IPS (Intrusion Prevention System)
- Mendeteksi
- Langsung memblokir serangan
Snort dan Suricata bisa berjalan dalam mode IDS maupun IPS.
Untuk VPS kecil (1–2 GB RAM), Suricata biasanya lebih stabil dan modern dibanding Snort versi lama.
2. Rekomendasi: Gunakan Suricata (Lebih Modern dari Snort)
Walaupun kamu menyebut Snort, secara praktik produksi saat ini banyak administrator beralih ke Suricata karena:
- Multi-threaded (lebih efisien CPU)
- Lebih aktif dikembangkan
- Integrasi firewall lebih mudah
Install Suricata:
sudo apt update
sudo apt install suricata -y
Cek interface jaringan:
ip a
Biasanya:
- eth0
- ens3
Edit konfigurasi:
sudo nano /etc/suricata/suricata.yaml
Cari bagian:
af-packet:
Sesuaikan interface dengan milikmu:
- interface: eth0
3. Aktifkan Mode IPS (Inline dengan NFQUEUE)
Agar Suricata bisa memblokir trafik, gunakan mode NFQUEUE.
Edit suricata.yaml dan pastikan:
nfqueue:
- id: 0
accept-mark: 1
repeat-mark: 1
Kemudian hubungkan dengan firewalld.
Tambahkan rule iptables (yang dipakai firewalld di backend):
sudo firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -j NFQUEUE --queue-num 0
sudo firewall-cmd --runtime-to-permanent
Restart Suricata:
sudo systemctl restart suricata
sudo systemctl enable suricata
Sekarang Suricata bisa menjadi IPS (bukan hanya IDS).
4. Update Rule Deteksi (Sangat Penting)
Rule default terlalu minim.
Gunakan Emerging Threats rule:
sudo suricata-update
Restart:
sudo systemctl restart suricata
Log alert bisa dilihat di:
/var/log/suricata/fast.log
5. Integrasi Alert Otomatis (Security Alerting)
Kita bisa buat sistem notifikasi sederhana.
Contoh monitoring alert real-time:
tail -f /var/log/suricata/fast.log
Untuk alert otomatis via email, bisa buat script sederhana:
sudo nano /usr/local/bin/suricata-alert.sh
Isi contoh:
#!/bin/bash
tail -Fn0 /var/log/suricata/fast.log | \
while read line ; do
echo "$line" | mail -s "SURICATA ALERT" admin@domain.com
done
Buat executable:
sudo chmod +x /usr/local/bin/suricata-alert.sh
Jalankan via systemd service agar selalu aktif.
6. Web Application Firewall (ModSecurity untuk Nginx)
Karena kamu menjalankan WordPress, ini sangat penting.
Install:
sudo apt install libnginx-mod-http-modsecurity -y
Aktifkan modul:
sudo nano /etc/nginx/nginx.conf
Tambahkan di dalam http block:
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
Install OWASP Core Rule Set:
sudo apt install modsecurity-crs -y
Aktifkan rule OWASP untuk:
- SQL Injection
- XSS
- Remote File Inclusion
- WordPress exploit
Restart Nginx:
sudo systemctl restart nginx
7. Malware Scanner (Tambahan Penting untuk WordPress)
Install ClamAV:
sudo apt install clamav clamav-daemon -y
sudo freshclam
Scan manual:
clamscan -r /var/www/
Untuk scan otomatis harian, gunakan cron.
8. Hardening Tambahan Firewalld
Cek zone aktif:
sudo firewall-cmd --get-active-zones
Pastikan hanya service yang diperlukan:
sudo firewall-cmd --list-all
Batasi rate SSH:
sudo firewall-cmd --permanent --add-rich-rule='rule service name="ssh" limit value="5/m" accept'
sudo firewall-cmd --reload
Ini membatasi percobaan login berlebihan.
9. Monitoring Profesional (Level Lebih Tinggi)
Jika ingin lebih serius, pertimbangkan:
- Wazuh (SIEM + IDS)
- Grafana + Prometheus
- Centralized log server
- Fail2Ban terintegrasi dengan Suricata
Namun untuk VPS kecil, Suricata + Fail2Ban + ModSecurity sudah cukup kuat.
10. Rekomendasi Arsitektur Aman untuk 1 VPS
Karena semua service ada di satu server:
Idealnya:
- Database bind ke localhost
- DNS recursion dimatikan
- Mail server tidak open relay
- IDS aktif
- WAF aktif
- Fail2Ban aktif
- Backup otomatis
Untuk skala lebih besar:
Pisahkan menjadi:
- Server Web
- Server Mail
- Server DNS
- Server Database
Namun untuk pembelajaran, satu VPS masih wajar.
Setelah Part 2 Server Kamu Akan:
- Memiliki IDS/IPS aktif
- Bisa mendeteksi dan memblokir serangan otomatis
- Memiliki Web Application Firewall untuk WordPress
- Memiliki malware scanning
- Memiliki alert keamanan real-time
- Lebih tahan terhadap exploit massal bot internet
Kalau kamu mau, Part 3 bisa masuk ke:
- Advanced log centralization
- Honeypot untuk jebak attacker
- Automatic IP blacklist global
- Integrasi dengan Cloudflare
- Security hardening khusus WordPress (file permission, wp-config lockdown)
- Email reputation protection (SPF, DKIM, DMARC detail)
Part ini masuk level semi-profesional (mendekati praktik production security). Fokusnya bukan hanya “mencegah serangan”, tapi juga:
- Mendeteksi anomali lebih cepat
- Mengumpulkan log terpusat
- Menjebak attacker (honeypot)
- Otomatis blacklist IP berbahaya
- Hardening khusus WordPress dan Mail Server
Semua tetap disesuaikan untuk VPS tunggal yang menjalankan:
Nginx + WordPress + MariaDB + Bind9 + Postfix + Dovecot + OpenDKIM + Suricata + Firewalld.
— Advanced Security Monitoring & Defensive Architecture
1. Centralized Logging (Fondasi Monitoring Profesional)
Server tanpa log terpusat = buta terhadap serangan.
Minimal log yang wajib dimonitor:
/var/log/auth.log(login & SSH)/var/log/nginx/access.log/var/log/nginx/error.log/var/log/mail.log/var/log/suricata/fast.log/var/log/fail2ban.log
1.1 Install Rsyslog (Jika belum aktif penuh)
sudo apt install rsyslog -y
sudo systemctl enable rsyslog
sudo systemctl start rsyslog
1.2 Pisahkan Log Berdasarkan Service (Best Practice)
Buat direktori log khusus:
sudo mkdir -p /var/log/security
Edit konfigurasi rsyslog:
sudo nano /etc/rsyslog.d/50-security.conf
Contoh konfigurasi:
if $programname == 'sshd' then /var/log/security/ssh.log
if $programname == 'nginx' then /var/log/security/nginx.log
if $programname == 'postfix' then /var/log/security/mail.log
& stop
Restart:
sudo systemctl restart rsyslog
Manfaat:
- Investigasi insiden lebih cepat
- Log tidak bercampur
- Monitoring lebih terstruktur
2. Log Monitoring Otomatis (Logwatch)
Install Logwatch:
sudo apt install logwatch -y
Jalankan laporan harian manual:
sudo logwatch --detail high --mailto admin@domain.com --range today
Atur otomatis via cron:
sudo nano /etc/cron.daily/00logwatch
Logwatch akan mengirim ringkasan:
- Failed SSH login
- Suspicious activity
- Service error
- Attack pattern dasar
3. SIEM Ringan (Wazuh Agent — Level Enterprise Monitoring)
Jika ingin monitoring tingkat enterprise namun masih di 1 VPS, gunakan Wazuh agent (ringan).
Install dependencies:
sudo apt install curl apt-transport-https unzip -y
Install Wazuh Agent:
curl -s https://packages.wazuh.com/4.x/apt/install.sh | sudo bash
sudo apt install wazuh-agent -y
Fungsi Wazuh:
- File integrity monitoring
- Rootkit detection
- Log correlation
- Intrusion detection tambahan
- Compliance monitoring (PCI, CIS benchmark)
Catatan:
Jika RAM < 2 GB, gunakan hanya agent tanpa server Wazuh lokal.
4. Honeypot (Menjebak Attacker & Scanner Bot)
Honeypot sangat efektif untuk:
- Mendeteksi scanner bot internet
- Mengumpulkan IP attacker
- Menambah threat intelligence
Rekomendasi ringan: Cowrie (SSH Honeypot)
Install dependency:
sudo apt install git python3-venv python3-pip -y
Install Cowrie:
cd /opt
sudo git clone https://github.com/cowrie/cowrie.git
cd cowrie
sudo python3 -m venv cowrie-env
source cowrie-env/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
Jalankan honeypot:
bin/cowrie start
Best practice:
- Jalankan honeypot di port SSH palsu (misal 2222)
- SSH asli tetap di port custom (misal 8801)
5. Automatic IP Blacklist (Threat Intelligence Integration)
Gunakan ipset + firewalld untuk block IP berbahaya global.
Install ipset:
sudo apt install ipset -y
Buat blacklist set:
sudo ipset create blacklist hash:ip
Integrasi dengan firewalld:
sudo firewall-cmd --permanent --new-ipset=blacklist --type=hash:ip
sudo firewall-cmd --permanent --add-rich-rule='rule source ipset=blacklist drop'
sudo firewall-cmd --reload
Contoh block IP manual:
sudo firewall-cmd --permanent --ipset=blacklist --add-entry=1.2.3.4
sudo firewall-cmd --reload
Ini memungkinkan:
- Block attacker otomatis
- Integrasi dengan Suricata alert
- Skalabilitas blacklist besar
6. File Integrity Monitoring (Deteksi Malware & Backdoor)
Install AIDE:
sudo apt install aide -y
sudo aideinit
Cek perubahan file sistem:
sudo aide --check
Sangat penting untuk WordPress karena:
- Banyak malware inject file PHP tersembunyi
- Backdoor sering disisipkan di theme/plugin
7. Hardening Khusus WordPress (Critical Layer)
Karena WordPress adalah target utama bot internet.
7.1 Permission File yang Aman
sudo find /var/www/ -type d -exec chmod 755 {} \;
sudo find /var/www/ -type f -exec chmod 644 {} \;
wp-config.php (lebih ketat):
chmod 600 /var/www/site/wp-config.php
7.2 Disable File Editing di Dashboard
Edit wp-config.php:
define('DISALLOW_FILE_EDIT', true);
7.3 Proteksi wp-admin dengan Nginx
Tambahkan:
location /wp-admin {
allow IP_KAMU;
deny all;
}
Atau gunakan basic auth untuk lapisan tambahan.
8. Advanced Mail Server Security (Postfix + Dovecot + OpenDKIM)
8.1 Aktifkan SPF, DKIM, dan DMARC (Wajib Produksi)
DNS Record:
TXT v=spf1 mx a ip4:IP_SERVER ~all
DKIM: sudah menggunakan OpenDKIM (pastikan signing aktif)
DMARC:
v=DMARC1; p=quarantine; rua=mailto:admin@domain.com
Manfaat:
- Mencegah spoofing email
- Meningkatkan reputasi IP
- Menghindari blacklist mail server
8.2 Proteksi Brute Force Mail (Fail2Ban Jail)
Tambahkan di jail.local:
[postfix]
enabled = true[dovecot]
enabled = true
9. Backup Otomatis (Security = Recovery Capability)
Backup database harian:
crontab -e
Contoh:
0 2 * * * mysqldump -u root -pPASSWORD --all-databases > /backup/db-$(date +\%F).sql
Backup konfigurasi penting:
/etc/nginx/etc/postfix/etc/dovecot/etc/bind/var/www
Ideal:
Backup ke storage eksternal (object storage atau server lain).
10. Security Benchmark & Audit (Level Profesional)
Install Lynis (security auditing tool):
sudo apt install lynis -y
sudo lynis audit system
Lynis akan:
- Memberi skor keamanan server
- Menunjukkan misconfiguration
- Memberi rekomendasi hardening tambahan
Digunakan oleh banyak administrator Linux dan auditor keamanan.
Arsitektur Keamanan Final (Setelah Part 1–3)
Lapisan keamanan server kamu menjadi:
Layer 1: Firewalld (Network Filtering)
Layer 2: Fail2Ban (Brute Force Protection)
Layer 3: Suricata IDS/IPS (Intrusion Detection & Prevention)
Layer 4: ModSecurity WAF (Web Protection WordPress)
Layer 5: AIDE (File Integrity Monitoring)
Layer 6: Logwatch + Rsyslog (Monitoring & Alerting)
Layer 7: Backup System (Disaster Recovery)
Layer 8: Mail Security (SPF, DKIM, DMARC)
Hasil Setelah Part 3 (Security Posture)
Server akan:
- Mendeteksi serangan secara real-time
- Memiliki log keamanan terpusat
- Memblokir attacker otomatis
- Melindungi WordPress dari exploit massal
- Mendeteksi perubahan file berbahaya
- Memiliki sistem audit keamanan berkala
- Siap digunakan untuk environment production skala kecil–menengah
Jika kamu lanjut ke Part 4 (Ultra Hardening), kita bisa masuk ke:
- Kernel hardening (AppArmor/SELinux tuning)
- Chroot jail untuk service (Bind9, Nginx)
- Isolasi service dengan container security
- Zero Trust SSH (Port knocking + 2FA)
- Threat hunting manual (analisis log attacker nyata)
- Integrasi dengan reverse proxy protection seperti Cloudflare untuk perlindungan DDoS dan WAF eksternal
TERBARU CEK DIBAWAH !!!