 |

11.07.2015, 17:31
|
|
Новичок
Регистрация: 20.10.2014
Сообщений: 0
С нами:
6086540
Репутация:
0
|
|
На уровне PHP защищаться от ддоса не эффективно, такие скрипты применяют на хостинг-тарифах, где нет возможности конфигурации сервера. Впрочем, хостеры обычно отключают сайт, если на него идет ДДос, поэтому никакие скрипты вы использовать не успеете.
Выкладываю некоторые здесь. Если кому помогут - отписывайтесь, вместе посмеемся над этим ддосером.
Но прежде чем использовать подобные скрипты, надо оценить обстановку.
Если ваш хостер предоставляет SSH-доступ, попробуйте с помощью команды
Код:
определить силу ддоса. Команда выведет количество соединений. Если сервер совсем повис, попробуйте перезагрузить его (через службу поддержки или самостоятельно если такая возможность есть) и отрубите апач
Код:
или
Код:
либо, если ддос несильный, закоментируйте срочку _index.php в корне вашего сайта. После чего можно поизучать логи и оценить силу и таргетинг ддоса.
Если ддос действительно слабенький, можно попробовать использовать PHP скрипты, но предупреждаю, они будут загружать сервер и годятся только как временное решение проблемы.
Скрипт AntiOverload *FIX*
Код:
Код:
Ошибка 503
Ошибка 503 (Service Unavailable)
Сервер не может в данный момент выдать запрашиваемую Вами страницу.
Попробуйте вызвать эту страницу позже (клавиша F5).
Антиддос скрипт от админа xaknet.ru:
Код:
Код:
(c)XakNet antiddos module, ваш IP - {IP}({UA}), date - {DATE}';
// команда выполнения бана в файрволле
public $exec_ban = 'iptables -A INPUT -s {IP} -j DROP';
// тип защиты от ддоса:
/* Возможные значения $ddos 1-5:
| 1. Простая проверка по кукам, по умолчанию(рекомендую)
| 2. Двойная проверка через $_GET antiddos и meta refresh
| 3. Запрос на авторизацию WWW-Authenticate
| 4. полное отключение сайта, боты не блокируются!!!
| 5. выключать сайт если нагрузка слишком большая на сервере, боты не блокируются!!!
*/
var $ddos = 1;
// часть домена поисковых ботов, см strpos()
private $searchbots = array('googlebot.com', 'yandex.ru', 'ramtel.ru', 'rambler.ru', 'aport.ru', 'sape.ru', 'msn.com', 'yahoo.net');
// временная переменные нужные для работы скрипта
private $attack = false;
private $is_bot = false;
private $ddosuser;
private $ddospass;
private $load;
public $maxload = 80;
function __construct($debug)
{
@session_start() or die('session_start() filed!');
$this->indeficator = md5(sha1('botik' . strrev(getenv('HTTP_USER_AGENT'))));
$this->ban_message = str_replace(array('{ICQ}', '{IP}', '{UA}', '{DATE}'),
array($this->icq, $_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT'], date('d.m.y H:i')),
$this->ban_message
);
if (eregi(ip2long($_SERVER['REMOTE_ADDR']), file_get_contents($this->dir . 'banned_ips')))
die($this->ban_message);
$this->exec_ban = str_replace('{IP}', $_SERVER['REMOTE_ADDR'], $this->exec_ban);
$this->debug = $debug;
if(!function_exists('sys_getloadavg'))
{
function sys_getloadavg()
{
return array(0,0,0);
}
}
$this->load = sys_getloadavg();
if(!$this->sbots())
{
$this->attack = true;
$f = fopen($this->dir . ip2long($_SERVER["REMOTE_ADDR"]), "a");
fwrite($f, "query\n");
fclose($f);
}
}
/**
* Старт работы антиддоса
**/
function start()
{
if($this->attack == false)
return;
switch($this->ddos)
{
case 1:
$this->addos1();
break;
case 2:
$this->addos2();
break;
case 3:
$this->ddosuser = substr(ip2long($_SERVER['REMOTE_ADDR']), 0, 4);
$this->ddospass = substr(ip2long($_SERVER['REMOTE_ADDR']), 4, strlen(ip2long($_SERVER['REMOTE_ADDR'])));
$this->addos3();
break;
case 4:
die($this->off_message);
break;
case 5:
if ($this->load[0] > $this->maxload)
{
header('HTTP/1.1 503 Too busy, try again later');
die('503 Server too busy.Server too busy. Please try again later. Apache server on ' . $_SERVER['HTTP_HOST'] . ' at port 80 with ddos protect');
}
break;
default:
break;
}
if ($_COOKIE['ddos'] == $this->indeficator)
@unlink($this->dir . ip2long($_SERVER["REMOTE_ADDR"]));
}
/**
* Функция проверяет не является ли клиент поисковым ботом
**/
function sbots()
{
$tmp = array();
foreach($this->searchbots as $bot)
{
$tmp[] = strpos(gethostbyaddr($_SERVER['REMOTE_ADDR']), $bot) !== false;
if($tmp[count($tmp) - 1] == true)
{
$this->is_bot = true;
break;
}
}
return $this->is_bot;
}
/**
* Функция бана
**/
private function ban()
{
if (! system($this->exec_ban))
{
$f = fopen($this->dir . 'banned_ips', "a");
fwrite($f, ip2long($_SERVER['REMOTE_ADDR']) . '|');
fclose($f);
}
die($this->ban_message);
}
/**
* Первый тип защиты
**/
function addos1()
{
if (empty($_COOKIE['ddos']) or !isset($_COOKIE['ddos']))
{
$counter = @file($this->dir . ip2long($_SERVER["REMOTE_ADDR"]));
setcookie('ddos', $this->indeficator, time() + 3600 * 24 * 7 * 356); // ставим куки на год.
if (count($counter) > 10) {
if (! $this->debug)
$this->ban();
else
die("Блокированы.");
}
if (! $_COOKIE['ddos_log'] == '1')
{
if (! $_GET['antiddos'] == 1)
{
setcookie('ddos_log', '1', time() + 3600 * 24 * 7 * 356); //чтоб не перекидывало постоянно рефрешем.
if(headers_sent())
die('Header already sended, check it, line '.__LINE__);
header("Location: ./?antiddos=1");
}
}
} elseif ($_COOKIE['ddos'] !== $this->indeficator)
{
if (! $this->debug)
$this->ban();
else
die("Блокированы.");
}
}
/**
* Второй тип защиты
**/
function addos2()
{
if (empty($_COOKIE['ddos']) or $_COOKIE['ddos'] !== $this->indeficator)
{
if (empty($_GET['antiddos']))
{
if (! $_COOKIE['ddos_log'] == '1')
//проверям есть ли запись в куках что был запрос
die('indeficator . '" />');
} elseif ($_GET['antiddos'] == $this->indeficator)
{
setcookie('ddos', $this->indeficator, time() + 3600 * 24 * 7 * 356);
setcookie('ddos_log', '1', time() + 3600 * 24 * 7 * 356); //типо запрос уже был чтоб не перекидывало постоянно рефрешем.
}
else
{
if (!$this->debug)
$this->ban();
else
{
echo "May be shall not transform address line?";
die("Блокированы.");
}
}
}
}
/**
* Третий тип защиты
**/
function addos3()
{
if (! isset($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER'] !== $this->ddosuser || $_SERVER['PHP_AUTH_PW'] !== $this->ddospass)
{
header('WWW-Authenticate: Basic realm="Vvedite parol\': ' . $this->ddospass . ' | Login: ' . $this->ddosuser . '"');
header('HTTP/1.0 401 Unauthorized');
if (! $this->debug)
$this->ban();
else
die("Блокированы.");
die("401 Unauthorized");
}
}
}
/*
// Exmaple
$ad = new antiDdos(false);
$ad->dir = 'bots/';
$ad->ddos = 2;
$ad->start();
*/
?>
Скрипт Boolean
Код:
Код:
= time() - $config['time']){
if (file_exists($config['directory'] . "/" . $config['banmask'] . $ip)){
$count = file_get_contents($config['directory'] . "/" . $config['banmask'] . $ip);
if ($count >= $config['countaban']){
for($i = 0; $i = time() - $config['time']){
$count++;
$f=fopen( $config['directory'] . "/" . $config['banmask'] . $ip , 'w' );
fwrite($f,$count);
fclose($f);
}else{
$f=fopen( $config['directory'] . "/" . $config['banmask'] . $ip , 'w' );
fwrite($f,"1");
fclose($f);
}
}
}else{
$f=fopen( $config['directory'] . "/" . $config['banmask'] . $ip , 'w' );
fwrite($f,"0");
fclose($f);
}
exit($config['message']);
}
}else{
$f=fopen( $config['directory'] . "/" . $config['checkmask'] . $ip , 'w');
fclose($f);
}
}
?>
Скрипт нужно инклюдить в исполняемый файл, в index.php, например.
Создаем файл, допустим, antiddos.php, туда копируем любой код из вышеприведенных, затем в файле index.php пишем вверху:
Код:
Код:
include("antiddos.php");
exit; // нужно дать скрипту побанить ботов некоторое время, а потом можно закомментировать exit.
|
|
|

11.07.2015, 22:55
|
|
Новичок
Регистрация: 20.10.2014
Сообщений: 0
С нами:
6086540
Репутация:
0
|
|
Скрипт (D)DoS-Deflate
Работает довольно просто — каждую минуту по крону запускается команда
Код:
Код:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
и выбираются все айпишники число соединений с которых превышает заданное в конфиге ограничени(по умолчанию 150).
Время бана тоже настраивается в конфиге. Также можно выбрать с каким файрволом работать — iptables или apf(надстройка над iptables).
Официальный сайт http://deflate.medialayer.com/
Установка:
Код:
Код:
wget http://www.inetbase.com/scripts/ddos/install.sh
chmod 0700 install.sh
./install.sh
Удаление:
Код:
Код:
wget http://www.inetbase.com/scripts/ddos/uninstall.ddos
chmod 0700 uninstall.ddos
./uninstall.ddos
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|