Belajar Authelia - Security Headers & HTTPS
Episode 22 of 31

Belajar Authelia - Security Headers & HTTPS

Episode ini memperkuat lapisan transport: TLS termination di reverse proxy, versi TLS dan cipher yang direkomendasikan, header keamanan seperti HSTS, X-Frame-Options, CSP, dan X-Content-Type-Options, serta flag cookie Secure, HttpOnly, dan SameSite untuk melindungi sesi.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Episode 21 melindungi Authelia dari sisi logika: regulation memblokir penebak password. Tapi ada satu pintu yang lebih mendasar: jalur komunikasi itu sendiri. Jika trafik lewat HTTP polos, semua yang dikirim — termasuk password — bisa dibaca di tengah jalan. Episode 22 ini membangun lapisan transport yang aman: HTTPS, header keamanan, dan kebijakan TLS.

Analoginya seperti mengirim surat: regulation memastikan hanya penerima yang berhak yang boleh membuka kotak surat, sedangkan TLS adalah amplop segel yang memastikan isi surat tidak dibaca siapa pun selama perjalanan. Keduanya wajib ada.

TLS Termination di Reverse Proxy

Dalam arsitektur Authelia, sertifikat TLS hampir selalu dipasang di reverse proxy — NGINX, Traefik, Caddy, atau HAProxy — bukan di Authelia itu sendiri. Proxy menerima HTTPS dari browser, membuka amplopnya, lalu meneruskan request ke Authelia lewat HTTP internal.

Termination di proxy menguntungkan karena sertifikat dikelola di satu tempat untuk semua layanan. Agar Authelia tahu bahwa koneksi asli aman, proxy harus menyetel header X-Forwarded-Proto:

nginx.conf — TLS termination untuk Authelia
server {
    listen 443 ssl http2;
    server_name auth.example.com;
 
    ssl_certificate /etc/letsencrypt/live/auth.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/auth.example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
 
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options "DENY" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    add_header Permissions-Policy "geolocation=(), camera=(), microphone=()" always;
 
    location / {
        proxy_pass http://authelia:9091;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
    }
}

Authelia menerima trafik HTTP di port 9091 dari dalam jaringan proxy. Karena koneksi asli sudah HTTPS, cookies bertanda Secure tetap berlaku. Validasi konfigurasi sebelum reload dengan nginx -t.

Header Keamanan yang Direkomendasikan

HeaderContoh NilaiFungsi
Strict-Transport-Securitymax-age=31536000; includeSubDomainsMemaksa browser memakai HTTPS
X-Frame-OptionsDENYMencegah halaman di-frame situs lain (clickjacking)
X-Content-Type-OptionsnosniffMencegah browser menebak tipe MIME
Referrer-Policystrict-origin-when-cross-originMembatasi URL yang bocor lewat referrer
Permissions-Policygeolocation=(), camera=()Menonaktifkan fitur browser yang tidak perlu
Content-Security-PolicySesuai kebutuhanMembatasi sumber konten yang boleh dimuat

HSTS: Mengunci HTTPS di Browser

Strict-Transport-Security memberitahu browser: untuk domain ini, jangan pernah menggunakan HTTP selama periode max-age. Setelah browser mengunjungi sekali lewat HTTPS, percobaan koneksi HTTP selanjutnya di-upgrade otomatis. Ini menutup celah serangan downgrade dan penyadapan di halaman awal.

Masa max-age yang umum adalah 31536000 (satu tahun). Untuk kunjungan pertama, pastikan tidak ada aplikasi yang masih bisa diakses lewat HTTP polos — HSTS hanya membantu jika semua koneksi sebelumnya sudah aman.

CSP dan X-Frame-Options

Content-Security-Policy (CSP) mengontrol sumber daya apa yang boleh dimuat halaman. Untuk Authelia yang memuat portal loginnya sendiri, CSP yang terlalu ketat bisa merusak halaman. Mulai dari kebijakan dasar seperti frame-ancestors 'self', lalu longgarkan bertahap sambil mengamati konsol browser.

X-Frame-Options berlapis dengan frame-ancestors: keduanya mencegah halaman login Authelia di-embed di dalam iframe situs penyerang. Dengan DENY, penyerang tidak bisa menampilkan portal Authelia dalam bingkai transparan dan menipu pengguna memasukkan kredensial.

Warning

Header keamanan diterapkan di proxy, bukan di Authelia. Pastikan penerapannya pada blok server Authelia, dan hati-hati dengan CSP — uji di konsol browser dulu, karena kebijakan yang salah bisa membuat portal login tidak berfungsi.

Cookie sesi Authelia hanya bernilai aman jika flag-nya benar:

  • Secure — cookie hanya dikirim lewat HTTPS. Authelia menyetelnya otomatis ketika koneksi asli aman, jadi pastikan X-Forwarded-Proto diteruskan dengan benar.
  • HttpOnly — cookie tidak bisa diakses JavaScript, sehingga token tidak bocor lewat skrip.
  • SameSite — default lax pada Authelia, membatasi cookie dikirim lintas situs. Nilai strict lebih ketat; none hanya untuk kasus khusus.

Versi TLS dan Cipher

Batasi versi TLS hanya ke yang aman: TLSv1.2 dan TLSv1.3. Versi lama seperti TLS 1.0 dan 1.1 punya kerentanan yang sudah lama diketahui. Untuk cipher, arahkan preferensi ke suite modern dengan forward secrecy (misalnya kunci ECDHE); pola HIGH:!aNULL:!MD5 pada konfigurasi NGINX di atas adalah titik awal yang aman.

Di Caddy, kebijakan TLS aman diatur otomatis — cukup pastikan domain dan HTTPS aktif:

LinuxCaddyfile — TLS otomatis dengan header keamanan
auth.example.com {
    header Strict-Transport-Security "max-age=31536000; includeSubDomains"
    header X-Frame-Options "DENY"
    header X-Content-Type-Options "nosniff"
    header Referrer-Policy "strict-origin-when-cross-origin"
 
    reverse_proxy authelia:9091
}

Caddy menangani sertifikat dan pembaruan otomatis lewat Let's Encrypt. Header diterapkan dengan directive header.

Baseline Keamanan Minimum

Sebelum menutup episode, pastikan baseline berikut terpenuhi:

  • HTTPS aktif di semua domain yang dilindungi Authelia.
  • Header Strict-Transport-Security dengan max-age panjang.
  • X-Frame-Options dan X-Content-Type-Options aktif.
  • Versi TLS dibatasi ke 1.2 dan 1.3.
  • Cookie sesi bertanda Secure, HttpOnly, dan SameSite.
  • X-Forwarded-Proto diteruskan dengan benar dari proxy.

Tip

Periksa konfigurasi kalian dengan alat pemeriksaan header seperti securityheaders.com atau ekstensi browser. Header yang hilang akan terlihat jelas di sana, dan hasilnya bisa dibandingkan sebelum serta sesudah perbaikan.

Penutup

Di episode ini kalian memperkuat lapisan transport:

  • TLS di-terminate di proxy dengan sertifikat terpusat.
  • HSTS, X-Frame-Options, CSP, X-Content-Type-Options, dan Referrer-Policy dipasang sebagai header keamanan.
  • Versi TLS dibatasi ke 1.2 dan 1.3 dengan cipher modern.
  • Flag cookie Secure, HttpOnly, dan SameSite melindungi sesi.

Lapisan ini mengamankan jalur, tapi ada satu pertanyaan yang lebih filosofis: berapa banyak data yang sebenarnya perlu kita simpan? Di episode 23, kita membahas Privacy & Anonymization — logging yang hemat data, retensi yang minimal, hingga penghapusan data pengguna. Sampai jumpa!