Episode ini membahas pengamanan menyeluruh: prinsip least privilege, mengamankan dashboard, API, dan endpoint metrics, konfigurasi TLS kuat dengan cipher dan HSTS, keamanan container dengan non-root dan read-only filesystem, serta manajemen secret dengan Docker secrets dan Kubernetes secrets.

Traefik adalah gerbang semua trafik — target paling menarik bagi penyerang. Episode 28 membahas security hardening: mengunci setiap sisi Traefik dari eksposur publik sampai sekecil permukaan serangan container. Tidak ada satu pun langkah di sini yang opsional untuk deployment publik.
Pendekatannya berlapis: prinsip least privilege, mengamankan endpoint administratif, TLS yang kuat, container yang tidak bisa ditulis sembarangan, dan secret yang tidak pernah menyentuh file config. Setelah episode ini, Traefik kalian akan jauh lebih sulit ditembus.
:ro dan hanya jika provider membutuhkannya.Dashboard Traefik tanpa autentikasi adalah undangan terbuka untuk memetakan seluruh infrastruktur. Amankan dengan middleware BasicAuth dan letakkan di entrypoint internal:
http:
routers:
dashboard:
rule: "Host(`traefik.localhost`) && (PathPrefix(`/api`) || PathPrefix(`/dashboard`))"
entrypoints:
- dashboard
service: api@internal
middlewares:
- admin-auth
tls: {}
middlewares:
admin-auth:
basicAuth:
users:
- "admin:$2y$05$0UvReaDF8s0BbQpqBFBp8e1gV6Q2Y0hH9o5QyTq3a4j7kLmZxS2C"Hash password dibangkitkan dengan htpasswd (episode 9). Perhatikan entrypoint yang dipakai adalah dashboard yang terisolasi di port internal — kombinasi isolasi jaringan dan autentikasi.
Endpoint metrics dan ping juga harus dijaga:
ufw deny 8080
ufw deny 9100
ufw deny 8082
ufw allow 80
ufw allow 443
ufw enableAturan firewall di atas menutup port dashboard, metrics, dan health dari internet, menyisakan hanya 80 dan 443. Perintah ufw memakai UFW — sesuaikan dengan firewall kalian masing-masing. Untuk Kubernetes, endpoint yang sama dikunci lewat NetworkPolicy.
Terapkan TLSOption yang menolak protokol lama:
http:
tlsOptions:
secure:
minVersion: VersionTLS12
maxVersion: VersionTLS13
sniStrict: trueLengkapi dengan HSTS dari episode 10 dan redirect HTTP ke HTTPS dari episode 11. Kombinasi ini memaksa semua trafik ke TLS modern dengan sertifikat yang benar. Jangan lupa: acme.json harus di-backup dan file config tidak boleh berisi secret.
Jalankan Traefik dengan privilege seminimal mungkin:
services:
traefik:
image: traefik:v3
user: "65532:65532"
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./acme.json:/etc/traefik/acme.jsonuser: "65532:65532": jalankan sebagai non-root user.read_only: true: filesystem tidak bisa ditulis — hanya mount writable untuk acme.json.cap_drop: ALL lalu cap_add: NET_BIND_SERVICE: hilangkan semua capability kecuali bind port di bawah 1024.Jika Traefik memakai API dashboard, perhatikan bahwa entrypoint dashboard internal juga bisa diakses antar container di network yang sama — kombinasi network isolation dan BasicAuth tetap diperlukan.
Secret seperti token Cloudflare atau password BasicAuth tidak boleh diketik di traefik.yml atau compose yang masuk git:
.env yang di-gitignore.Aturan emas: jika ada secret yang tampil di output git diff, segera pindahkan ke mekanisme secret management.
Tip
Aktifkan security scanning di pipeline: trivy image traefik:v3 sebelum deploy. Temuan CVEs di image Traefik sendiri jarang, tapi membiasakan pemindaian menjaga semua lapisan tetap terkendali.
Inti yang harus dibawa pulang:
Di episode 29 selanjutnya kita akan membahas plugins & extensibility — ekosistem plugin Traefik, plugin populer seperti GeoIP dan rate limiting lanjutan, arsitektur pengembangan plugin Go dengan plugin.toml, serta proses instalasi dan versioning plugin.