Torna al blog

Come proteggere un server dagli attacchi DDoS con un proxy: configurazione in 15 minuti

Guida dettagliata per proteggere i servizi web dagli attacchi DDoS utilizzando proxy: configurazione di Nginx, HAProxy, bilanciamento del carico e filtraggio del traffico dannoso.

📅23 febbraio 2026
```html

Gli attacchi DDoS possono paralizzare il funzionamento di qualsiasi servizio web in pochi minuti. I malintenzionati inviano migliaia di richieste da diversi indirizzi IP, sovraccaricando il server e rendendolo non disponibile per gli utenti reali. I server proxy sono uno degli strumenti di protezione più efficaci, che consentono di filtrare il traffico dannoso, bilanciare il carico e nascondere l'indirizzo IP reale del tuo server.

In questa guida vedremo come configurare un proxy per proteggere da DDoS, quali tipi di proxy utilizzare e come costruire un sistema di sicurezza multilivello. Il materiale è rivolto ad amministratori di sistema, proprietari di servizi web e specialisti DevOps.

Come funzionano gli attacchi DDoS e perché i proxy aiutano

DDoS (Distributed Denial of Service) è un attacco distribuito di negazione del servizio. Il malintenzionato utilizza un botnet di migliaia di dispositivi infetti che inviano simultaneamente richieste al tuo server. L'obiettivo è esaurire le risorse del server (processore, memoria, banda) e renderlo non disponibile per gli utenti legittimi.

I principali tipi di attacchi DDoS:

  • Attacchi volumetrici — riempiono la banda con un'enorme quantità di traffico (amplificazione DNS, inondazione UDP)
  • Attacchi di protocollo — sfruttano vulnerabilità nei protocolli di rete (inondazione SYN, Ping of Death)
  • Attacchi a livello applicativo — imitano richieste legittime a un'applicazione web (inondazione HTTP, Slowloris)

I server proxy aiutano a proteggersi da DDoS in diversi modi:

  • Nascondere l'indirizzo IP reale del server — gli attaccanti vedono solo l'IP del proxy, non quello del tuo server principale
  • Filtraggio del traffico dannoso — il proxy analizza le richieste e blocca quelle sospette
  • Bilanciamento del carico — più server proxy distribuiscono il traffico tra i server backend
  • Rate limiting — limitazione del numero di richieste da un singolo indirizzo IP
  • Cache del contenuto statico — riduce il carico sul server principale

È importante capire che i proxy non sono una panacea per tutti i tipi di DDoS. Attacchi volumetrici potenti possono saturare la banda fino al server proxy. Pertanto, i proxy sono efficaci in combinazione con altri metodi di protezione: CDN, servizi anti-DDoS basati su cloud (Cloudflare, AWS Shield), firewall.

Tipi di proxy per proteggere da DDoS: inversi vs diretti

Per proteggere da DDoS si utilizzano due principali tipi di server proxy:

Proxy inversi (Reverse Proxy)

Un proxy inverso si trova davanti al tuo server web e accetta tutte le richieste in ingresso dai clienti. I clienti interagiscono solo con il proxy, senza conoscere l'indirizzo IP reale del tuo server. Questo è lo strumento principale per proteggere da DDoS.

Soluzioni popolari per proxy inversi:

  • Nginx — server web veloce e leggero con funzionalità di proxy inverso
  • HAProxy — bilanciatore di carico specializzato con potenti capacità di filtraggio
  • Apache mod_proxy — modulo per Apache, meno performante rispetto a Nginx
  • Varnish — acceleratore HTTP con focus sulla cache

Proxy diretti (Forward Proxy)

I proxy diretti vengono utilizzati dal lato client per le richieste in uscita. Nel contesto della protezione da DDoS, sono utilizzati meno frequentemente, ma possono essere utili per:

  • Nascondere gli indirizzi IP dei tuoi server quando si accede a API esterne
  • Distribuire il traffico in uscita attraverso molti indirizzi IP
  • Superare i blocchi durante la raccolta di informazioni su potenziali attacchi

Per questi compiti sono adatti proxy residenziali — hanno indirizzi IP reali di utenti domestici e appaiono come traffico normale, rendendo difficile la loro rilevazione e blocco.

Tipo di proxy Applicazione per proteggere da DDoS Vantaggi
Proxy inverso (Nginx, HAProxy) Ricezione del traffico in ingresso, filtraggio, bilanciamento del carico Nasconde l'IP reale del server, filtra gli attacchi, memorizza nella cache i contenuti
Proxy residenziali Nascondere l'infrastruttura, monitoraggio delle minacce IP reali, difficile da bloccare
Proxy di data center Ulteriore livello di protezione, elaborazione rapida Alta velocità, basso costo

Configurazione di un proxy inverso su Nginx per proteggere il server

Nginx è uno degli strumenti più popolari per creare un proxy inverso. Gestisce rapidamente le richieste in ingresso, supporta il rate limiting e può filtrare il traffico sospetto.

Configurazione di base del proxy inverso

Installa Nginx su un server separato, che accetterà tutto il traffico in ingresso. Il vero server web deve essere nascosto dietro il proxy e ricevere richieste solo da esso.

# /etc/nginx/nginx.conf

http {
    # Limitazione del numero di connessioni da un IP
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    limit_conn conn_limit 10;

    # Limitazione del numero di richieste (rate limiting)
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
    limit_req zone=req_limit burst=20 nodelay;

    # Timeout per proteggere da Slowloris
    client_body_timeout 10s;
    client_header_timeout 10s;
    keepalive_timeout 5s 5s;
    send_timeout 10s;

    upstream backend {
        # IP del tuo vero server web
        server 192.168.1.100:80;
        # Puoi aggiungere più server per il bilanciamento
        # server 192.168.1.101:80;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            # Inoltro delle richieste al backend
            proxy_pass http://backend;
            
            # Trasferimento dell'IP originale del cliente
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            
            # Timeout per il proxy
            proxy_connect_timeout 5s;
            proxy_send_timeout 10s;
            proxy_read_timeout 10s;
        }
    }
}

Blocco degli User-Agent sospetti

Molti attacchi DDoS utilizzano bot con User-Agent caratteristici. Aggiungi regole per bloccarli:

# Blocco dei bot noti
map $http_user_agent $bad_bot {
    default 0;
    ~*bot 1;
    ~*crawler 1;
    ~*spider 1;
    ~*scraper 1;
    "" 1; # User-Agent vuoto
}

server {
    listen 80;
    server_name example.com;

    if ($bad_bot) {
        return 403;
    }

    location / {
        proxy_pass http://backend;
    }
}

Geo-blocco dei paesi indesiderati

Se il tuo servizio funziona solo per determinati paesi, puoi bloccare il traffico da altre regioni utilizzando il modulo GeoIP:

# Installazione del modulo GeoIP
# apt-get install nginx-module-geoip

load_module modules/ngx_http_geoip_module.so;

http {
    geoip_country /usr/share/GeoIP/GeoIP.dat;

    # Consenti solo il traffico dalla Russia e dall'Ucraina
    map $geoip_country_code $allowed_country {
        default no;
        RU yes;
        UA yes;
    }

    server {
        listen 80;
        server_name example.com;

        if ($allowed_country = no) {
            return 403;
        }

        location / {
            proxy_pass http://backend;
        }
    }
}

HAProxy per bilanciamento del carico e filtraggio del traffico

HAProxy è un potente bilanciatore di carico con avanzate capacità di filtraggio del traffico. Supporta ACL (Access Control Lists) complesse per bloccare attacchi a livello applicativo.

Configurazione di base di HAProxy

# /etc/haproxy/haproxy.cfg

global
    maxconn 50000
    # Logging
    log /dev/log local0
    log /dev/log local1 notice

defaults
    mode http
    log global
    option httplog
    option dontlognull
    
    # Timeout
    timeout connect 5s
    timeout client 30s
    timeout server 30s
    
    # Limitazione della dimensione della richiesta (protezione da POST flood)
    maxconn 3000

frontend http_front
    bind *:80
    
    # Rate limiting: massimo 100 richieste in 10 secondi da un IP
    stick-table type ip size 100k expire 30s store http_req_rate(10s)
    http-request track-sc0 src
    http-request deny if { sc_http_req_rate(0) gt 100 }
    
    # Blocco delle richieste senza intestazione Host
    acl has_host hdr(host) -m found
    http-request deny if !has_host
    
    # Blocco degli User-Agent sospetti
    acl bad_bot hdr_sub(User-Agent) -i bot crawler spider scraper
    http-request deny if bad_bot
    
    # Inoltro al backend
    default_backend web_servers

backend web_servers
    balance roundrobin
    option httpchk GET /health
    
    # Elenco dei server backend
    server web1 192.168.1.100:80 check
    server web2 192.168.1.101:80 check
    server web3 192.168.1.102:80 check

Protezione da HTTP Flood con ACL

HTTP Flood è un attacco in cui il malintenzionato invia un gran numero di richieste HTTP legittime. HAProxy consente di creare regole complesse per la loro rilevazione:

frontend http_front
    bind *:80
    
    # Tracciamento del numero di richieste da un IP
    stick-table type ip size 100k expire 30s store http_req_rate(10s),conn_cur
    http-request track-sc0 src
    
    # Blocco al superamento dei limiti
    acl too_many_requests sc_http_req_rate(0) gt 50
    acl too_many_connections sc_conn_cur(0) gt 10
    
    http-request deny deny_status 429 if too_many_requests
    http-request deny deny_status 429 if too_many_connections
    
    # Blocco delle richieste a percorsi non esistenti (scansione)
    acl valid_path path_beg /api /static /login /
    http-request deny if !valid_path
    
    default_backend web_servers

Whitelist di indirizzi IP fidati

Crea una whitelist per indirizzi IP fidati (ad esempio, i tuoi indirizzi di ufficio o dei partner), che non saranno soggetti a rate limiting:

frontend http_front
    bind *:80
    
    # Whitelist di indirizzi IP fidati
    acl whitelist src 203.0.113.0/24 198.51.100.50
    
    # Rate limiting solo per IP non in whitelist
    stick-table type ip size 100k expire 30s store http_req_rate(10s)
    http-request track-sc0 src if !whitelist
    http-request deny if { sc_http_req_rate(0) gt 100 } !whitelist
    
    default_backend web_servers

Utilizzo di proxy residenziali per nascondere l'infrastruttura

Oltre ai proxy inversi davanti al tuo server, puoi utilizzare proxy residenziali per una protezione aggiuntiva dell'infrastruttura. Questo è particolarmente utile se hai bisogno di:

  • Nascondere gli indirizzi IP dei tuoi server di monitoraggio — se monitori attacchi DDoS o raccogli informazioni sulle minacce, i proxy residenziali possono aiutarti a nascondere le tue azioni
  • Accedere a API esterne senza rivelare l'infrastruttura — i tuoi server possono effettuare richieste tramite proxy residenziali, rendendo difficile la loro rilevazione
  • Testare la protezione da DDoS — simulare attacchi da diversi indirizzi IP per verificare l'efficacia dei tuoi filtri

I proxy residenziali hanno indirizzi IP di utenti domestici reali, il che li rende indistinguibili dal traffico normale. Questo rende difficile il loro blocco e consente di superare le restrizioni geografiche.

Esempio: Monitoraggio delle minacce tramite proxy residenziali

Supponiamo che tu voglia monitorare l'attività dei botnet che potrebbero attaccare il tuo servizio. Utilizzando proxy residenziali, puoi raccogliere informazioni senza rivelare gli indirizzi IP dei tuoi server:

import requests

# Configurazione del proxy residenziale
proxies = {
    'http': 'http://username:password@residential-proxy.com:8080',
    'https': 'http://username:password@residential-proxy.com:8080'
}

# Raccolta di informazioni su potenziali minacce
threat_sources = [
    'http://suspicious-site1.com',
    'http://suspicious-site2.com'
]

for source in threat_sources:
    try:
        response = requests.get(source, proxies=proxies, timeout=5)
        # Analisi della risposta per identificare schemi di attacco
        print(f"Status: {response.status_code}, IP: {response.headers.get('X-Your-IP')}")
    except Exception as e:
        print(f"Errore nell'accesso a {source}: {e}")

Regole di filtraggio: come distinguere un attacco da traffico legittimo

La principale difficoltà nella protezione da DDoS a livello applicativo (L7) è distinguere il traffico dannoso da quello legittimo. Gli attacchi moderni imitano il comportamento degli utenti reali, rendendo difficile la loro rilevazione.

Segnali di un attacco DDoS

  • Aumento improvviso del numero di richieste — 2-10 volte di più del normale in un breve periodo
  • Richieste con lo stesso User-Agent — i bot spesso utilizzano lo stesso User-Agent
  • Assenza di Referer — richieste dirette senza passare da altre pagine
  • Richieste simili — accessi allo stesso URL con minime variazioni
  • Assenza di JavaScript — i bot non eseguono codice JS sulla pagina
  • Basso tempo sulla pagina — i bot chiudono immediatamente la connessione dopo aver ricevuto una risposta
  • Intervalli IP sospetti — richieste massicce da una stessa sottorete

Filtraggio multilivello

Una protezione efficace utilizza più livelli di filtraggio:

Livello 1: Reputazione IP

Verifica dell'indirizzo IP attraverso database di botnet noti, server proxy, VPN. Blocco degli IP con cattiva reputazione.

Livello 2: Rate Limiting

Limitazione del numero di richieste da un IP. Ad esempio, non più di 50 richieste al minuto per utenti normali.

Livello 3: Analisi del comportamento

Verifica di User-Agent, Referer, cookie, esecuzione di JavaScript. Blocco delle richieste senza questi parametri.

Livello 4: CAPTCHA

Per il traffico sospetto viene mostrato un CAPTCHA. I bot non possono superarlo, gli utenti legittimi lo superano una sola volta.

Esempio: JavaScript Challenge in Nginx

Un modo semplice per filtrare i bot è richiedere l'esecuzione di JavaScript per impostare i cookie:

server {
    listen 80;
    server_name example.com;

    # Verifica della presenza di cookie
    set $has_cookie 0;
    if ($http_cookie ~* "verified=true") {
        set $has_cookie 1;
    }

    # Se il cookie non è presente, mostriamo la sfida JS
    location / {
        if ($has_cookie = 0) {
            return 200 '
                <html>
                <head><title>Verifica</title></head>
                <body>
                <script>
                    document.cookie = "verified=true; path=/";
                    window.location.reload();
                </script>
                <noscript>Abilita JavaScript</noscript>
                </body>
                </html>
            ';
        }

        proxy_pass http://backend;
    }
}

Monitoraggio e risposta a DDoS in tempo reale

Una protezione efficace da DDoS richiede un monitoraggio costante del traffico e una risposta rapida alle anomalie. Configura un sistema di monitoraggio che tenga traccia delle metriche chiave:

  • Numero di richieste al secondo — un aumento improvviso può indicare un attacco
  • Numero di indirizzi IP unici — DDoS spesso proviene da molti IP
  • Percentuale di errori 4xx/5xx — un aumento degli errori può essere un segno di sovraccarico
  • Tempo di risposta del server — un aumento della latenza indica problemi
  • Consumo delle risorse — CPU, memoria, traffico di rete

Strumenti di monitoraggio

Strumento Scopo Caratteristiche
Prometheus + Grafana Raccolta di metriche e visualizzazione Configurazione flessibile degli avvisi, dashboard belle
ELK Stack (Elasticsearch, Logstash, Kibana) Analisi dei log in tempo reale Ricerca potente nei log, identificazione di schemi
Netdata Monitoraggio delle risorse di sistema Installazione semplice, metriche in tempo reale
Fail2ban Blocco automatico degli IP Analizza i log e blocca gli IP sospetti

Configurazione degli avvisi in Prometheus

Crea regole per avvisare automaticamente quando vengono rilevate anomalie:

# prometheus_alerts.yml

groups:
  - name: ddos_detection
    interval: 10s
    rules:
      # Avviso per aumento improvviso delle richieste
      - alert: HighRequestRate
        expr: rate(nginx_http_requests_total[1m]) > 1000
        for: 1m
        labels:
          severity: warning
        annotations:
          summary: "Tasso di richieste elevato rilevato"
          description: "Il tasso di richieste è {{ $value }} req/s"

      # Avviso per aumento degli errori 5xx
      - alert: HighErrorRate
        expr: rate(nginx_http_requests_total{status=~"5.."}[5m]) > 10
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Tasso di errore 5xx elevato"
          description: "Errori 5xx: {{ $value }} req/s"

      # Avviso per alta CPU
      - alert: HighCPUUsage
        expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Utilizzo CPU elevato"
          description: "L'utilizzo della CPU è {{ $value }}%"

Risposta automatica con Fail2ban

Fail2ban analizza i log e blocca automaticamente gli indirizzi IP che superano i limiti di richieste:

# /etc/fail2ban/jail.local

[nginx-req-limit]
enabled = true
filter = nginx-req-limit
logpath = /var/log/nginx/access.log
maxretry = 100
findtime = 60
bantime = 3600
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp]

# /etc/fail2ban/filter.d/nginx-req-limit.conf
[Definition]
failregex = ^<HOST> -.*"(GET|POST).*HTTP.*"
ignoreregex =

Protezione multilivello: combinare proxy con altri metodi

I server proxy sono un elemento importante nella protezione da DDoS, ma sono più efficaci in combinazione con altri metodi. Esaminiamo l'architettura di una protezione multilivello:

Livello 1: Protezione di rete (L3/L4)

  • Servizi anti-DDoS basati su cloud — Cloudflare, AWS Shield, Google Cloud Armor filtrano il traffico prima che raggiunga i tuoi server
  • Firewall hardware — hardware specializzato per filtrare il traffico di rete
  • BGP blackholing — reindirizzamento del traffico dannoso in un "buco nero" a livello del provider

Livello 2: CDN e caching

  • CDN (Content Delivery Network) — distribuisce contenuti statici su molti server, riducendo il carico sull'origine
  • Caching sui proxy — Varnish, Nginx memorizzano nella cache le pagine popolari e le restituiscono senza contattare il backend
  • Ottimizzazione dei contenuti — minificazione di CSS/JS, compressione delle immagini riducono il volume del traffico

Livello 3: Proxy e bilanciamento (L7)

  • Proxy inversi — Nginx, HAProxy filtrano le richieste a livello applicativo
  • Bilanciamento del carico — distribuzione del carico tra più server backend
  • Rate limiting — limitazione del numero di richieste da un IP
  • WAF (Web Application Firewall) — ModSecurity, AWS WAF bloccano attacchi alle applicazioni web

Livello 4: Ottimizzazione del backend

  • Ottimizzazione del database — indici, caching delle query, repliche di lettura
  • Elaborazione asincrona — compiti pesanti vengono eseguiti in background tramite code (RabbitMQ, Redis)
  • Scalabilità orizzontale — aggiunta di nuovi server all'aumentare del carico

Esempio di architettura

Cliente
  ↓
Cloudflare (anti-DDoS L3/L4, CDN)
  ↓
Nginx proxy inverso (rate limiting, filtraggio)
  ↓
HAProxy (bilanciamento del carico)
  ↓
Server backend (applicazione web)
  ↓
Database (con replica)

Questa architettura fornisce protezione a tutti i livelli: rete, trasporto, applicativo. Anche se un attacco supera un livello, il successivo lo fermerà.

Utilizzo di proxy di data center per un ulteriore livello

In alcuni casi ha senso aggiungere proxy di data center come strato intermedio tra CDN e i tuoi server. Offrono un'elevata velocità di elaborazione e possono eseguire un ulteriore filtraggio del traffico. I proxy di data center sono più economici rispetto ai proxy residenziali e mobili, rendendoli una soluzione economicamente vantaggiosa per gestire grandi volumi di traffico.

Conclusione

Proteggere da attacchi DDoS con server proxy è un metodo efficace che consente di filtrare il traffico dannoso, nascondere gli indirizzi IP reali dei server e bilanciare il carico. I proxy inversi basati su Nginx o HAProxy offrono una configurazione flessibile delle regole di filtraggio, rate limiting e blocco delle richieste sospette.

Punti chiave che abbiamo esaminato:

  • Proxy inversi (Nginx, HAProxy) — strumento principale di protezione a livello applicativo (L7)
  • Rate limiting e filtraggio per User-Agent, reputazione IP aiutano a filtrare la maggior parte degli attacchi
  • I proxy residenziali sono utili per nascondere l'infrastruttura di monitoraggio e raccogliere informazioni sulle minacce
  • La protezione multilivello (CDN + proxy + WAF + ottimizzazione del backend) garantisce la massima resilienza
  • Monitoraggio e risposta automatica sono fondamentali per una rapida rilevazione e blocco degli attacchi

Ricorda che gli attacchi DDoS evolvono costantemente, quindi il sistema di protezione richiede aggiornamenti e test regolari. Esegui test di carico, analizza i log, aggiorna le regole di filtraggio e rimani aggiornato sui nuovi metodi di attacco.

Se stai pianificando di costruire un sistema di protezione multilivello utilizzando proxy, ti consigliamo di considerare proxy residenziali per nascondere infrastrutture critiche e proxy di data center per un'elaborazione ad alta velocità di grandi volumi di traffico. La combinazione di diversi tipi di proxy offre un equilibrio ottimale tra sicurezza, prestazioni e costo.

```