
La gestione del traffico in ingresso verso i propri servizi web è un aspetto fondamentale per garantire sicurezza, scalabilità e facilità di manutenzione.
Tra tutte le soluzioni disponibili, Traefik si distingue per la sua semplicità, la configurazione dinamica e il supporto nativo a container, microservizi e protocolli moderni.
In questa guida vedremo come installare e configurare Traefik come reverse proxy su Ubuntu Server 24.04, impostando una configurazione base e abilitando l’accesso tramite certificato SSL self-signed, utile in ambienti di test o infrastrutture interne non esposte a Internet.
Partiremo dall’installazione del binario, passeremo alla creazione dei file di configurazione principali e concluderemo con la verifica del corretto funzionamento della dashboard e degli entrypoint HTTPS.
Una procedura essenziale ma completa, perfetta per chi vuole iniziare ad adottare Traefik in un ambiente locale o di laboratorio.
PREREQUISITI
Ubuntu Server 24.04 LTS
Utente appartenente al gruppo sudo
Accesso shell/SSH funzionante
AGGIORNAMENTO DEL SISTEMA
Aggiornare il sistema con i seguenti comandi:
|
0
1
|
sudo apt update && sudo apt -y upgrade
sudo apt -y install ca-certificates curl gnupg
|
Gli step seguenti usano un’installazione “nativa” (binary + systemd) senza l’utlizzo di Docker/k8s.
CREAZIONE UTENTE E STRUTTURA DELLE DIRECTORY
Creare un utente/gruppo non privilegiati per Traefik con il comando:
|
0 |
sudo useradd --system --home /etc/traefik --shell /usr/sbin/nologin traefik
|
Creare la struttura directory con i seguenti comandi:
|
0
1
|
sudo mkdir -p /etc/traefik/{dynamic,certs,logs}
sudo chown -R traefik:traefik /etc/traefik
|
CONFIGURAZIONE FIREWALL (OPZIONALE)
Aprire le porte nel firewall UFW con i seguenti comandi:
|
0
1
|
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
|
Aprire la porta per la dashboard nel firewall UFW con il seguente comando:
|
0 |
sudo ufw allow 8080/tcp
|
NOTA BENE: Aprire 80/443/8080 consente il traffico verso i servizi che ascoltano su quelle porte.
INSTALLAZIONE DI TRAEFIK
Traefik rilascia binari pronti all’uso. Verificare l’ultima release stabile al seguente link:
Al momento della stesura del seguente articolo l’ultima versione stabile è la 3.6.0
Scaricare l’ultima versione stabile con il comando:
|
0 |
curl -L -o traefik.tar.gz "https://github.com/traefik/traefik/releases/download/v3.6.0/traefik_v3.6.0_linux_amd64.tar.gz"
|
Scompattare il .tar con il comando:
|
0 |
tar -xzf traefik.tar.gz
|
Spostare la cartella traefik con il comando:
|
0 |
sudo mv traefik /usr/local/bin/
|
Cancellare il .tar con il comando:
|
0 |
rm traefik.tar.gz
|
Permettere all’eseguibile (non root) di bindare le porte <1024 (80/443) con il comando:
|
0 |
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/traefik
|
ATTENZIONE: L’installazione via binario è una modalità comune/ufficiale.
CONFIGURAZIONE STATICA DI TRAEFIK
Creare il file /etc/traefik/traefik.yml con il comando:
|
0 |
sudo nano /etc/traefik/traefik.yml
|
Quindi incollare all’interno del file il seguente output:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
entryPoints:
web:
address: ":80"
websecure:
address: ":443"
api:
insecure: true # espone API+dashboard su entrypoint "traefik" (porta 8080)
dashboard: true
providers:
docker: {}
log:
level: DEBUG
|
Salvare e chiudere il file di configurazione
In Traefik esistono due livelli:
- Configurazione statica (entryPoints, providers, log, dashboard)
- Configurazione dinamica (routers, services, middlewares, TLS).
ATTENZIONE: Non vanno mescolate nello stesso file.
GENERAZIONE DEL CERTIFICATO SELF-SIGNED
Generare il certificato self-signed (SAN) con il seguente comando:
|
0
1
2
3
4
5
6
7
8
|
CN="test.lab"
IP="192.168.1.20" # IP del server o lascialo vuoto se non serve
sudo openssl req -x509 -nodes -newkey rsa:2048 \
-keyout /etc/traefik/certs/selfsigned.key \
-out /etc/traefik/certs/selfsigned.crt \
-days 365 \
-subj "/CN=${CN}" \
-addext "subjectAltName=DNS:${CN},IP:${IP}"
|
NOTA BENE: Sostiture test.lab e l’IP con i tuoi valori. Con OpenSSL ≥1.1.1 puoi usare -addext per i SAN.
Assegnare le ACL con i seguenti comandi:
|
0
1
2
|
sudo chown traefik:traefik /etc/traefik/certs/selfsigned.*
sudo chmod 600 /etc/traefik/certs/selfsigned.key
|
NOTA BENE: I SAN sono fondamentali per evitare i warning moderni; con OpenSSL recente puoi impostarli con -addext.
CONFIGURAZIONE DINAMICA (TLS + ESEMPIO DI BACKEND)
Creare il file TLS e un semplice router verso un’app di test su 127.0.0.1:8081 con il comando:
|
0 |
sudo nano /etc/traefik/dynamic/tls-and-routes.yml
|
Incollare all’interno del file il seguente output:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# /etc/traefik/dynamic/tls-and-routes.yml (config dinamica)
# Imposta il certificato di default per tutti i domini/host non esplicitamente mappati
tls:
certificates:
- certFile: "/etc/traefik/certs/selfsigned.crt"
keyFile: "/etc/traefik/certs/selfsigned.key"
# Middleware per redirect HTTP -> HTTPS
http:
middlewares:
redirect-to-https:
redirectScheme:
scheme: https
permanent: true
routers:
# Router HTTP che forza il redirect verso HTTPS
redirector:
entryPoints: ["web"]
rule: "HostRegexp(`{any:.+}`)"
middlewares: ["redirect-to-https"]
service: "noop"
# Router HTTPS per il dominio CN (example.local)
myapp:
entryPoints: ["websecure"]
rule: "Host(`example.local`)"
service: "myapp-svc"
tls: {} # usa il certificato configurato sopra
services:
# Backend di prova su 127.0.0.1:8081
myapp-svc:
loadBalancer:
servers:
- url: "http://127.0.0.1:8081"
# No-op service per il redirect
noop:
loadBalancer:
servers:
- url: "http://127.0.0.1:65535"
|
Salvare e chiudere il file di configurazione
TLS e file provider sono documentati ufficialmente da Traefik (certificati tramite file dinamico e ricarica automatica con watch: true).
Per avere un backend di test è possibile esporre un servizio di prova.
Installare un piccolo server HTTP di prova con il comando:
|
0 |
sudo apt install -y busybox
|
Quindi eseguire il comando:
|
0 |
busybox httpd -f -p 127.0.0.1:8081 &
|
CONFIGURAZIONE DELLA DASHBOARD SICURA SU PORTA 8080 (OPZIONALE)
Per esporre la dashboard in HTTPS dietro Traefik stesso creare un router dedicato con il comando:
|
0 |
sudo nano /etc/traefik/dynamic/dashboard.yml
|
Quindi incollare all’interno del file il seguente output:
|
0
1
2
3
4
5
6
|
http:
routers:
dash:
entryPoints: ["traefik"]
rule: "Host(`server.test.lab`) && PathPrefix(`/dashboard`)"
service: "api@internal"
tls: {} # riusa il certificato di default
|
Salvare e chiudere il file di configurazione
ATTENZIONE: Ricorda di aggiungere server.test.lab al certificato oppure generare un certificato dedicato.
La dashboard è una feature dell’API di Traefik.
Evitare insecure: true e pubblicala dietro TLS/host dedicato.
CREAZIONE DEL SERVIZIO SYSTEMD
Creare il service systemd con il comando:
|
0 |
sudo nano /etc/systemd/system/traefik.service
|
Incollare il seguente output:
|
0
1
2
3
4
5
6
7
8
9
10
11
|
[Unit]
Description=Traefik Reverse Proxy
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
|
Salvare e chiudere il file di configurazione
Ricaricare con il comando:
|
0 |
sudo systemctl daemon-reload
|
Abilitare il servizio con il comando:
|
0 |
sudo systemctl enable --now traefik
|
Avviare traefik con il comando:
|
0 |
sudo systemctl start traefik
|
Verificare che sia tutto OK con il comando:
|
0 |
systemctl status traefik --no-pager
|
Dovremmo visualizzare un output simile al seguente:
|
0
1
2
3
4
5
6
7
8
|
● traefik.service - Traefik Reverse Proxy
Loaded: loaded (/etc/systemd/system/traefik.service; enabled; preset: enabled)
Active: active (running) since Wed 2025-11-19 22:27:29 CET; 35min ago
Main PID: 10460 (traefik)
Tasks: 9 (limit: 978)
Memory: 21.4M (peak: 28.7M)
CPU: 884ms
CGroup: /system.slice/traefik.service
└─10460 /usr/local/bin/traefik --configFile=/etc/traefik/traefik.yml
|
Oppure eseguire il comando:
|
0 |
journalctl -u traefik -f
|
ACCESSO ALLA DASHBOARD DI TRAEFIK
A questo punto è possibile richiamare da un qualsiasi browser la dashboard al seguente link:
http://SERVER.test.lab/dashboard
NOTE E SUGGERIMENTI UTILI
Self-signed: i browser segnaleranno “connessione non sicura” perché il certificato non è emesso da una CA pubblica. È normale in ambienti di lab o interni.
Auto-reload: con il file provider e watch: true, Traefik ricarica automaticamente la config dinamica senza restart.
Separazione config: mantieni statica (/etc/traefik/traefik.yml) e dinamica (file in /etc/traefik/dynamic/) separati. Non mescolarli mai!!!
Docker/Compose: consigliato se tutto il tuo stack è containerizzato
FUNZIONALITA’ DI TRAEFIK
1 – Reverse Proxy e Load Balancer
Traefik funge da reverse proxy di livello 7 e bilancia le richieste verso più backend.
Pro
- Supporta HTTP/HTTPS, TCP e UDP.
- Load balancing con algoritmi nativi (round robin, sticky sessions).
- Configurazione dinamica: aggiungi un servizio ed è subito disponibile.
- Adatto a microservizi e ambienti ad alta variabilità.
Contro
- Meno configurabile nei dettagli rispetto a NGINX in modalità avanzata.
- Le configurazioni complesse richiedono più file e più concetti da capire.
2 – Configurazione Dinamica tramite Providers
Traefik si integra con molti provider (Docker, Kubernetes, Consul, Etcd, File, Rest).
Pro
- Rileva automaticamente servizi quando compaiono nel provider.
- Etichettatura semplice (es. label Docker) per configurare routing.
- Ottimo per container e applicazioni distribuite.
Contro
- In ambienti non dinamici, la configurazione “classica” può risultare superflua.
- Alcuni provider (es. Consul) richiedono setup extra.
3 – Certificati SSL automatici (Let’s Encrypt)
Traefik genera e rinnova automaticamente certificati HTTPS.
Pro
- Rinnovi automatici senza cron-job.
- Supporto HTTP-01, TLS-ALPN-01 e DNS-01.
- Certificati wildcard via DNS-01.
Contro
- Se configurato male può finire in rate-limit di Let’s Encrypt.
- DNS-01 richiede API provider DNS compatibile.
4 – Dashboard Web Integrata
Interfaccia grafica per monitorare router, middleware e servizi.
Pro
- Visualizza routing, middlewares, entrypoints e stato dei servizi.
- Utile per debugging e controlli rapidi.
- Disponibile su /dashboard/ o tramite entrypoint dedicato.
Contro
- Non va esposta a Internet senza autenticazione.
- La configurazione può sembrare “nascosta” (richiede API attiva).
5 – Middleware
Strato intermedio che permette di manipolare richieste e risposte.
Esempi:
- Redirect, HTTPS redirect
- Rate limiting
- Autenticazione basic, digest, forward auth
- Riscrittura URL
- Header security
Pro
- Grande flessibilità nel modellare il traffico.
- Combinazione multipla tramite chain middleware.
Contro
- Troppi middleware rendono difficile il debugging.
- Alcuni comportamenti complessi richiedono test accurati.
6 – Supporto a TCP/UDP
Non solo HTTP: Traefik può gestire anche servizi puramente TCP o UDP (es. database, MQTT, giochi).
Pro
- True L4 load balancing.
- Un’unica soluzione per HTTP e servizi di rete generici.
Contro
- Funzionalità più limitate rispetto ai proxy L4 specializzati.
- Niente middleware per TCP/UDP (solo routing)
7 – Acme Storage e gestione certificati
Traefik conserva certificati e chiavi in un file, storage remoto o secret store.
Pro
- Centralizzazione certificati.
- Facile backup/restore.
- Supporto hot-reload.
Contro
- Lo storage tipo file può corrompersi in crash di sistema.
- Le configurazioni multi-nodo richiedono storage distribuito (es. Consul)
8 – Monitoraggio e Metriche
Supporto a:
- Prometheus
- Datadog
- StatsD
Pro
- Ottimo per ambienti enterprise o alta osservabilità.
- Integrazione semplice.
Contro
- Richiede un sistema esterno per visualizzare metriche.
- Alcuni exporter devono essere configurati separatamente.
9 – Alta Disponibilità (HA)
Supporto a modalità Ingress Controller in Kubernetes o con provider distribuiti.
Pro
- Funziona bene in cluster (Kubernetes soprattutto).
- Configurazione condivisibile via provider esterni.
Contro
- L’HA nativo tra nodi “bare metal” è più complesso.
- Richiede storage condiviso per certificati (es. bucket, consul).
10 – Facilità di Deploy
Traefik è un singolo binario auto-contenuto.
Pro
- Installazione molto semplice.
- Aggiornamenti veloci: basta sostituire il binario.
- Ottimo per sistemi minimal, container e VM leggere.
Contro
- Meno configurabile rispetto a server più complessi (NGINX, HAProxy).
- Le opzioni CLI e YAML vanno capite bene per evitare errori.

0 commenti