Episode ini membahas middleware autentikasi Traefik: BasicAuth dengan password ber-htpasswd, DigestAuth, ForwardAuth yang mendelegasikan autentikasi ke layanan eksternal seperti Authelia, Authentik, dan OAuth2 Proxy, serta IPWhiteList untuk membatasi akses dari alamat IP tertentu.

Melindungi layanan dari akses liar adalah kebutuhan pertama setiap deployment. Episode 9 membahas empat middleware autentikasi Traefik: BasicAuth, DigestAuth, ForwardAuth, dan IPWhiteList — masing-masing dengan kekuatan dan trade-off yang berbeda.
BasicAuth sederhana dan cukup untuk banyak kasus internal. ForwardAuth adalah yang paling kuat: autentikasi didelegasikan ke layanan eksternal seperti Authelia, Authentik, atau OAuth2 Proxy, sehingga mendukung SSO, TOTP, dan kebijakan terpusat. Di akhir episode, kalian akan tahu kapan harus memakai yang mana.
BasicAuth meminta kredensial via header Authorization bertipe Basic. Password tidak boleh disimpan plaintext — Traefik menerima hash yang dibuat dengan htpasswd. Bangkitkan hash dengan perintah htpasswd berikut:
htpasswd -nbB admin "rahasia-super"
docker run --rm httpd:alpine htpasswd -nbB admin "rahasia-super"Outputnya berbentuk admin:$2y$05$.... Tempelkan hasil tersebut ke dalam middleware:
http:
middlewares:
admin-auth:
basicAuth:
users:
- "admin:$2y$05$0UvReaDF8s0BbQpqBFBp8e1gV6Q2Y0hH9o5QyTq3a4j7kLmZxS2C"
realm: "Admin Zone"
removeHeader: trueusers: daftar username:hash; beberapa pengguna dipisahkan baris.realm: teks yang ditampilkan browser pada dialog login.removeHeader: true: menghapus header Authorization sebelum diteruskan ke backend — mencegah kredensial bocor ke aplikasi.Router yang memakai middleware ini:
http:
routers:
admin:
rule: "Host(`admin.localhost`)"
entrypoints:
- web
service: admin-svc
middlewares:
- admin-auth
services:
admin-svc:
loadBalancer:
servers:
- url: "http://10.0.0.50:8080"DigestAuth menggunakan challenge-response: password tidak pernah dikirim dalam bentuk teks, hanya sebuah digest dari kombinasi nilai. Traefik menerima hash MD5 username:realm:password sebagai ganti password plaintext:
printf "admin:Admin Zone:rahasia-super" | md5sumhttp:
middlewares:
dig-auth:
digestAuth:
users:
- "admin:c5b0c4f1a6d4c6e5d86ac4a5b2f3a2b3"
realm: "Digest Zone"
removeHeader: trueDigestAuth lebih aman dari BasicAuth dalam hal transfer kredensial, tapi implementasinya lebih jarang didukung klien modern dan kompleks untuk dioperasikan. Untuk sebagian besar kasus, BasicAuth atau ForwardAuth adalah pilihan yang lebih masuk akal.
ForwardAuth mengirim request ke URL layanan autentikasi. Jika layanan merespons 2xx, akses diizinkan; jika 401 atau 403, request ditolak. Ini pintu menuju SSO enterprise:
http:
middlewares:
auth-authelia:
forwardAuth:
address: "http://authelia:9091/api/authz/forward-auth"
authResponseHeaders:
- Remote-User
- Remote-Groups
trustForwardHeader: trueaddress: URL endpoint pengecekan layanan autentikasi.authResponseHeaders: header dari response layanan auth yang diteruskan ke backend, misalnya Remote-User.trustForwardHeader: true: memercayai header X-Forwarded-* dari proxy di depan — hanya aktifkan jika Traefik berada di belakang proxy tepercaya.Pola ini dipakai oleh layanan populer:
Alur ForwardAuth adalah salah satu pola paling umum pada setup homelab Traefik kelas enterprise.
Terkadang yang diperlukan bukan login, tapi membatasi dari mana request boleh datang. IPWhiteList menerima atau menolak berdasarkan IP sumber, dengan dukungan CIDR:
http:
middlewares:
internal-only:
ipWhiteList:
sourceRange:
- "192.168.1.0/24"
- "127.0.0.1/32"Semua request dari luar range di atas ditolak dengan 403. Jika Traefik berada di belakang proxy lain, IP sumber yang dilihat adalah IP proxy — saat itulah kalian butuh pengaturan ipStrategy dengan depth untuk menghitung berapa hop proxy yang dilewati sebelum menemukan IP asli klien:
http:
middlewares:
vpn-only:
ipWhiteList:
sourceRange:
- "10.8.0.0/16"
ipStrategy:
depth: 2Nilai depth: 2 memberitahu Traefik membaca dua hop pertama dari header X-Forwarded-For untuk menemukan IP klien sebenarnya. Kombinasikan IPWhiteList dengan BasicAuth untuk lapisan pertahanan berlapis.
Warning
Jangan mengandalkan IPWhiteList sebagai satu-satunya keamanan. Alamat IP mudah dipalsukan jika jaringan belum dikonfigurasi dengan benar — pakai sebagai salah satu lapisan, bukan tembok tunggal.
Inti yang harus dibawa pulang:
htpasswd -nbB.removeHeader: true mencegah kredensial bocor ke backend.Di episode 10 selanjutnya kita akan membahas headers dan security middlewares — middleware headers untuk custom header, rangkaian security headers seperti CSP, X-Frame-Options, dan HSTS, konfigurasi CORS lengkap, serta cara mengaktifkan force HTTPS. Setelah ini, layanan kalian akan memenuhi standar keamanan dasar web modern.