Bloccare attacco Dos ad un sito web
Se hai la necessità di proteggere il tuo sito web da tentativi di attacco DoS, questo semplice script e ciò che serve.
Il funzionamento è molto semplice:
La prima cosa è la verifica del file blocca.ip che contiene la lista degli IP bannati oppure intere subnet. Confronta l'indirizzo IP che si collega al sito in questione con quelli nella lista e, se c'è un match restituisce un die nella pagina.
Il match si può fare sia inserendo nella lista singoli IP, sia subnet di classe A, B o C.
Per esempio:
Se metto in blacklist 1.3.0.0/16 e si collega qualcuno con indirizzo IP 1.3.3.4; quest'ultimo verrà bloccato dato che il suo IP appartiene alla subnet incriminata.
Questo codice è consigliabile inserirlo in una pagina che viene sempre richiamata in modo dinamico da tutto il sito web.
Ad esempio, il file header del portale, forum o del blog, in modo che venga sempre eseguito al richiamo di ogni script PHP.
<php define ('BLACKLIST','blocca.ip'); $list=file(BLACKLIST); foreach ($list as $addr) { $addr=trim($addr); $host_addr=$_SERVER['REMOTE_ADDR']; // Semplice indirizzo IP if ($host_addr==$addr) die ("Your IP is {$addr} and you're not allowed to view this pagen"); // Subnet di classe C else if (preg_match('/(d+.d+.d+).0/24/',$addr,$sub)) { $subnet=trim($sub[1]); if (preg_match("/^{$subnet}/",$host_addr)) die ("Your IP is {$host_addr} and you're not allowed to view this pagen"); } // Subnet di classe B else if (preg_match('/(d+.d+).0.0/16/',$addr,$sub)) { $subnet=trim($sub[1]); if (preg_match("/^{$subnet}/",$host_addr)) die ("Your IP is {$host_addr} and you're not allowed to view this pagen"); } // Subnet di classe A else if (preg_match('/(d+).0.0.0/8/',$addr,$sub)) { $subnet=trim($sub[1]); if (preg_match("/^{$subnet}/",$host_addr)) die ("Your IP is {$host_addr} and you're not allowed to view this pagen"); } } ?>