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?
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?
Risposte:
DDOS è una famiglia di attacchi che travolgono i sistemi chiave nel datacenter, tra cui:
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à:
Mantieni aggiornati tutti i tuoi sistemi e pacchetti software con le ultime patch di sicurezza - e intendo tutti:
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.
Avere buoni strumenti di monitoraggio della rete in atto: questo può aiutarti a capire:
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:
Vincoli e limiti ragionevoli nella vostra applicazione . Ad esempio, potresti:
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):
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:
Registra l'indirizzo IP di ogni richiesta. NON invertire il DNS: ironicamente, il costo per farlo rende un DDOS più facile per gli aggressori
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
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ù;
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;
?>
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!
Non puoi farlo a livello PHP. DDOS è un tipo di attacco che invia troppe richieste al tuo server web. Il tuo server web rifiuterà la richiesta prima di chiamare il tuo script PHP.
Se stai usando Apache, ecco alcuni suggerimenti da Apache: http://httpd.apache.org/docs/trunk/misc/security_tips.html
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.
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;
}
Ci sono plugin che puoi usare in apache per ddos / dos. Buon inizio qui http://www.debianadmin.com/how-to-protect-apache-against-dosddos-or-brute-force-attacks.html
Se sei su LEMP, puoi controllare qui. http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html
Questi sono buoni punti di partenza economici.
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.
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.
Passaggi anti DDOS :