Ghid Securizare Avansată și Hardening pentru Caddy Server
Acest ghid descrie modul în care transformi fișierul /etc/caddy/Caddyfile de pe VPS-ul tău (63.250.40.142) într-un scut de protecție de nivel enterprise pentru toate subdomeniile *.bytebook.xyz.
1. Utilizarea Snippet-urilor în Caddyfile
În loc să repeți aceleași reguli de securitate pentru fiecare subdomeniu (Node, Python, Java, Portainer, etc.), Caddy permite definirea de blocuri de cod reutilizabile numite Snippets folosind sintaxa (nume_snippet).
2. Anteturi de Securitate HTTP (Security Headers)
Adăugarea acestor anteturi protejează aplicațiile împotriva atacurilor XSS, Clickjacking, MIME-sniffing și forțează conexiunile criptate HTTPS:
• Strict-Transport-Security (HSTS): Obligă browserele să folosească doar HTTPS timp de 1 an.
• X-Frame-Options DENY: Împiedică încărcarea site-ului în iframe-uri (protecție Anti-Clickjacking).
• X-Content-Type-Options nosniff: Blochează browserele din a ghici tipurile MIME neclare.
• Content-Security-Policy (CSP): Restricționează sursele de unde se pot executa scripturi.
(security_headers) {
header {
# Strict Transport Security (HSTS)
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# Protecție împotriva Clickjacking
X-Frame-Options "DENY"
# Protecție împotriva MIME Sniffing
X-Content-Type-Options "nosniff"
# Referrer Policy
Referrer-Policy "strict-origin-when-cross-origin"
# Elimină antetul "Server: Caddy" pentru obfuscare
-Server
}
}
3. Configurare Politici CORS (Cross-Origin Resource Sharing)
Dacă aplicația ta frontend (React / Angular) apelează API-uri din alt subdomeniu (Node.js, FastAPI sau Spring Boot), poți permite doar domeniilor tale specifice accesul:
(cors_headers) {
header {
Access-Control-Allow-Origin "https://bytebook.xyz https://react-demo.bytebook.xyz"
Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Access-Control-Allow-Headers "Content-Type, Authorization"
}
}
4. Protejare cu Parolă HTTP (Basic Auth Hash)
Pentru subdomenii sensibile (precum dashboards sau panouri interne de administrare), poți adăuga un strat suplimentar de autentificare direct în Caddy:
- Generează hash-ul parolei cu ajutorul comenzii interne Caddy:
caddy hash-password --plaintext "ParolaTaSuperSecurizata2026!"(Exemplu hash rezultat: `$2a$14$Z6R...`).
- Adaugă blocul
basicauthîn Caddyfile:basicauth / * { admin $2a$14$Z6R... # Hash-ul generat mai sus }
5. Blocare BOT-i Malțioși și Restricționare IP-uri
Poți bloca accesul scannerelor automate și botilor cunoscuți verificând antetul User-Agent sau permițând accesul doar de pe IP-ul tău personal:
(block_bad_bots) {
@bad_bots {
header User-Agent *sqlmap*
header User-Agent *nikto*
header User-Agent *censys*
header User-Agent *nmap*
}
respond @bad_bots "Acces Interzis!" 403
}
6. Protocol TLS 1.3 & Compresie Zstd
Configurează Caddy să accepte doar protocoale moderne criptografice (TLS 1.2 și TLS 1.3) și activează compresia nativă ultra-rapidă zstd și gzip:
(global_hardening) {
tls {
protocols tls1.2 tls1.3
}
encode zstd gzip
}
# Exemplu de Caddyfile Complet de Producție
Iată cum arată fișierul tău /etc/caddy/Caddyfile securizat complet:
# ==========================================
# SNIPPETS REUTILIZABILE
# ==========================================
(security_headers) {
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-Frame-Options "DENY"
X-Content-Type-Options "nosniff"
Referrer-Policy "strict-origin-when-cross-origin"
-Server
}
}
(common_config) {
import security_headers
encode zstd gzip
}
# ==========================================
# CONFIGURARE SUBDOMENII
# ==========================================
# Site Portal Principale
bytebook.xyz {
import common_config
root * /var/www/bytebook
file_server
}
# Subdomeniu Node.js Express
node-demo.bytebook.xyz {
import common_config
reverse_proxy localhost:3000
}
# Subdomeniu Python FastAPI
py-demo.bytebook.xyz {
import common_config
reverse_proxy localhost:8000
}
# Subdomeniu Java Spring Cloud API Gateway
api.bytebook.xyz {
import common_config
reverse_proxy localhost:8080
}
# Panou Administrare Portainer (Protejat cu BasicAuth)
portainer.bytebook.xyz {
import common_config
basicauth / * {
admin $2a$14$Z6R... # Hash-ul generat
}
reverse_proxy localhost:9000
}
Comenzi de Validare și Reload
# 1. Verifică sintaxa Caddyfile fără a opri serverul
caddy validate --config /etc/caddy/Caddyfile
# 2. Reîncarcă configurația în siguranță (Zero Downtime)
systemctl reload caddy