Come abilitare la protezione DDoS?


86

Gli attacchi DDoS (Distributed Denial of Service) sono generalmente bloccati a livello di server, giusto?

C'è un modo per bloccarlo a livello PHP, o almeno ridurlo?

In caso negativo, qual è il modo più veloce e comune per fermare gli attacchi DDoS?


Dall'avere niente di meglio, ecco un elenco di moduli Apache che potrebbero potenzialmente aiutare. Non sembra molto ricco, tuttavia, ei due progetti su quattro (come cercato da "dos") sembrano non puntare a nulla.
Audrius Meskauskas

Qualcosa come questo? mod-antiloris.sourceforge.net
K-Gun

Un DDOS ha successo quando il sistema non è più in grado di elaborare tutta la richiesta che l'attacco gli sta lanciando. Se aggiungi codice nella tua applicazione che controlla ogni richiesta per "Questo è un attacco DDOS", allora quel codice sta effettivamente facendo più danni che benefici, perché richiede solo un po 'più di risorse per ogni richiesta. Ciò funzionerebbe solo in un ambiente molto restrittivo in cui la richiesta anonima non è comunque consentita.
Hugo Delsing

Risposte:


188

DDOS è una famiglia di attacchi che travolgono i sistemi chiave nel datacenter, tra cui:

  • La connessione di rete del centro di hosting a Internet
  • La rete interna e i router del centro di hosting
  • Il tuo firewall e bilanciatori del carico
  • I tuoi server web, server di applicazioni e database.

Prima di iniziare a costruire la tua difesa DDOS, considera qual è il valore a rischio nel caso peggiore. Per un servizio non critico e gratuito per una piccola comunità, il valore totale a rischio potrebbe essere noccioline. Per un sistema mission-critical a pagamento, rivolto al pubblico e per un'attività consolidata da molti miliardi di dollari, il valore potrebbe essere il valore dell'azienda. In quest'ultimo caso, non dovresti usare StackExchange :) Comunque, per difenderti da DDOS, hai bisogno di un approccio di difesa in profondità:

  1. Collabora con il tuo centro di hosting per comprendere i servizi che offre, incluso il filtro IP e delle porte sulle connessioni di rete a Internet e i servizi firewall che offrono. Questo è fondamentale: molti siti vengono estratti da Internet dalla società di hosting poiché la società di hosting si occupa dell'interruzione a livello di data center causata dal DDOS a un cliente. Inoltre, durante un attacco DDOS, lavorerai a stretto contatto con lo staff del centro di hosting, quindi conosci i loro numeri di emergenza e sii in buoni rapporti con loro :) Dovrebbero essere in grado di bloccare intere regioni internazionali, bloccare completamente servizi o reti specifici protocolli e altre misure difensive ad ampio spettro o, in alternativa, consentire solo IP autorizzati (a seconda del modello di business)
  2. Mentre sei nel centro di hosting, utilizza una rete di distribuzione dei contenuti per distribuire servizi (principalmente statici) vicino ai tuoi utenti finali e nascondere i tuoi server reali agli architetti DDOS. L'intera CDN è troppo grande perché un DDOS elimini tutti i nodi in tutti i paesi; se il DDOS è focalizzato su un paese, almeno gli altri utenti sono ancora OK.
  3. Mantieni aggiornati tutti i tuoi sistemi e pacchetti software con le ultime patch di sicurezza - e intendo tutti:

    • Switch gestiti: sì, a volte devono essere aggiornati
    • Router
    • Firewall
    • Bilanciatori del carico
    • Sistemi operativi
    • Server web
    • Lingue e loro biblioteche
  4. Assicurati di disporre di un buon firewall o di un dispositivo di sicurezza configurato e regolarmente verificato da un esperto di sicurezza qualificato . Regole rigide sul firewall sono una buona difesa contro molti attacchi semplici. È anche utile poter gestire la larghezza di banda disponibile per ogni servizio aperto.

  5. Avere buoni strumenti di monitoraggio della rete in atto: questo può aiutarti a capire:

    • Che sei sotto attacco piuttosto che essere semplicemente sotto carico pesante
    • Da dove proviene l'attacco (che può includere paesi con cui normalmente non si fa affari) e
    • Qual è effettivamente l'attacco (porte, servizi, protocolli, IP e contenuto dei pacchetti)
  6. L'attacco potrebbe semplicemente consistere in un uso intensivo di servizi di siti Web legittimi (ad esempio, colpire URI "legali" che eseguono query o inserire / aggiornare / eliminare dati): migliaia o milioni di richieste provenienti da decine a milioni di indirizzi IP diversi porteranno un sito al suo ginocchia. In alternativa, alcuni servizi potrebbero essere così costosi da eseguire che solo poche richieste causano un DOS - pensa un rapporto davvero costoso. Quindi è necessario un buon monitoraggio a livello di applicazione di ciò che sta accadendo:

    • Quali servizi sono stati richiamati e quali argomenti / dati vengono inviati (ad es. Accesso all'applicazione)
    • Quali utenti stanno effettuando l'invocazione e da quali IP (ovvero accedendo alla tua applicazione)
    • Ciò che interroga e inserisce / aggiorna / elimina il DB sta eseguendo
    • Carica media, utilizzo CPU, i / o disco, traffico di rete su tutti i computer (e VM) nel sistema
    • Assicurarsi che tutte queste informazioni siano facilmente recuperabili e che sia possibile correlare i registri di diversi computer e servizi (ovvero assicurarsi che tutti i computer siano sincronizzati con l'ora utilizzando ntp).
  7. Vincoli e limiti ragionevoli nella vostra applicazione . Ad esempio, potresti:

    • Utilizzare una funzionalità QoS nel bilanciamento del carico per inviare tutte le sessioni anonime a server delle applicazioni separati nel cluster, mentre gli utenti connessi utilizzano un altro set. Ciò impedisce a un DDOS anonimo a livello di applicazione di eliminare clienti importanti
    • Utilizzo di un CAPCHA forte per proteggere i servizi anonimi
    • Timeout della sessione
    • Avere un limite di sessione o un limite di frequenza su determinati tipi di richieste come i rapporti. Assicurati di poter disattivare l'accesso anonimo, se necessario
    • Assicurati che un utente abbia un limite al numero di sessioni simultanee (per evitare che un account violato acceda un milione di volte)
    • Avere diversi utenti dell'applicazione di database per diversi servizi (ad es. Uso transazionale vs. utilizzo di report) e utilizzare la gestione delle risorse del database per evitare che un tipo di richiesta web travolga tutti gli altri
    • Se possibile, rendi questi vincoli dinamici o almeno configurabili. In questo modo, mentre sei sotto attacco, puoi impostare limiti temporanei aggressivi ("throttling" dell'attacco), come una sola sessione per utente e nessun accesso anonimo. Questo non è certamente eccezionale per i tuoi clienti, ma molto meglio che non avere alcun servizio.
  8. Ultimo, ma non meno importante, scrivi un documento del Piano di risposta DOS e fallo revisionare internamente da tutte le parti interessate: Business, Management, il team di sviluppo SW, il team IT e un esperto di sicurezza. Il processo di scrittura del documento indurrà te e il tuo team a riflettere sui problemi e ti aiuterà a essere preparato se il peggio dovesse accadere alle 3 del mattino del tuo giorno libero. Il documento dovrebbe coprire (tra le altre cose):

    • Cosa è a rischio e il costo per l'azienda
    • Misure adottate per proteggere i beni
    • Come viene rilevato un attacco
    • La risposta pianificata e la procedura di escalation
    • Processi per mantenere il sistema e questo documento aggiornati

Quindi, preambolo a parte, ecco alcune risposte specifiche:

I DDOS sono generalmente bloccati a livello di server, giusto?

Non proprio: la maggior parte dei peggiori attacchi DDOS sono di basso livello (a livello di pacchetto IP) e sono gestiti da regole di routing, firewall e dispositivi di sicurezza sviluppati per gestire gli attacchi DDOS.

C'è un modo per bloccarlo a livello PHP, o almeno ridurlo?

Alcuni attacchi DDOS sono diretti all'applicazione stessa, inviando URI e richieste HTTP validi. Quando il tasso di richieste aumenta, i tuoi server iniziano a lottare e si verificherà un'interruzione del contratto di servizio. In questo caso, ci sono cose che puoi fare a livello PHP:

  • Monitoraggio a livello di applicazione: assicurati che ogni servizio / pagina registri le richieste in modo da poter vedere cosa sta succedendo (in modo da poter intraprendere azioni per mitigare l'attacco). Qualche idea:

    • Avere un formato di registro che puoi facilmente caricare in uno strumento di registro (o Excel o simile) e analizzarlo con gli strumenti della riga di comando (grep, sed, awk). Ricorda che un DDOS genererà milioni di righe di registro. Probabilmente dovrai suddividere i tuoi log (in particolare rispetto a URI, ora, IP e utente) per capire cosa sta succedendo e dovrai generare dati come:

      • A quali URI si accede
      • Quali URI stanno fallendo ad alta velocità (un probabile indicatore degli URI specifici che gli aggressori stanno attaccando)
      • Quali utenti accedono al servizio
      • Da quanti IP ogni utente accede al servizio
      • Quali URI stanno accedendo utenti anonimi
      • Quali argomenti vengono utilizzati per un determinato servizio
      • Controlla le azioni di un utente specifico
    • Registra l'indirizzo IP di ogni richiesta. NON invertire il DNS: ironicamente, il costo per farlo rende un DDOS più facile per gli aggressori

    • Registra l'intero URI e il metodo HTTP, ad esempio "GET http://example.com/path/to/service?arg1=ddos "
    • Registra l'ID utente, se presente
    • Registra importanti argomenti HTTP
  • Limiti di velocità ragionevoli: è possibile implementare limiti sul numero di richieste che un determinato IP o utente può effettuare in un determinato periodo di tempo. Un cliente legittimo può effettuare più di 10 richieste al secondo? Gli utenti anonimi possono accedere a rapporti costosi?

  • CAPTCHA per accesso anonimo: implementa un CAPTCHA per tutte le richieste anonime per verificare che l'utente sia una persona, non un bot DDOS.

Qual è il modo più veloce e comune per fermare gli attacchi DDOS?

Il più veloce è probabilmente quello di cedere al ricatto, anche se questo potrebbe non essere desiderabile.

Altrimenti, la prima cosa che devi fare è contattare il tuo provider di hosting e / o CDN e lavorare con loro (se non ti hanno già contattato chiedendoti cosa diavolo sta succedendo ...). Quando si verifica un DDOS, probabilmente influenzerà in modo collaterale altri clienti del provider di hosting e il provider potrebbe essere sottoposto a notevoli pressioni per chiudere il tuo sito semplicemente per proteggere le proprie risorse. Preparati a condividere i tuoi registri (qualsiasi informazione) con il provider; questi log, combinati con i loro monitor di rete, possono fornire insieme informazioni sufficienti per bloccare / mitigare l'attacco.

Se ti aspetti un DDOS, è un'ottima idea qualificare il tuo provider di hosting sul livello di protezione che può fornire. Dovrebbero avere esperienza DDOS e strumenti per mitigarlo - comprendere i loro strumenti, processi e procedure di escalation. Chiedete anche quale supporto ha il provider di hosting dai loro fornitori a monte. Questi servizi potrebbero comportare un costo più iniziale o mensile, ma trattalo come una polizza assicurativa.

Mentre sei sotto attacco, dovrai afferrare i tuoi tronchi e estrarli - prova a elaborare lo schema dell'attacco. È opportuno considerare la disattivazione dell'accesso anonimo e la limitazione dei servizi sotto attacco (ovvero ridurre il limite di velocità dell'applicazione per il servizio).

Se sei fortunato e hai una base di clienti piccola e fissa, potresti essere in grado di determinare gli indirizzi IP dei tuoi clienti validi. Se questo è il caso, potresti passare a un approccio da lista bianca per un breve periodo. Assicurati che tutti i tuoi clienti sappiano che sta succedendo in modo che possano chiamare se hanno bisogno di accedere da un nuovo IP :)


Doug McClean ha degli ottimi consigli su: https://stackoverflow.com/a/1029613/1395668


20

Secondo la parte PHP della domanda;

Anche se non mi affido a PHP per questo, potrebbe essere implementato ma deve considerare tutte queste possibilità o più;

  1. L'attaccante può cambiare l'IP per ogni richiesta
  2. L'attaccante può passare parametri all'URI che il sito di destinazione non si preoccupa di questi parametri
  3. L'attaccante può riavviare la sessione prima della scadenza ...

Pseudo semplice;

<?php
// Assuming session is already started
$uri = md5($_SERVER['REQUEST_URI']);
$exp = 3; // 3 seconds
$hash = $uri .'|'. time();
if (!isset($_SESSION['ddos'])) {
    $_SESSION['ddos'] = $hash;
}

list($_uri, $_exp) = explode('|', $_SESSION['ddos']);
if ($_uri == $uri && time() - $_exp < $exp) {
    header('HTTP/1.1 503 Service Unavailable');
    // die('Easy!');
    die;
}

// Save last request
$_SESSION['ddos'] = $hash;
?>

8

Il livello php è troppo tardi nella catena delle richieste.

Mettere il tuo server Apache dietro un'appliance open source potrebbe essere una buona opzione per te.

http://tengine.taobao.org/ contiene documentazione e codice sorgente più moduli volti alla prevenzione DDOS. È un'espansione di nginx, quindi puoi configurarlo facilmente come proxy inverso per la tua istanza di apache.

Vedi: http://blog.zhuzhaoyuan.com/2012/01/a-mechanism-to-help-write-web-application-firewalls-for-nginx/ per come combattere la collisione ha attacchi DoS.

Anche completamente dimenticato, http://www.cloudflare.com è uno dei migliori firewall per applicazioni web gratuiti, hanno piani gratuiti ea pagamento e ti salverà il culo da DDOS lo usiamo per molti dei nostri siti ad alto traffico solo per le sue capacità di cache . È stupendo!



5

DDoS è gestito al meglio da dispositivi di rete appositamente progettati e molto costosi. Gli host generalmente non sono bravi a fare la protezione DDoS perché sono soggetti a prestazioni relativamente basse, esaurimento dello stato, larghezza di banda limitata, ecc. L'uso di iptables, mod apache e servizi simili può aiutare in alcune situazioni se non si ha accesso all'hardware di mitigazione DDoS o un servizio di mitigazione DDoS, ma è tutt'altro che ideale e ti lascia comunque a rischio di attacco.


8
Abbiamo bisogno di una soluzione, e se non c'è una soluzione ideale, ci servono soluzioni parziali. Nessuno ha bisogno di un consiglio del genere "non puoi farlo".
Audrius Meskauskas il

5

Che ne dici di qualcosa di simile sul lato PHP:

//if user does not change IP, then ban the IP when more than 10 requests per second are detected in 1 second
$limitps = 10;
if (!isset($_SESSION['first_request'])){
    $_SESSION['requests'] = 0;
    $_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}
$_SESSION['requests']++;
if ($_SESSION['requests']>=10 && strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request'])<=1){
    //write the IP to a banned_ips.log file and configure your server to retrieve the banned ips from there - now you will be handling this IP outside of PHP
    $_SESSION['banip']==1;
}elseif(strtotime($_SERVER['REQUEST_TIME'])-strtotime($_SESSION['first_request']) > 2){
    $_SESSION['requests'] = 0;
    $_SESSION['first_request'] = $_SERVER['REQUEST_TIME'];
}

if ($_SESSION['banip']==1) {
    header('HTTP/1.1 503 Service Unavailable');
    die;
}

1
Ci sono alcuni errori in questo codice: 10 è hardcoded, strtotime non è necessario nel server e nelle variabili di sessione e $ _SESSION ['ban_up'] == 1 dovrebbe essere = 1.
Jason Silver


2

Evitare NON utilizzare la protezione basato su PHP, è orribile e difficilmente avere un impatto a tutti! Configura il tuo server web per limitare la frequenza delle richieste, ad esempio in Nginx utilizzando il modulo limit_req ( http://nginx.org/en/docs/http/ngx_http_limit_req_module.html )

Tuttavia, consiglierei di utilizzare CloudFlare per combattere il livello 4, ma non gli attacchi basati sul livello 7 a meno che tu non sia disposto a pagare.


sì, ha funzionato benissimo anche per me, la mia esperienza qui softwareengineeringsolutions.co.uk/…
Elvis Ciotti

2

I DDOS sono generalmente bloccati a livello di server. Abilita la protezione DDOS a livello di server. Si prega di controllare le note seguenti per le protezioni DDOS.

Impostazioni di configurazione di Apache HTTP Server che possono aiutare a prevenire problemi DDOS:

La direttiva RequestReadTimeout consente di limitare il tempo che un client può impiegare per inviare la richiesta.

Attendi 10 secondi per ricevere la richiesta comprese le intestazioni e 30 secondi per ricevere il corpo della richiesta:

RequestReadTimeout header=10 body=30

Attendi almeno 10 secondi per ricevere il corpo della richiesta. Se il client invia dati, aumentare il timeout di 1 secondo per ogni 1000 byte ricevuti, senza alcun limite superiore per il timeout (eccetto per il limite dato indirettamente da LimitRequestBody):

RequestReadTimeout body=10,MinRate=1000

RequestReadTimeout header=10-30,MinRate=500
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500

La direttiva KeepAliveTimeout può essere abbassata anche sui siti soggetti ad attacchi DoS. Alcuni siti addirittura disattivano completamente i keepalive tramite KeepAlive, il che ha ovviamente altri inconvenienti sulle prestazioni. È necessario verificare i valori delle varie direttive relative al timeout fornite da altri moduli.

Le direttive LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine e LimitXMLRequestBody devono essere configurate attentamente per limitare il consumo di risorse attivato dall'input del client. Ottimizza la direttiva MaxRequestWorkers per consentire al server di gestire il numero massimo di connessioni simultanee senza esaurire le risorse.


2

Passaggi anti DDOS :

  • La prima cosa importante è identificare prima l'attacco ddos. Identificare l'attacco ddos ​​più presto significa meglio per il tuo server.
  • Ottenere una migliore larghezza di banda disponibile per il tuo server. Mantieni sempre una larghezza di banda più che sufficiente per il tuo server. Ciò non impedirà l'attacco DDOS ma richiederà più tempo. Con il quale avrai un po 'di tempo in più per agire.
  • Se possiedi il tuo server web, puoi difendere in base ai parametri di rete il tuo router con un limite di velocità, aggiungere filtri per rilasciare pacchetti a diverse fonti di attacchi, timeout delle connessioni aperte a metà in modo più aggressivo. Impostare anche soglie di caduta di allagamento SYN, ICMP e UDP inferiori.
  • Se non hai molta idea di queste cose, contatta rapidamente i tuoi provider di hosting. Possono fare del loro meglio per prevenire gli attacchi DDOS.
  • Esistono anche servizi di mitigazione DDOS speciali forniti da Cloudflare e molte altre società. Con il quale possono aiutarti a prevenire gli attacchi DDOS. Inoltre, molte aziende offrono protezione ddos e protezione dos a basso costo .
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.