01. Baseline Keamanan

01. Baseline Keamanan (Berlaku Semua Server)

Semua server Debian 13 harus mengikuti baseline security ini sebelum deployment service-specific. Diasumsikan Anda melakukan instalasi server fresh dengan akses root.

Ujung

Gunakan Script Otomatis!
Kami telah menyediakan script setup_baseline.sh yang akan mengotomatisasi seluruh proses di halaman ini secara interaktif dan aman (termasuk setup password admin, mitigasi konflik SSH config, dan pengaturan UFW yang aman dari pemutusan koneksi). Anda sangat disarankan untuk menjalankan skrip tersebut daripada melakukan setup manual:
./setup_baseline.sh

1.1 User dan Sudo Setup

Semua aplikasi harus dijalankan dengan user non-root. Konvensi penamaan: app-user, cms-user, db-user.

Langkah-langkah:

  1. Install paket dasar:

    sudo apt update
    sudo apt install -y byobu vim-nox sudo curl gnupg
  2. Enable Byobu (opsional tapi disarankan):

    byobu-enable
  3. Buat user baru (contoh: app-user):

    sudo adduser app-user
    sudo usermod -aG sudo app-user
  4. Verifikasi akses sudo:

    sudo -l -U app-user

1.2 SSH Key-based Authentication

Root login dan password authentication harus dinonaktifkan. Gunakan SSH key yang kuat (Ed25519 disarankan).

Langkah-langkah:

  1. Generate key di mesin client:

    ssh-keygen -t ed25519 -a 100 -C "app-user@server-debian13"
  2. Salin public key ke server:

    ssh-copy-id -i ~/.ssh/id_ed25519.pub app-user@<SERVER_IP>
  3. Uji koneksi:

    ssh -i ~/.ssh/id_ed25519 app-user@<SERVER_IP>

1.3 SSHD Hardening

  1. Buat file konfigurasi modular:

    sudo nano /etc/ssh/sshd_config.d/hardening.conf
  2. Isi dengan konfigurasi berikut:

    # Disable root login
    PermitRootLogin no
    
    # Key-based auth only
    PubkeyAuthentication yes
    PasswordAuthentication no
    ChallengeResponseAuthentication no
    UsePAM no
    
    # Security hardening tambahan
    X11Forwarding no
    PrintMotd no
    AcceptEnv LANG LC_*
    Subsystem sftp /usr/lib/openssh/sftp-server
  3. Validasi dan Restart:

    sudo sshd -t && sudo systemctl restart ssh

1.4 CrowdSec + Firewall Bouncer

CrowdSec digunakan dalam monitoring mode untuk mendeteksi ancaman tanpa menyebabkan false positive pada server pengembangan.

Instalasi:

curl -s https://install.crowdsec.net | sudo sh
sudo apt update && sudo apt install -y crowdsec

Konfigurasi Allowlist (Trusted IPs):

Tambahkan semua jaringan internal ke allowlist untuk mencegah false positive dari CrowdSec (lihat detail akses di bagian 1.7). Networks yang tercantum memiliki akses ke SSH/SFTP/FTP dan services database yang berbeda.

  1. Buat allowlist:
    sudo cscli allowlists create trusted_ips --description "IP/range yang dipercaya"
  2. Tambahkan jaringan:
    sudo cscli allowlists add trusted_ips <YOUR_PRIVATE_LAN> -d "Protected LAN"
    sudo cscli allowlists add trusted_ips 100.96.0.0/12 -d "Cloudflare CGNAT mesh"
    sudo cscli allowlists add trusted_ips <YOUR_DC_SUBNET_A> -d "Data Center 1"
    sudo cscli allowlists add trusted_ips <YOUR_DC_SUBNET_B> -d "Data Center 2"

Instalasi Firewall Bouncer (nftables):

sudo apt install -y crowdsec-firewall-bouncer-nftables
sudo systemctl enable --now crowdsec-firewall-bouncer

1.5 UFW Default Policy & Rules

UFW bertindak sebagai lapisan pertahanan pertama. Peraturan berikut sesuai dengan klasifikasi jaringan di bagian 1.7.

  1. Setup Awal:

    sudo apt install -y ufw
    sudo ufw default deny incoming
    sudo ufw default allow outgoing
  2. Izinkan SSH & SFTP/FTP dari jaringan terpercaya (Akses SSH/SFTP/FTP & DB):

    # Protected LAN
    sudo ufw allow from <YOUR_PRIVATE_LAN> to any port 22 proto tcp
    # Cloudflare CGNAT Mesh
    sudo ufw allow from 100.96.0.0/12 to any port 22 proto tcp
    # Campus Wide
    sudo ufw allow from <YOUR_CAMPUS_SUBNET> to any port 22 proto tcp
  3. Layanan Spesifik Role (HTTP/S, DB, Broker, dll):

    Konfigurasi firewall untuk layanan spesifik dilakukan pada masing-masing dokumen peran (Role). Baseline hanya mengatur akses dasar sistem (SSH).

    # Lihat dokumentasi Role (04-08) untuk detail port layanan.
  4. Catatan penting:

    • Akses layanan spesifik (seperti Database, Message Broker, Valkey) dikonfigurasi pada dokumen peran (role) masing-masing.
    • Sesuai kebijakan IoT, port Message Broker dan Valkey Pub/Sub dibuka untuk publik guna mendukung koneksi dari jaringan broadband dinamis.

1.6 Sinkronisasi Waktu (NTP)

Penyelarasan waktu sangat penting untuk validitas log dan sertifikat SSL.

# Instal dan aktifkan systemd-timesyncd
sudo apt install -y systemd-timesyncd
sudo systemctl enable --now systemd-timesyncd

# Verifikasi status
timedatectl status

1.7 Klasifikasi Jaringan

Network Nama Deskripsi
<YOUR_PRIVATE_LAN> Protected LAN Internal terproteksi, Akses SSH/SFTP/FTP & DB diizinkan
100.96.0.0/12 Cloudflare CGNAT Mesh Carrier-Grade NAT space untuk Cloudflare One Client (WARP), virtual IP addresses untuk Zero Trust tunnel, Akses SSH/SFTP/FTP & DB diizinkan
<YOUR_DC_SUBNET_A> Data Center Network data center (Subnet A)
<YOUR_DC_SUBNET_B> Data Center Network data center (Subnet B)
<YOUR_CAMPUS_SUBNET> Campus Wide Akses SSH/SFTP/FTP & DB diizinkan
0.0.0.0/0 Public HTTP/S, AMQP/S, MQTT/S, WS/S, Redis, S3

Untuk setup Cloudflare Virtual Mesh dan Tunnel, lihat dokumentasi terpisah di bagian berikutnya.