<?php
$ip=$_SERVER["REMOTE_ADDR"];
##модуль для защиты от ддос аттак-массовых регистраций
#максимальное количество действий в единицу времени
$maxregs=50;
#время в секундах после которого запреты с ip снимаются
$cleardelta=300; #снятие блокировки ip через 5 минут
#######фиксирование IP в файле###############
$rootdir="/accounts//";
$arr=split("\.",$ip);
$dirname=$rootdir."antidos/".$arr[3];
$fname="$dirname/$ip.txt";
$semfname=$rootdir."antidos/lastclear.sem";
if (!is_dir($dirname)){mkdir($dirname);}
$regs=0;
@$regs=trim(file_get_contents($fname));
settype($regs,"integer");
$regs++;
$fp=fopen($fname,"w");
fwrite($fp,$regs);
fclose($fp);
#############################################
#######создадим файл-семафор
if (!file_exists($semfname)){
$fp=fopen($semfname,"w");
fwrite($fp,"SEM");
fclose($fp);
}
#время последнего доступа к семафорному файлу
$filemtime=filemtime($semfname);
$rectime=time();
$delta=$rectime-$filemtime;
#если пришло время чистить блокированные Ip адреса
if ($delta>$cleardelta){
for ($i=0;$i<=255;$i++){
$cleardirname=$rootdir."antidos/$i/";
if (is_dir($cleardirname)){
if ($dir = @opendir($cleardirname)) {
while (($file = readdir($dir)) !== false) {
$ps=strpos($file,".txt");
if ($ps>0){
$file="$cleardirname$file";
unlink($file);
}
}
closedir($dir);
}
}
}
$fp=fopen($semfname,"w");
fwrite($fp,"SEM");
fclose($fp);
}
############################
####превышено предельное число действий в единицу времени
if ($regs>$maxregs){
echo "
Доступ Вам к сайту временно закрыт<br>
Ваш ip адрес записан<br>
";
$delta=$regs-$maxregs;
if ($delta<=1){
$fp=fopen("antidos/intruders.txt","a");
fwrite($fp,$ip.chr(13).chr(10));
fclose($fp);
$fp=fopen(".htaccess","a");
fwrite($fp,chr(13).chr(10)."Deny From $ip");
fclose($fp);
}
flush();
die();
}
#########################################################
?>