Belajar Authelia - Traefik Integration
Episode 14 of 31

Belajar Authelia - Traefik Integration

Episode ini mengintegrasikan Authelia dengan Traefik lewat middleware ForwardAuth: definisi middleware di dynamic config, pemasangan lewat Docker labels, penyalinan header identitas Remote-User, hingga contoh compose lengkap yang melindungi sebuah layanan.

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

Pendahuluan

Di episode 13 kalian membangun gerbang autentikasi di NGINX dengan auth_request. Di episode 14 kita menerapkan pola yang sama — proxy bertanya, Authelia menjawab — pada proxy yang paling akrab dengan dunia container: Traefik. Kalau NGINX mengharuskan blok konfigurasi manual, Traefik menawarkan sesuatu yang berbeda: middleware forwardAuth yang dipasang per router, sering kali cukup lewat Docker labels tanpa menyentuh file konfigurasi.

Traefik adalah reverse proxy yang lahir di era container: ia membaca deklarasi layanan dari provider seperti Docker dan menentukan routing berdasarkan label yang ditempel pada container. Artinya, mengamankan aplikasi dengan Authelia bisa sesederhana menambahkan satu label middlewares pada layanan tersebut.

Analogi: NGINX adalah satpam yang diatur lewat buku panduan tebal; Traefik adalah satpam yang mematuhi papan perintah yang ditempel di setiap pintu. Keduanya menjaga gedung yang sama — bedanya di cara kita memberi instruksi.

Konsep Middleware ForwardAuth

Middleware adalah pipa pemrosesan permintaan Traefik. forwardAuth bekerja dengan mengirim permintaan ke alamat yang ditentukan; responsnya menentukan nasib permintaan asli:

  • Status 2xx dari Authelia berarti izinkan dan teruskan permintaan.
  • Status selain itu ditangani sesuai respons Authelia — biasanya redirect ke portal.

Konfigurasi intinya dalam dynamic config (file YAML):

dynamic/authelia.yml — middleware ForwardAuth
http:
  middlewares:
    authelia:
      forwardAuth:
        address: "http://authelia:9091/api/authz/forward-auth"
        trustForwardHeader: true
        maxResponseBodySize: 8192
        authResponseHeaders:
          - Remote-User
          - Remote-Groups
          - Remote-Email
          - Remote-Name

Opsi kuncinya:

  • address — endpoint Authelia. Perhatikan path /api/authz/forward-auth, bukan portal-nya.
  • trustForwardHeader — memberitahu Authelia untuk mempercayai header X-Forwarded-* yang dikirim Traefik. Header inilah yang dipakai Authelia menentukan skema, host, dan IP asli untuk mengevaluasi access control rules.
  • authResponseHeaders — header respons Authelia yang disalin ke permintaan yang diteruskan ke aplikasi. Inilah mekanisme Trusted Header SSO: aplikasi menerima identitas user lewat Remote-User dan kawan-kawan.

Memasang Middleware lewat Docker Labels

Keunggulan Traefik di Docker adalah semuanya bisa deklaratif lewat label. Definisi middleware yang sama di atas bisa ditulis sebagai label:

Layanan dengan label middleware
services:
  nextcloud:
    image: linuxserver/nextcloud
    labels:
      traefik.enable: "true"
      traefik.http.routers.nextcloud.rule: "Host(`nextcloud.example.com`)"
      traefik.http.routers.nextcloud.entryPoints: "websecure"
      traefik.http.routers.nextcloud.tls: "true"
      traefik.http.routers.nextcloud.middlewares: "authelia@file"

Perhatikan traefik.http.routers.nextcloud.middlewares: "authelia@file" — ini kalimat ajaib yang memasang middleware authelia pada router nextcloud. Suffix @file menunjukkan middleware itu didefinisikan di file provider (dynamic config), bukan lewat label.

Jika ingin mendefinisikan middleware sekaligus lewat label (biasanya pada container Authelia), polanya sama:

Label middleware pada container Authelia
labels:
  traefik.enable: "true"
  traefik.http.routers.authelia.rule: "Host(`auth.example.com`)"
  traefik.http.routers.authelia.entryPoints: "websecure"
  traefik.http.routers.authelia.tls: "true"
  traefik.http.middlewares.authelia.forwardauth.address: "http://authelia:9091/api/authz/forward-auth"
  traefik.http.middlewares.authelia.forwardauth.trustForwardHeader: "true"
  traefik.http.middlewares.authelia.forwardauth.maxResponseBodySize: "8192"
  traefik.http.middlewares.authelia.forwardauth.authResponseHeaders: "Remote-User,Remote-Groups,Remote-Email,Remote-Name"

Di sini label berprefix traefik.http.middlewares.* mendefinisikan middleware, dan router Authelia sendiri melewati middleware itu supaya portal tetap bisa diakses. Layanan lain cukup menulis middlewares: "authelia@docker" untuk menunjuk middleware dari label ini.

Contoh Compose Lengkap

Mari rakit semuanya: Traefik, Authelia, dan satu aplikasi yang dilindungi.

compose.yaml — Traefik + Authelia + app
networks:
  net: {}
 
services:
  traefik:
    image: traefik:v3
    restart: unless-stopped
    networks: [net]
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./dynamic:/etc/traefik/dynamic
    command:
      - --providers.docker=true
      - --providers.docker.exposedByDefault=false
      - --providers.file.directory=/etc/traefik/dynamic
      - --entryPoints.web.address=:80
      - --entryPoints.websecure.address=:443
 
  authelia:
    image: authelia/authelia
    restart: unless-stopped
    networks: [net]
    volumes:
      - ./config:/config
    labels:
      traefik.enable: "true"
      traefik.http.routers.authelia.rule: "Host(`auth.example.com`)"
      traefik.http.routers.authelia.entryPoints: "websecure"
      traefik.http.routers.authelia.tls: "true"
      traefik.http.routers.authelia.middlewares: "authelia@file"
 
  nextcloud:
    image: linuxserver/nextcloud
    restart: unless-stopped
    networks: [net]
    volumes:
      - ./nextcloud:/config
      - ./nextcloud/data:/data
    labels:
      traefik.enable: "true"
      traefik.http.routers.nextcloud.rule: "Host(`nextcloud.example.com`)"
      traefik.http.routers.nextcloud.entryPoints: "websecure"
      traefik.http.routers.nextcloud.tls: "true"
      traefik.http.routers.nextcloud.middlewares: "authelia@file"

Catatan penting: --providers.docker.exposedByDefault=false memastikan hanya container dengan traefik.enable: "true" yang dipublikasikan — praktik yang mencegah layanan tak sengaja terekspos ke publik.

Traefik v2 vs v3

Kedua versi memakai konsep yang sama. Perbedaan praktis yang perlu kalian tahu:

  • Nama header respons — di v3, Traefik menormalkan nama header menjadi huruf kecil saat mengirimkannya. HTTP pada dasarnya memperlakukan nama header tanpa membedakan besar kecil huruf, tapi jika aplikasi menuntut casing tertentu, sesuaikan daftar authResponseHeaders agar cocok dengan yang dibaca aplikasi.
  • Path endpoint — gunakan /api/authz/forward-auth pada v3 (endpoint ForwardAuth yang modern); endpoint lama /api/verify masih berfungsi untuk kompatibilitas, tetapi tidak direkomendasikan untuk instalasi baru.
  • maxResponseBodySize — opsi yang membatasi ukuran body respons auth, berguna mencegah respons tak terduga memenuhi memori.

Warning

Pastikan Traefik dan Authelia berada di jaringan Docker yang sama (dalam contoh: net). Jika terpisah, gunakan nama host yang benar di address — salah nama berarti middleware tidak pernah bisa menjawab, dan semua permintaan ke layanan yang dilindungi akan gagal.

Testing Integrasi

Setelah stack berjalan:

  1. Akses nextcloud.example.com tanpa login — harus diarahkan ke portal auth.example.com.
  2. Login dan selesaikan MFA — diarahkan kembali ke Nextcloud.
  3. Cek log Traefik dengan docker compose logs traefik untuk memastikan middleware authelia@file menanggapi tanpa error.
  4. Jika Nextcloud mendukung header auth, cek bahwa header Remote-User tiba — aplikasi akan mengenali user tanpa form login.

Penutup

Episode ini mengintegrasikan Authelia dengan Traefik: memahami middleware forwardAuth sebagai pengganti auth_request, mendefinisikan middleware di dynamic config maupun Docker labels, memilih opsi address, trustForwardHeader, dan authResponseHeaders dengan benar, serta merakit compose lengkap yang melindungi layanan dengan satu label.

Traefik menunjukkan kekuatan pola forward authentication ketika dipadukan dengan deklarasi berbasis container — satu definisi middleware, dipakai ulang oleh semua layanan. Di episode 15 kita melihat sisi lain dari spektrum konfigurasi: Caddy, proxy yang dikenal dengan kesederhanaan Caddyfile dan HTTPS otomatis. Sampai jumpa!

Belajar Authelia - Traefik Integration | Belajar Authelia