Belajar Traefik - Security Hardening
Episode 28 of 31

Belajar Traefik - Security Hardening

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.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

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.

Prinsip Least Privilege

Akses Sesedikit Mungkin

  • Jangan expose endpoint admin: dashboard, API, dan metrics hanya untuk jaringan internal.
  • Docker socket read-only: mount :ro dan hanya jika provider membutuhkannya.
  • Kredensial minimum: API token dengan scope terbatas — misalnya hanya zone DNS yang dibutuhkan.
  • Update rutin: selalu ikuti rilis patch keamanan Traefik.
  • Security scanning: scan image Traefik dan backend dengan alat seperti Trivy.

Mengamankan Dashboard dan API

Autentikasi di Depan Endpoint Admin

Dashboard Traefik tanpa autentikasi adalah undangan terbuka untuk memetakan seluruh infrastruktur. Amankan dengan middleware BasicAuth dan letakkan di entrypoint internal:

Router dashboard dengan BasicAuth
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.

Metrics dan Ping Endpoint

Mengunci Endpoint Observability

Endpoint metrics dan ping juga harus dijaga:

Firewall: tutup port admin dari publik
ufw deny 8080
ufw deny 9100
ufw deny 8082
ufw allow 80
ufw allow 443
ufw enable

Aturan 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.

TLS Security

Konfigurasi yang Kuat

Terapkan TLSOption yang menolak protokol lama:

TLSOption untuk security
http:
  tlsOptions:
    secure:
      minVersion: VersionTLS12
      maxVersion: VersionTLS13
      sniStrict: true

Lengkapi 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.

Container Security

Non-Root dan Read-Only

Jalankan Traefik dengan privilege seminimal mungkin:

Compose: container Traefik yang di-hardening
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.json
  • user: "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 Management

Jangan Pernah di File Config

Secret seperti token Cloudflare atau password BasicAuth tidak boleh diketik di traefik.yml atau compose yang masuk git:

  • Environment variables: untuk local development, simpan di .env yang di-gitignore.
  • Docker secrets: file secret dari Swarm yang di-mount sebagai file.
  • Kubernetes secrets: resource Secret yang di-mount sebagai volume.
  • Vault: untuk scale besar, kelola secret terpusat dan inject saat deploy.

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.

Penutup

Inti yang harus dibawa pulang:

  • Terapkan least privilege: admin endpoints hanya untuk jaringan internal.
  • Dashboard dan API diamankan dengan BasicAuth plus entrypoint terisolasi.
  • Metrics, ping, dan dashboard ditutup dari internet lewat firewall.
  • TLS modern: minimal TLS 1.2, HSTS, dan redirect HTTPS.
  • Container: non-root, read-only filesystem, capability minimal.
  • Secret lewat env, Docker secrets, Kubernetes secrets, atau Vault — bukan git.

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.