05. Role: Web CMS Server

05. Role: Web CMS Server (WordPress + PHP-FPM)

Server ini dikhususkan untuk menjalankan WordPress dengan PHP-FPM dan Caddy.

3.1 Instalasi Paket

Instal PHP-FPM dan ekstensi yang diperlukan oleh WordPress.

sudo apt update
sudo apt install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip php-imagick

3.2 Konfigurasi Caddy untuk WordPress

cms.<YOUR_DOMAIN> {
    root * /var/www/wordpress
    encode gzip
    php_fastcgi 127.0.0.1:9000
    file_server

    # Block access ke file sensitif
    @blocked {
        path /wp-config.php
        path /wp-includes/*
        path /.env
    }
    handle @blocked {
        respond 404
    }
}

3.3 Hardening WordPress (wp-config.php)

// Nonaktifkan pengeditan file dari dashboard
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);

// Gunakan salt yang unik (generate dari api.wordpress.org)
define('AUTH_KEY',         '...');
// ... dst

3.4 Konfigurasi PHP-FPM

File: /etc/php/<VERSION>/fpm/pool.d/www.conf

listen = 127.0.0.1:9000
user = www-data
group = www-data
pm = dynamic
pm.max_children = 20

3.5 Firewall & Keamanan (UFW & CrowdSec)

  1. UFW (Firewall): Izinkan trafik web publik (HTTP/HTTPS).

    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
  2. CrowdSec: Instal koleksi khusus untuk mendeteksi serangan pada WordPress dan PHP.

    sudo cscli collections install crowdsecurity/wordpress
    sudo cscli collections install crowdsecurity/php
    sudo cscli collections install crowdsecurity/caddy

    Instalasi WordPress Bouncer: Bouncer ini memungkinkan CrowdSec menampilkan CAPTCHA atau memblokir akses di level aplikasi.

    • Buat API key untuk bouncer:
      sudo cscli bouncers add wordpress-bouncer
    • Catat API key yang dihasilkan.
    • Masuk ke dashboard WordPress -> Plugins -> Add New.
    • Cari dan instal plugin CrowdSec, lalu aktifkan.
    • Masukkan API key pada pengaturan plugin CrowdSec di WordPress.
  3. File Permissions: Pastikan file dimiliki oleh www-data dengan izin minimal.

    sudo chown -R www-data:www-data /var/www/wordpress
    sudo find /var/www/wordpress -type d -exec chmod 755 {} \;
    sudo find /var/www/wordpress -type f -exec chmod 644 {} \;