-
April 8th, 2017, 15:32
#1
عضو انجمن
█ اسکریپت PHP مهار کننده حملات دیداس - PHP DDoS Protection
با سلام،
اسکریپت زیر یک اسکریپت ساده جهت بلاک کردن آی پی ها بر اساس تعداد رکوئست ها بر ثانیه در PHP می باشد که قابلیت اضافه کردن به پروژه ها و پلاگین ها و CMS ها را دارد.
فقط نکته مهم اینکه این اسکریپت قرار نیست تمامی حملات DDoS را مهار کند و معجزه کند!
این اسکریپت زمانی کارآیی دارد که حملات لایه 7 با پروتکل http بر روی یک سایت در حال انجام باشد و حملات با تعداد آی پی های محدود باعث کندی سایت شده باشند و احتمالا اگر حمله نسبت به سخت افزار و منابع سرور، فدرتمند محسوب شود ممکن است قبل از اینکه این اسکریپت بخواهد کار خودش را بکند وب سرور با مشکل مواجه شود و سایت از دسترس خارج شود.
این توضیح از آن جهت بود که برخی دوستان ممکن است به صورت اشتباه منظور بنده را متوجه شوند و اگر نه برای حملات لایه 7 باید از سمت وب سرور و حتی قبل از آن حملات شناسایی و مهار شوند.مقدار $r رکوئست های یک آی پی و متغیر $ps زمان بر حسب ثانیه است.
فرض اگر بخواهید که آی پی هایی که در طول 4 ثانیه اگر بیشتر از 8 رکوئست ارسال کرده اند را بلاک کنید باید مثل زیر باشد:
دریافت کد کامل اسکریپت :
کد PHP:
<?php
//M@soud Binaei
//Central-hosting.com
//**********
$r=5;
$ps=5;
//**********
session_start();
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
$ips=file('ip.txt');
foreach($ips as $ipbad)
{
if(trim($ipbad) == $ip){
header('HTTP/1.0 403 Forbidden');
echo'Blocked';
exit();
}
}
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > $ps)) {
session_unset();
session_destroy();
$_SESSION['rec'] = 1;
}
if(!isset($_SESSION['rec']) || $_SESSION['rec']==0){
$_SESSION['rec'] = 1;
$_SESSION['LAST_ACTIVITY'] = time();
}else{
$_SESSION['rec']++;
}
if($_SESSION['rec']>=$r){
$file = 'ip.txt';
$current = file_get_contents($file);
$current .= $ip."\n";
file_put_contents($file, $current);
}
?>
نکته: یک فایل با نام ip.txt بسازید و سطح دسترسی آن را 777 قرار دهید. بلک لیست آی پی ها در این فایل ذخیره می شوند.
تشکر فراموش نشود
█ سنترال هاستینگ - اولین سرویس دهنده DDoS Protected ایرانی!
█ شرکت ایمن میزبان راهبر کاسپین (شماره ثبت : 1799 شناسه ملی: 14006354907 )
-
تعداد تشکر ها ازyastheme به دلیل پست مفید
AtrafNet, bigtel, dertgtr, Gh-Moradi, hegza, host-net, iroo, k-h, k-pax, rezaonline.net, tikweb.ir
-
April 8th, 2017 15:32
# ADS
-
April 8th, 2017, 15:46
#2
عضو انجمن
پاسخ : █ اسکریپت PHP مهار کننده حملات دیداس - PHP DDoS Protection
پس همونطور که مشخصه میاد هربار چک میکنه اگر ایپی بازدید کننده داخل ip.txt بود ارور 403 بهش میده
چطور میشه اسکریپت رو جوری داخل سایت قرار داد که در هر صفحه این مورد چک نشه و یک چیزی شبیه کوکی ذخیره بشه
چون اگر بازدید سایت زیاد باشه و در هر صفحه چک بشه به احتمال زیاد سایت رو دچار کندی میکنه
:: گروه فناوری اطلاعات
تیک وب | ارائه انواع خدمات وب هاستینگ و کانفیگ سرور و cms | طراحی انواع وب سایت
::
دارنده نماد اعتماد دائم از وزارت صنعت ، معدن و تجارت
-
-
April 8th, 2017, 15:51
#3
عضو انجمن
پاسخ : █ اسکریپت PHP مهار کننده حملات دیداس - PHP DDoS Protection

نوشته اصلی توسط
tikweb.ir
پس همونطور که مشخصه میاد هربار چک میکنه اگر ایپی بازدید کننده داخل
ip.txt بود ارور 403 بهش میده
چطور میشه اسکریپت رو جوری داخل سایت قرار داد که در هر صفحه این مورد چک نشه و یک چیزی شبیه کوکی ذخیره بشه
چون اگر بازدید سایت زیاد باشه و در هر صفحه چک بشه به احتمال زیاد سایت رو دچار کندی میکنه
یکی از دلایلی که از فایل TXT به جای مثلا دیتابیس استفاده شده سرعت خواندن و نوشتن بالای اون هست،
این مورد تاثیر بسیار بسیار کمی در پردازش php دارد البته تا زمانی که فایل ip.txt سبک باشد و اگر تعداد آی پی ها مثلا به چند هزار تا برسه طبیعتا کمی توی سرعت خودشو نشون میده که این هم باز به هارد یا منابع سرور بستگی داره. که بهتره یکبار آی پی های بلاک شده توی این فایل توسط CSF یا htaccess بلاک بشه و بعد فایل ip.txt خالی بشه
ویرایش توسط yastheme : April 8th, 2017 در ساعت 15:53
█ سنترال هاستینگ - اولین سرویس دهنده DDoS Protected ایرانی!
█ شرکت ایمن میزبان راهبر کاسپین (شماره ثبت : 1799 شناسه ملی: 14006354907 )
-
-
April 8th, 2017, 18:57
#4
عضو انجمن
پاسخ : █ اسکریپت PHP مهار کننده حملات دیداس - PHP DDoS Protection
قرار نیست که اتکر هر بار با یک sessionID ثابت صفحه را لود کند که توسط این اسکریپت بتوان شناسایی اش کرد ...
کد:
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > $ps)) {
اتکر هر بار یک sessionID جدید داخل هدر به سایت ارسال میکنه ، یعنی عملا همیشه مقدار $_SESSION['LAST_ACTIVITY'] برابر با time() و مقدار $_SESSION['rec'] برابر با1 است...
-
تعداد تشکر ها ازus12 به دلیل پست مفید
-
April 8th, 2017, 21:24
#5
عضو انجمن
پاسخ : █ اسکریپت PHP مهار کننده حملات دیداس - PHP DDoS Protection

نوشته اصلی توسط
us12
قرار نیست که اتکر هر بار با یک sessionID ثابت صفحه را لود کند که توسط این اسکریپت بتوان شناسایی اش کرد ...
کد:
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > $ps)) {
اتکر هر بار یک sessionID جدید داخل هدر به سایت ارسال میکنه ، یعنی عملا همیشه مقدار $_SESSION['LAST_ACTIVITY'] برابر با time() و مقدار $_SESSION['rec'] برابر با1 است...
بله دقیقا، این مورد در حملات DDoS رایج است اما در برخی از حملات که معمولا کلودفلر یا سرویس های دیگر را بایپس می کنند و از آن عبور می کنند و به سرور هاستینگ میرسند به این دلیل است که کوکی توسط همه بات های یک بات نت پذیرفته می شود و هر رکوئست یک سشن جدید نیست، حتی دستورات جاوا نیز پردازش می شوند،
البته همانطور که گفتم این یک کد ساده است و می توان امکان تست پذیرفتن کوکی و رفرش صفحه با جاوا جهت تست صحت مرورگر توسط یک برنامه نویس اضافه شود،(مثل Page wait کلودفلر یا سرویس کلود پروتکشن ما) شاید طی روز های آینده در اولین فرصت به آن اضافه کنم.
در هر صورت همانطور که گفتم این کد قرار نیست همه حملات را پشتیبانی کند.
ویرایش توسط yastheme : April 8th, 2017 در ساعت 21:27
█ سنترال هاستینگ - اولین سرویس دهنده DDoS Protected ایرانی!
█ شرکت ایمن میزبان راهبر کاسپین (شماره ثبت : 1799 شناسه ملی: 14006354907 )
-
-
April 10th, 2017, 13:46
#6
پاسخ : █ اسکریپت PHP مهار کننده حملات دیداس - PHP DDoS Protection
سلام
خودتون چه مقداری روی برای دو متغییر زیر پیشنهاد میدید ؟
$r=8
$ps=4
-
-
April 11th, 2017, 13:20
#7
عضو انجمن
پاسخ : █ اسکریپت PHP مهار کننده حملات دیداس - PHP DDoS Protection

نوشته اصلی توسط
lnspiron
سلام
خودتون چه مقداری روی برای دو متغییر زیر پیشنهاد میدید ؟
$r=8
$ps=4
این مقدار بستگی به نیاز خودتون تعیین میشود،
همین اعداد8 و 4 خوب است.
█ سنترال هاستینگ - اولین سرویس دهنده DDoS Protected ایرانی!
█ شرکت ایمن میزبان راهبر کاسپین (شماره ثبت : 1799 شناسه ملی: 14006354907 )
-
-
April 18th, 2017, 15:10
#8
عضو انجمن
پاسخ : █ اسکریپت PHP مهار کننده حملات دیداس - PHP DDoS Protection

نوشته اصلی توسط
yastheme
یکی از دلایلی که از فایل TXT به جای مثلا دیتابیس استفاده شده سرعت خواندن و نوشتن بالای اون هست،
این مورد تاثیر بسیار بسیار کمی در پردازش php دارد البته تا زمانی که فایل ip.txt سبک باشد و اگر تعداد آی پی ها مثلا به چند هزار تا برسه طبیعتا کمی توی سرعت خودشو نشون میده که این هم باز به هارد یا منابع سرور بستگی داره. که بهتره یکبار آی پی های بلاک شده توی این فایل توسط CSF یا htaccess بلاک بشه و بعد فایل ip.txt خالی بشه
درود بر شما
و تشکر بابت این کد!
فکر نمیکنید اگر اطلاعات رو در یک تیبل دیتا بیس ذخیره بکنیم و با کرون تعریف کنیم مثلا هر ساعت ردیف های 24 ساعت به قبل رو خالی کن هم کار راحت تر میشه هم نیاز به اضافه کاری برای مدیر سایت نیست؟
پ.ن:
وقتی تعداد ردیف های یک فایل زیاد باشند سیستم سرچ php خیلی خیلی ضعیف تر از کوئری های مرسوم پایگاه داده عمل میکنه و به نوعی با اینکار سرعت لود سایت رو دارید به حداقل میرسونیم
و نیاز نیست تمپ رو درگیر سشن کنیم کافیه آی پی و تایم رو در حلقه کنترلی بررسی کنیم
- - - Updated - - -
ضمنا بهتره سشن رو قبل از تعرف متغییرها استارت کنیم
موفق باشید
پروردگارا مرا فهم ده:: تا متوقع نباشم. دنیا و مردمانش باید مطابق میل من رفتار کنند.
-
-
April 18th, 2017, 20:59
#9
عضو انجمن
پاسخ : █ اسکریپت PHP مهار کننده حملات دیداس - PHP DDoS Protection

نوشته اصلی توسط
hegza
درود بر شما
و تشکر بابت این کد!
فکر نمیکنید اگر اطلاعات رو در یک تیبل دیتا بیس ذخیره بکنیم و با کرون تعریف کنیم مثلا هر ساعت ردیف های 24 ساعت به قبل رو خالی کن هم کار راحت تر میشه هم نیاز به اضافه کاری برای مدیر سایت نیست؟
پ.ن:
وقتی تعداد ردیف های یک فایل زیاد باشند سیستم سرچ php خیلی خیلی ضعیف تر از کوئری های مرسوم پایگاه داده عمل میکنه و به نوعی با اینکار سرعت لود سایت رو دارید به حداقل میرسونیم
و نیاز نیست تمپ رو درگیر سشن کنیم کافیه آی پی و تایم رو در حلقه کنترلی بررسی کنیم
- - - updated - - -
ضمنا بهتره سشن رو قبل از تعرف متغییرها استارت کنیم
موفق باشید
البته این کد ها یک نمونه سمپل هست و کامل نیست، اما متاسفانه دیتابیس گزینه درستی نیست، سعی شده منابع کمتری مصرف شود، البته کران جاب بر روی فایل متنی هم قابل نوشتن و اجرا است ولی استفاده از دیتا بیس باعث افزایش چندین برابری منابع می شود.
البته باز هم تایید می کنم برای جلوگیری از حملات اصلا php توصیه نمیشود، باید از طریق فایروال و رول های وب سرور استفاده شود، این کد هم بدون نقص نیست. اما یک سمپل و الگو برای حملاتی است که معمولا از فایروال های کلودفلر عبور می کنند
ویرایش توسط yastheme : April 18th, 2017 در ساعت 21:06
█ سنترال هاستینگ - اولین سرویس دهنده DDoS Protected ایرانی!
█ شرکت ایمن میزبان راهبر کاسپین (شماره ثبت : 1799 شناسه ملی: 14006354907 )
-
تعداد تشکر ها از yastheme به دلیل پست مفید