Saturday, 18 May 2013

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 


Soạn thảo 1 file : banip.php

<?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[IMG] $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);}?> 


Edit :global.php ( Nếu là Forum) thêm vào
include 'banip.php'; 


Đoạn code này :
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 


reset.php
<?php
if(file_exists('.htaccess')) unlink('.htaccess');if(file_exists('banip.log')) unlink('banip.log');?> 

No comments:

Post a Comment