Dos И Ddos
8 ответов511 просмотровСейчас просматривают: 1
· 30.06.2008, 03:08
2 способа основных:
железо (уровня провайдера или уровня подсети)
софт (скрипты) блокирующие автоматом флудеров
А вообще гугл рулид
— You're an amateur
0
· 19.08.2008, 10:42
Уже была такая тема. От переходи сюда http://serverbase.ru/index.php?showtopic=19972
0
· 06.11.2008, 18:20
Тема уже устарела.Но всё же может кому то пригодиться.
Код
<?php
/*
////////////////////////////////////////////////////////////
Antiddos php module \=
РАБОТАЕТ НА IPTABLES!!!
Вставлять в начало скрипта через include
Для работы антиддоса надо иметь право доступа к исполенению функции system и команды iptables(в данном случае) если же такого нет то, то *** знает чето сделал йа.
лучше ставить антиддос на впс или выделенный сервер.
От средненькогл ддосика поможет.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
*/
$debug = false; // дебуг мод, отключает бан, показывает просто сообщения, забанило али нет.
if($debug){
error_reporting(E_ALL);
}else{
error_reporting(0);
}
/* Возможные значения $ddos 1-5:
| 1. Простая проверка по кукам, по умолчанию(рекомендую)
| 2. Двойная проверка через гет antiddos и meta refresh
| 3. Запрос на авторизацию WWW-Authenticate
| 4. полное отключение сайта, боты не блокируются!!!
| 5. выключать сайт если нагрузка слишком большая на сервере, боты не блокируются!!!
*/
$ddos = 1;
$log = false;
$dir = dirname(__FILE__).'/cyki_bots/'; //дира с логами ддоса, создавать и ставить права 777
$ddos_redirect_host = 'http://google.com/'; // хост на который редиректить ддос.
$icq = '123456'; //ася админа
$off_message = 'Извините, тех неполадки.'; //сообщение при выключенном сайте
$anticyka = md5(sha1('botik' . strrev(getenv('HTTP_USER_AGENT'))));
$ban_message = 'Вы были заблокированы. Если это ошибка обратитесь к администратору, icq of admin:'.$icq.'<hr>(c)XakNet antiddos module';// сообщение при бане
$exec_ban = "iptables -A INPUT -s ".$_SERVER["REMOTE_ADDR"]." -j DROP"; // для iptables, если у вас другая система измените, не лезьте если не знаете, лучше проконсультироваться!!!
$load = sys_getloadavg(); // функция для получения лоад авереге \=\
$ddosuser = 'lol_ddos';
$ddospass = substr(ip2long($_SERVER['REMOTE_ADDR']), 0, 4);
//не тестил //смотрит не поисковики ли это:
$google = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "googlebot.com") !== false;
$yandex = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "yandex.ru") !== false;
$rambler = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "ramtel.ru") !== false;
$rambler2 = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "rambler.ru") !== false;
$aport = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "aport.ru") !== false;
$sape = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "sape.ru") !== false;
$msn = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "msn.com") !== false;
$yahoo = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "yahoo.net") !== false;
//
$f1 = fopen($dir . 'banned_ips', "a");
fclose($f1);
if(strstr (file_get_contents($dir . 'banned_ips'), $_SERVER['REMOTE_ADDR'])){
die($ban_message);
}
if(!$google || !$yandex || !$rambler || !$rambler2 || !$aport || !$sape || !$msn || !$yahoo)
{
$f = fopen($dir . $_SERVER["REMOTE_ADDR"], "a");
fwrite($f, "zapros cyka\n");
fclose($f);
function ban()
{
if(!system($exec_ban)){
$f = fopen($dir . 'banned_ips', "a");
fwrite($f, $_SERVER['REMOTE_ADDR'].'|');
fclose($f);
}
echo $ban_message;
header('Location: '.$ddos_redirect_host.'');
die();
}
switch($ddos){
///////////////////////////
case 1:
if (empty($_COOKIE['ddos']) or !$_COOKIE['ddos'])
{
$counter = @file($dir . $_SERVER["REMOTE_ADDR"]);
setcookie('ddos', $anticyka, time() + 3600*24*7*356); // на год нах.
if(count($counter) > 10)
{
if(!$debug){
ban();
}else{
die ("Блокированы.");
}
}
if(!$_COOKIE['ddos_log']=='bil'){
if(!$_GET['antiddos'] == 1){
setcookie('ddos_log', 'bil', time()+3600*24*7*356); //типо запрос уже был чтоб не перекидывало постоянно рефрешем.
header("Location: ./?antiddos=1");
}
}
}elseif ($_COOKIE['ddos'] !== $anticyka)
{
if(!$debug){
ban();
}else{
die ("Блокированы.");
}
}
break;
/////////////////////////
case 2:
if(empty($_COOKIE['ddos'])){
if(empty($_GET['antiddos'])){
if(!$_COOKIE['ddos_log']=='bil'){ //проверям есть ли запись в куках что был запрос
die('<meta http-equiv="refresh" content="0;URL=?antiddos='.$anticyka.'" />');
}
}elseif($_GET['antiddos'] == $anticyka){
setcookie('ddos', $anticyka, time()+3600*24*7*356);
setcookie('ddos_log', 'bil', time()+3600*24*7*356); //типо запрос уже был чтоб не перекидывало постоянно рефрешем.
}else{
if(!$debug){
ban();
die("May be shall not transform address line?");
}else{
echo "May be shall not transform address line?";
die ("Блокированы.");
}
}
}
break;
case 3:
if(!isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER']!== $ddosuser || $_SERVER['PHP_AUTH_PW'] !== $ddospass){
header('WWW-Authenticate: Basic realm="Vvedite parol\': '.$ddospass.' | Login: '.$ddosuser.'"');
header('HTTP/1.0 401 Unauthorized');
if(!$debug){
ban();
}else{
die ("Блокированы.");
}
die("<h1>401 Unauthorized</h1>");
}
break;
case 4:
die($off_message); //сайт отключен
break;
case 5:
if ($load[0] > 80) {
header('HTTP/1.1 503 Too busy, try again later');
die('<center><h1>503 Server too busy.</h1></center><hr><small><i>Server too busy. Please try again later. Apache server on '.$_SERVER['HTTP_HOST'].' at port 80 with <a href="http://forum.xaknet.ru/">ddos protect</a></i></small>');
}
break;
default:
break;
//////////////////////////
}
if ($_COOKIE['ddos'] == $anticyka)
{
@unlink($dir . $_SERVER["REMOTE_ADDR"]);
}
}
//////////////////////////////
//превед всем кто меня знает о_0
//(c)xaknet.ru
?>
/*
////////////////////////////////////////////////////////////
Antiddos php module \=
РАБОТАЕТ НА IPTABLES!!!
Вставлять в начало скрипта через include
Для работы антиддоса надо иметь право доступа к исполенению функции system и команды iptables(в данном случае) если же такого нет то, то *** знает чето сделал йа.
лучше ставить антиддос на впс или выделенный сервер.
От средненькогл ддосика поможет.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
*/
$debug = false; // дебуг мод, отключает бан, показывает просто сообщения, забанило али нет.
if($debug){
error_reporting(E_ALL);
}else{
error_reporting(0);
}
/* Возможные значения $ddos 1-5:
| 1. Простая проверка по кукам, по умолчанию(рекомендую)
| 2. Двойная проверка через гет antiddos и meta refresh
| 3. Запрос на авторизацию WWW-Authenticate
| 4. полное отключение сайта, боты не блокируются!!!
| 5. выключать сайт если нагрузка слишком большая на сервере, боты не блокируются!!!
*/
$ddos = 1;
$log = false;
$dir = dirname(__FILE__).'/cyki_bots/'; //дира с логами ддоса, создавать и ставить права 777
$ddos_redirect_host = 'http://google.com/'; // хост на который редиректить ддос.
$icq = '123456'; //ася админа
$off_message = 'Извините, тех неполадки.'; //сообщение при выключенном сайте
$anticyka = md5(sha1('botik' . strrev(getenv('HTTP_USER_AGENT'))));
$ban_message = 'Вы были заблокированы. Если это ошибка обратитесь к администратору, icq of admin:'.$icq.'<hr>(c)XakNet antiddos module';// сообщение при бане
$exec_ban = "iptables -A INPUT -s ".$_SERVER["REMOTE_ADDR"]." -j DROP"; // для iptables, если у вас другая система измените, не лезьте если не знаете, лучше проконсультироваться!!!
$load = sys_getloadavg(); // функция для получения лоад авереге \=\
$ddosuser = 'lol_ddos';
$ddospass = substr(ip2long($_SERVER['REMOTE_ADDR']), 0, 4);
//не тестил //смотрит не поисковики ли это:
$google = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "googlebot.com") !== false;
$yandex = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "yandex.ru") !== false;
$rambler = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "ramtel.ru") !== false;
$rambler2 = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "rambler.ru") !== false;
$aport = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "aport.ru") !== false;
$sape = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "sape.ru") !== false;
$msn = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "msn.com") !== false;
$yahoo = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), "yahoo.net") !== false;
//
$f1 = fopen($dir . 'banned_ips', "a");
fclose($f1);
if(strstr (file_get_contents($dir . 'banned_ips'), $_SERVER['REMOTE_ADDR'])){
die($ban_message);
}
if(!$google || !$yandex || !$rambler || !$rambler2 || !$aport || !$sape || !$msn || !$yahoo)
{
$f = fopen($dir . $_SERVER["REMOTE_ADDR"], "a");
fwrite($f, "zapros cyka\n");
fclose($f);
function ban()
{
if(!system($exec_ban)){
$f = fopen($dir . 'banned_ips', "a");
fwrite($f, $_SERVER['REMOTE_ADDR'].'|');
fclose($f);
}
echo $ban_message;
header('Location: '.$ddos_redirect_host.'');
die();
}
switch($ddos){
///////////////////////////
case 1:
if (empty($_COOKIE['ddos']) or !$_COOKIE['ddos'])
{
$counter = @file($dir . $_SERVER["REMOTE_ADDR"]);
setcookie('ddos', $anticyka, time() + 3600*24*7*356); // на год нах.
if(count($counter) > 10)
{
if(!$debug){
ban();
}else{
die ("Блокированы.");
}
}
if(!$_COOKIE['ddos_log']=='bil'){
if(!$_GET['antiddos'] == 1){
setcookie('ddos_log', 'bil', time()+3600*24*7*356); //типо запрос уже был чтоб не перекидывало постоянно рефрешем.
header("Location: ./?antiddos=1");
}
}
}elseif ($_COOKIE['ddos'] !== $anticyka)
{
if(!$debug){
ban();
}else{
die ("Блокированы.");
}
}
break;
/////////////////////////
case 2:
if(empty($_COOKIE['ddos'])){
if(empty($_GET['antiddos'])){
if(!$_COOKIE['ddos_log']=='bil'){ //проверям есть ли запись в куках что был запрос
die('<meta http-equiv="refresh" content="0;URL=?antiddos='.$anticyka.'" />');
}
}elseif($_GET['antiddos'] == $anticyka){
setcookie('ddos', $anticyka, time()+3600*24*7*356);
setcookie('ddos_log', 'bil', time()+3600*24*7*356); //типо запрос уже был чтоб не перекидывало постоянно рефрешем.
}else{
if(!$debug){
ban();
die("May be shall not transform address line?");
}else{
echo "May be shall not transform address line?";
die ("Блокированы.");
}
}
}
break;
case 3:
if(!isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER']!== $ddosuser || $_SERVER['PHP_AUTH_PW'] !== $ddospass){
header('WWW-Authenticate: Basic realm="Vvedite parol\': '.$ddospass.' | Login: '.$ddosuser.'"');
header('HTTP/1.0 401 Unauthorized');
if(!$debug){
ban();
}else{
die ("Блокированы.");
}
die("<h1>401 Unauthorized</h1>");
}
break;
case 4:
die($off_message); //сайт отключен
break;
case 5:
if ($load[0] > 80) {
header('HTTP/1.1 503 Too busy, try again later');
die('<center><h1>503 Server too busy.</h1></center><hr><small><i>Server too busy. Please try again later. Apache server on '.$_SERVER['HTTP_HOST'].' at port 80 with <a href="http://forum.xaknet.ru/">ddos protect</a></i></small>');
}
break;
default:
break;
//////////////////////////
}
if ($_COOKIE['ddos'] == $anticyka)
{
@unlink($dir . $_SERVER["REMOTE_ADDR"]);
}
}
//////////////////////////////
//превед всем кто меня знает о_0
//(c)xaknet.ru
?>
0
· 06.11.2008, 18:44
PEPSI: как вообще защети свой сайт от таких вот проблем
Хоть бы написал какой у тебя стоит веб сервер... А то так и гадай, как тебя уложить можно. Все эти скрипты что пишут на форумах на пхп для сайтов ничем не помогут против ддос атаки чуть лучше чем кривые руки, надо делать только через системную часть, в серверрной конфигурации, а пхп здесь мало чем поможет. Ну а железо которое автоматом норм отслеживет и блочить стоит от 10k $. Например, HP голова для сложных сетей, мониторит весь траффик и при посылке каким-то пользователем лишних пакетов отрубает его либо запрещает доступ на айпи, куда идут левые пакеты. Короче, сделать при деньгах можно что угодно.
0
Войдите или зарегистрируйтесь чтобы ответить



