Dokumen 04 — Blue Team Phase 1 (Audit & IPS)

Hardening tiga lapisan: OS (Lynis), Container (Trivy), dan Jaringan (CrowdSec + Cloudflare WAF). Semua dieksekusi di dalam LXC Nextcloud (192.168.1.51) dengan prinsip defense in depth.


1. Audit OS dengan Lynis

Lynis mengecek konfigurasi sistem operasi Ubuntu 24.04, mencari celah yang bisa dieksploitasi sebelum penyerang menyentuh aplikasi.

1.1 Instalasi

sudo apt update
 
# Tambahkan repositori Lynis
wget -O - https://packages.cisofy.com/keys/cisofy-software-public.key | sudo apt-key add -
echo "deb https://packages.cisofy.com/community/lynis/deb/ stable main" | sudo tee /etc/apt/sources.list.d/cisofy-lynis.list
 
# Fix GPG key jika muncul error NO_PUBKEY
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7A9A1D9D5B27C6D3
gpg --export 7A9A1D9D5B27C6D3 | sudo tee /etc/apt/trusted.gpg.d/lynis.gpg > /dev/null
 
sudo apt update
sudo apt install lynis -y

1.2 Eksekusi Audit

sudo lynis audit system

Tip

Fokus perbaikan pada bagian Warnings (merah), bukan seluruh 55+ Suggestions. Mengejar skor 100/100 bisa merusak fungsionalitas. Target realistis untuk homelab: 70–80/100.

1.3 Remediasi Warning Kritis

Lynis akan mengeluarkan 4 warning utama. Berikut solusi definitifnya:

a) DNS Tidak Merespon (NETW-2704 / NETW-2705)

Akar masalah: DNS warisan Tailscale (100.100.100.100 dan fd7a:115c:a1e0::53) tidak responsif di LXC.

Solusi via Proxmox Web UI:

  1. Klik LXC 100 (Docker-Server).
  2. Pergi ke menu DNS.
  3. Isi DNS servers: 1.1.1.1 8.8.8.8
  4. Restart LXC.

Warning

Jangan edit /etc/resolv.conf secara manual di dalam LXC. Proxmox akan menimpa (overwrite) file tersebut saat restart.

b) Kebocoran Informasi SMTP Banner (MAIL-8818)

Akar masalah: Postfix secara default membocorkan nama OS dan versi software ke setiap koneksi.

Solusi:

sudo postconf -e "smtpd_banner = \$myhostname ESMTP"
sudo systemctl restart postfix

Server sekarang hanya menjawab hostname, tanpa menyebutkan Ubuntu atau Postfix.

c) SSH Root Login (SSH-7408)

Akar masalah: Login root via password adalah target empuk brute-force.

Solusi — Buat jalur alternatif dulu:

# Buat user non-root
sudo adduser hinzi
sudo usermod -aG sudo hinzi

Verifikasi kritis (jangan lewatkan):

  1. Buka tab baru di Termius.
  2. Login dengan hinzi@192.168.1.51.
  3. Ketik sudo su dan masukkan password — pastikan bisa menjadi root.

Important

Jangan kunci root sebelum verifikasi sudo berhasil. Jika terkunci, satu-satunya jalur masuk adalah Console Proxmox.

Setelah terverifikasi, kunci root:

sudo nano /etc/ssnamadomainonfig

Ubah:

PermitRootLogin no

Restart SSH:

sudo systemctl restart ssh

Mulai sekarang, semua akses remote menggunakan hinzi, lalu sudo jika perlu hak root.


2. Audit Container dengan Trivy

Trivy memindai image Docker dan mencocokkannya dengan database CVE global. Ini adalah realita pahit dunia open source: image “resmi” sering mengandung ratusan kerentanan.

2.1 Instalasi

sudo apt-get install wget apt-transport-https gnupg lsb-release -y
 
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null
 
echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main" | sudo tee -a /etc/apt/sources.list.d/trivy.list
 
sudo apt-get update
sudo apt-get install trivy -y

2.2 Pemindaian Targeted

Jangan scan mentah — fokus pada ancaman nyata yang sudah ada obatnya:

# Scan image Nextcloud
sudo trivy image --severity HIGH,CRITICAL --ignore-unfixed nextcloud:latest
 
# Scan image MariaDB
sudo trivy image --severity HIGH,CRITICAL --ignore-unfixed mariadb:12.2.2
FlagFungsi
--severity HIGH,CRITICALHanya tampilkan kerentanan tinggi dan kritis
--ignore-unfixedAbaikan CVE yang belum ada patchnya (tidak bisa kita perbaiki)

2.3 Interpretasi Hasil

Jika muncul CVE pada gosu atau stdlib:

  • Ini adalah utility kecil di dalam image, bukan aplikasi utamanya.
  • Jangan pernah patching manual dengan apt upgrade di dalam container.

Warning

Larangan mutlak: Masuk ke container untuk update manual akan merusak prinsip immutable infrastructure. Perubahan itu musnah saat restart.

Cara benar (Immutable Infrastructure):

  1. Cek Docker Hub apakah versi baru image sudah dirilis.
  2. Ubah tag di docker-compose.yml (contoh: mariadb:12.2.2mariadb:12.2.3).
  3. Jalankan sudo docker compose up -d.
  4. Docker menarik image baru dan mengganti container lama tanpa menyentuh data.

3. Implementasi CrowdSec & Firewall Bouncer

CrowdSec adalah IPS (Intrusion Prevention System) berbasis komunitas. Ia membaca log sistem, mendeteksi pola serangan, dan memblokir IP penyerang di level firewall (iptables).

3.1 Instalasi Engine & Bouncer

# Install repositori CrowdSec
curl -s https://install.crowdsec.net | sudo sh
 
# Install engine
sudo apt install crowdsec -y
 
# Install bouncer firewall (otot yang menendang IP)
sudo apt install crowdsec-firewall-bouncer-iptables -y

3.2 Resolusi Konflik Port 8080

Akar masalah: CrowdSec LAPI (Local API) dan Nextcloud sama-sama mengincar port 8080.

Solusi — Pindahkan CrowdSec ke port 8081:

# Ubah port di konfigurasi utama
sudo sed -i 's/127.0.0.1:8080/127.0.0.1:8081/g' /etc/crowdsec/config.yaml
 
# Ubah port untuk CLI (cscli)
sudo sed -i 's/127.0.0.1:8080/127.0.0.1:8081/g' /etc/crowdsec/local_api_credentials.yaml
 
# Ubah port untuk bouncer firewall
sudo sed -i 's/127.0.0.1:8080/127.0.0.1:8081/g' /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml

Restart layanan:

sudo systemctl restart crowdsec
sudo systemctl restart crowdsec-firewall-bouncer

Verifikasi status:

sudo systemctl status crowdsec

Output yang diharapkan: Active: active (running)

3.3 Verifikasi Blokir Global

CrowdSec otomatis mengunduh ribuan IP berbahaya dari komunitas global:

sudo cscli decisions list

Tip

Jika muncul No active decisions, itu normal. Daftar akan terisi seiring waktu saat servermu mulai menerima traffic. Atau gunakan sudo cscli hub update && sudo cscli collections install crowdsecurity/nginx untuk mempercepat deteksi.


4. Pengamanan Layer 7 dengan Cloudflare

Daripada memasang WAF lokal (Safeline) yang rakus RAM, gunakan WAF bawaan Cloudflare — gratis dan tidak membebani server.

4.1 Geo-Blocking (Custom Rule)

Blokir 99% noise dari botnet luar negeri:

  1. Dashboard Cloudflare → domain namadomain.my.id.
  2. SecurityWAFCustom rules.
  3. Klik Create rule:
    • Rule name: Block Non Indonesia
    • Expression: (ip.geoip.country ne "ID")
    • Action: Block
  4. Klik Deploy.

Info

Aturan ini membuang traffic dari Rusia, China, AS, Eropa — tempat asal mayoritas botnet brute-force. CrowdSec di server hanya perlu fokus pada IP Indonesia yang mencurigakan.

4.2 Managed Ruleset (Gratis)

  1. Di tab Managed rules, cari Cloudflare Free Managed Ruleset.
  2. Pastikan statusnya Deployed / On.
  3. Ini memblokir eksploitasi umum: SQLi, XSS, Shellshock, Log4j, dsb.

4.3 Security Level

  1. SecuritySettings.
  2. Ubah Security Level menjadi High.
  3. IP dengan reputasi buruk akan mendapat tantangan JavaScript sebelum melihat halaman.

5. Defense in Depth — Ringkasan Lapisan

LapisanToolsFungsiLevel OSI
PerimeterCloudflare Geo-Block + WAFBuang ancaman luar negeri & eksploitasi umumLayer 7
TunnelCloudflaredSembunyikan IP asli, tidak ada port forwardingLayer 4
NetworkCrowdSec + Firewall BouncerBlokir IP jahat di level OS (iptables)Layer 3/4
ContainerTrivyAudit CVE pada image DockerLayer 2
OSLynisHardening konfigurasi sistemLayer 1
AplikasiNextcloud Auth + 2FAKeamanan akhir (password, MFA)Layer 7

Tip

Serangan yang lolos dari Cloudflare akan dihadang CrowdSec. Serangan yang lolos CrowdSec akan dihadang Nextcloud Auth. Tidak ada single point of failure.


6. Cheat Sheet Keamanan Harian

TugasPerintah
Cek status CrowdSecsudo systemctl status crowdsec
Lihat IP yang diblokirsudo cscli decisions list
Lihat log serangan real-timesudo tail -f /var/log/crowdsec.log
Update scenario CrowdSecsudo cscli hub update && sudo cscli collections upgrade -a
Scan ulang dengan Trivysudo trivy image --severity HIGH,CRITICAL --ignore-unfixed nextcloud:latest
Re-run Lynis auditsudo lynis audit system

Info

Untuk strategi backup otomatis dan disaster recovery, lanjut ke Dokumen 05.