Защити от HTTP Flooder

Theif

Registered
Как мога да защитя сайта ми от HTTP Flooder програми... ако някой иска да го спре (http flood атака) сайта автоматично да му банва айпи адрес-а.
Благодаря предварително
 
Ако е линукс iptables и ако има прекомпирано ядро да подържа кон лимит става още по лесно.

man iptables e описано всичко :

блок на 1 ип

iptables -A INPUT -s 192.168.1.1 -j REJECT

блок на C клас

iptables -A INPUT -s 192.168.0.0/24 -j REJECT

блок порт 80 с connlimit

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECT

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset
 
ddevil каза:
Ако е линукс iptables и ако има прекомпирано ядро да подържа кон лимит става още по лесно.

man iptables e описано всичко :

блок на 1 ип

iptables -A INPUT -s 192.168.1.1 -j REJECT

блок на C клас

iptables -A INPUT -s 192.168.0.0/24 -j REJECT

блок порт 80 с connlimit

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECT

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset
Добре си ми го обяснил :)
Но Мен ме интересува кода ,с който мога да си защитя сайта от такива атаки и айпи адресите да се записваш в дб с логовете(атаките)...
И след това да си носят последтвията.

Примерно:
<?php
funcion blocked_http_attack();
Кода...
?>

Не зная как точно е...
Дори и да не е с фукнция... пак ще съм доволен (надявам се да не бъде с функциии)
 
devent каза:
http://web-tourist.net/login/login/view.php?st=896
Това може да ти даде някакви насоки ;)
Значи примерно правя:
index.php
Код:
<?
include "flooder1.php";
?>
Моят код на страницата...........

flooder1.php
Код:
<?php 

$floodfile = "flood.php"; // в този файл се записват IP адресите 
$floodtime = 30; // времето е в секунди 
$ipaddress = getrealip(); // с тази функция взимаме реалното IP 
$addedtime = time(); // времето... 

if(flooder($ipaddress)){ 
echo "<center><font style="font-family: verdana; font-size: 11px; color: maroon;"><b>FLOOD ЗАЩИТА!</b></font><br /><br /><font style="font-family: verdana; font-size: 10px; color: maroon;">Трябва да изчакате $floodtime секунди преди да посетите страницата отново!</font></center>"; 
exit; 
} 
else{ 
$floodfp = fopen($floodfile, "a"); 
fwrite($floodfp, "$addedtime|$ipaddress|\n"); 
fclose($floodfp); 
} 

function flooder($ipaddress){ 
global $floodtime, $floodfile; 

$old_db = file($floodfile); 
$new_db = fopen($floodfile, w); 
$result = FALSE; 
foreach($old_db as $old_db_line){ 
$old_db_arr = explode("|", $old_db_line); 
if(($old_db_arr[0] + $floodtime) > time() ){ 
fwrite($new_db, $old_db_line); 
if($old_db_arr[1] == $ipaddress){ 
$result = TRUE; 
} 
} 
} 
fclose($new_db); 
return $result; 
} 

function getrealip(){ 
if(getenv('HTTP_X_FORWARDED_FOR')){ 
$ipaddress = $_SERVER['REMOTE_ADDR']; 
if(preg_match("/^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/", getenv('HTTP_X_FORWARDED_FOR'), $ipaddress3)){ 
$ipaddress2 = array('/^0\./', '/^127\.0\.0\.1/', '/^192\.168\..*/', '/^172\.16\..*/', '/^10..*/', '/^224..*/', '/^240..*/'); 
$ipaddress = preg_replace($ipaddress2, $ipaddress, $ipaddress3[1]); 
} 
}else{ 
$ipaddress = $_SERVER['REMOTE_ADDR']; 
} 
if($ipaddress == ""){ $ipaddress = "12.34.56.78"; } 
return $ipaddress; 
}


празния файл flood.php

Иначе казано спира атаката.. ?

Само неразбрах { $ipaddress = "12.34.56.78"; } тук моя ли айпи адрес трябва да е или да го оставя така ?
 
Да, така се прави. Пробвай после да натиснеш рефреш на index.php за да видиш какво ще стане. А там, вероятно трябва да въведеш твоят IP address, не съм разглеждал кода ;):)
 
Там се въвежда IP което да се ползва ако не може да се вземе IP-то на потребителя... което няма как да стане
 
Така нещо не схванех... :wink:
С една дума да си въведа моя айпи адрес, или не :roll:
Иначе благодаря на всички. :wink:
 

Back
Горе