17 thg 6, 2012
Tự động lock ip khi bị ddos attack
Cơ chế:Khi 1 ip gửi 1 request tới site của bạn. code sẽ tạo ra 1 file log ghi lại ip đó, và url mà ip đó truy cập.
Ví dụ : 113.22.70.69 - http://mydomain.com/4rum/index.php
nếu ip 113.22.70.69 truy cập nhanh và liên tiếp 5 lần vào cùng 1 url như trên thì code sẽ lock ip 113.22.70.69 bằng cách tạo ra 1 file htaccess
và ghi lệnh deny from 113.22.70.69
và ghi lệnh deny from 113.22.70.69
<?php
$n = 5; // Chặn ip nếu 5 lần nhanh và liên tiếp truy cập vào 1 URL
$ban = strpos($_SERVER***91;'REQUEST_URI'***93;, "vbshout.php")?0:1;
$in = "\n".$_SERVER***91;'REMOTE_ADDR'***93;." - ".$_SERVER***91;'REQUEST_URI'***93;;
$log = fopen('banip.log','a'); fwrite($log, $in); fclose($log);
$list = file('banip.log',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$last = count($list) - 1;
if($last >1000) { $in = "Deny from all"."\n";
$lock = fopen('.htaccess','a'); fwrite($lock, $in); fclose($lock); }
elseif($last > $n) { for($i = 1; $i < $n; $i++) if($list***91;$last - $i***93; != $list***91;$last***93 $ban = 0;
} else { $ban = 0; }
if($ban) { $in = "Deny from ".$_SERVER***91;'REMOTE_ADDR'***93;."\n";
$lock = fopen('.htaccess','a'); fwrite($lock, $in); fclose($lock);}
?>
$n = 5; // Chặn ip nếu 5 lần nhanh và liên tiếp truy cập vào 1 URL
$ban = strpos($_SERVER***91;'REQUEST_URI'***93;, "vbshout.php")?0:1;
$in = "\n".$_SERVER***91;'REMOTE_ADDR'***93;." - ".$_SERVER***91;'REQUEST_URI'***93;;
$log = fopen('banip.log','a'); fwrite($log, $in); fclose($log);
$list = file('banip.log',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$last = count($list) - 1;
if($last >1000) { $in = "Deny from all"."\n";
$lock = fopen('.htaccess','a'); fwrite($lock, $in); fclose($lock); }
elseif($last > $n) { for($i = 1; $i < $n; $i++) if($list***91;$last - $i***93; != $list***91;$last***93 $ban = 0;
} else { $ban = 0; }
if($ban) { $in = "Deny from ".$_SERVER***91;'REMOTE_ADDR'***93;."\n";
$lock = fopen('.htaccess','a'); fwrite($lock, $in); fclose($lock);}
?>
include 'banip.php';
if($last >1000) { $in = "Deny from all"."\n";
........
Khi 1 ip truy cập vào site. code sẽ ghi ip đó vào 1 dòng
Sau đó sẽ đếm tổng số dòng trong file log. nếu lớn hơn 1000 dòng trong 1 thời gian nhất định (Dấu hiệu bị tấn công bonet) thì sẽ ghi vào file
htaccess lệnh deny from all.Các bạn có thể lập lịch xoá file htaccess và file log theo 1 thời gian quy định bằng cron job trong cpanel của host
Sau đó sẽ đếm tổng số dòng trong file log. nếu lớn hơn 1000 dòng trong 1 thời gian nhất định (Dấu hiệu bị tấn công bonet) thì sẽ ghi vào file
htaccess lệnh deny from all.Các bạn có thể lập lịch xoá file htaccess và file log theo 1 thời gian quy định bằng cron job trong cpanel của host
<?php
if(file_exists('.htaccess')) unlink('.htaccess');
if(file_exists('banip.log')) unlink('banip.log');
?>
if(file_exists('.htaccess')) unlink('.htaccess');
if(file_exists('banip.log')) unlink('banip.log');
?>
Không có nhận xét nào:
Đăng nhận xét