Hoşgeldin Misafir

Php İle Basit DDoS Koruması

xS0N3R

23 Ağu 2020
5,424 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Php ile hazırlanmış bi ddos koruması kodlar düzeltilebilir ve geliştirilebilir. Geliştiren arkadaşlar bizimle paylaşırsa seviniriz

PHP:
<?php
// Konfigürasyon Ayarları
$config = [
'block_time' => 10, // Ban süresi (saniye)
'max_requests' => 20, // Maksimum istek sayısı
'file' => 'requests.json',
'whitelist' => ['127.0.0.1', '::1'], // Whitelist'e alınacak IP'ler
'blacklist' => [], // Manuel blacklist
'log_file' => 'access.log',
'enable_rate_limiting' => true,
'enable_logging' => true
];
// Hata Yönetimi
error_reporting(E_ALL);
ini_set('display_errors', 0); // Üretim ortamında hataları gösterme
ini_set('log_errors', 1);
ini_set('error_log', 'error.log');
// IP Doğrulama Fonksiyonu
function validateIp($ip) {
return filter_var($ip, FILTER_VALIDATE_IP) !== false;
}
function logAccess($ip, $status, $config) {
if (!$config['enable_logging']) return;

$timestamp = date('Y-m-d H:i:s');
$logEntry = "[$timestamp] IP: $ip, Status: $status\n";
file_put_contents($config['log_file'], $logEntry, FILE_APPEND);
}

try {
$ip = $_SERVER['REMOTE_ADDR'];

// ip Doğrulama
if (!validateIp($ip)) {
http_response_code(400);
exit("Geçersiz IP adresi");
}

// whitelist kontrol
if (in_array($ip, $config['whitelist'])) {
echo "Erişim başarılı. IP Adresiniz: $ip (Whitelist)";
logAccess($ip, 'Whitelist Access', $config);
exit;
}

// blacklist kontrol
if (in_array($ip, $config['blacklist'])) {
http_response_code(403);
logAccess($ip, 'Blacklist Blocked', $config);
exit("403 - Erişim Engellendi. IP Adresiniz kalıcı olarak engellenmiştir.");
}

if (!$config['enable_rate_limiting']) {
echo "Erişim başarılı. IP Adresiniz: $ip";
logAccess($ip, 'Direct Access (Rate Limiting Disabled)', $config);
exit;
}

$requests = [];
if (file_exists($config['file'])) {
$content = file_get_contents($config['file']);
$requests = json_decode($content, true) ?: [];
}

// süresi dolan kayıtları temizle
foreach ($requests as $key => $value) {
if (isset($value['expires']) && $value['expires'] < time()) {
unset($requests[$key]);
}
}

// istek sayısını kontrol et
if (isset($requests[$ip])) {
$requests[$ip]['count']++;

if ($requests[$ip]['count'] > $config['max_requests']) {
http_response_code(429);
$remaining_time = $requests[$ip]['expires'] - time();
logAccess($ip, 'Rate Limit Blocked', $config);
exit("429 - Çok fazla istek IP Adresiniz: $ip. lütfen $remaining_time saniye sonra tekrar deneyiniz.");
}
} else {
$requests[$ip] = [
'count' => 1,
'expires' => time() + $config['block_time'],
'ip' => $ip,
'first_access' => time()
];
}

// Verileri Kaydet
file_put_contents(
$config['file'],
json_encode($requests, JSON_PRETTY_PRINT | JSON_FORCE_OBJECT),
LOCK_EX // Dosya kilitleme
);

echo "Erişim başarılı. IP Adresiniz: $ip";
logAccess($ip, 'Successful Access', $config);

} catch (Exception $e) {
// Hata durumunda
http_response_code(500);
error_log("IP Kontrol Hatası: " . $e->getMessage());
exit("500 - Sunucu Hatası lütfen daha sonra tekrar deneyiniz.");
}
?>
 

coderby

Germany
15 Ara 2021
2,096 Mesaj
TIM Görevleri
1

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Php de siteye direkt olarak istek geldiği için bu kod yüksek botnette saldırıyı durduramaz .htaccess ile desteklenebilir fakat microtic yok ise barındığınız sunucuda işlevi olmaz sunucu veya hosting alırken stormwall var mı diye sorup benchmark test isterseniz daha iyi ve sağlıklı olacaktır