في بعض الحالات، قد تحتاج إلى حظر زوار من دولة معينة من الوصول إلى موقعك. هذا قد يكون لأسباب:
- حماية من هجمات DDoS أو هجمات سيو ضارة من دول معينة.
- منع الوصول غير المرغوب فيه لمحتوى معين.
- التوافق مع لوائح قانونية أو شروط ترخيص.
هذا المقال يغطي كل الطرق الممكنة لحظر دولة معينة مع أمثلة عملية ضخمة جدًا لكل طريقة، بحيث يمكن لأي موقع تطبيقها بسهولة.
القسم 1: حظر الدولة باستخدام PHP
1️⃣ استخدام IP Geo-Location
يمكنك استخدام قاعدة بيانات GeoIP مثل MaxMind GeoIP2 لتحديد الدولة وحظرها.
تثبيت مكتبة GeoIP2
composer require geoip2/geoip2
مثال كود PHP لحظر دولة
<?php
require_once 'vendor/autoload.php';
use GeoIp2\Database\Reader;// إنشاء كائن Reader
$reader = new Reader('/path/to/GeoLite2-Country.mmdb');// الحصول على IP الزائر
$ip = $_SERVER['REMOTE_ADDR'];try {
$record = $reader->country($ip);
$countryCode = $record->country->isoCode; // حظر دولة معينة، مثلا الصين CN
$blocked_countries = ['CN', 'RU', 'KP'];
if(in_array($countryCode, $blocked_countries)){
header("HTTP/1.0 403 Forbidden");
exit("دخول الزوار من هذه الدولة ممنوع.");
}
} catch (Exception $e) {
// في حالة فشل التعرف على IP
header("HTTP/1.0 403 Forbidden");
exit("دخولك محظور.");
}
?>
2️⃣ مثال حظر متعدد الدول مع رسالة مخصصة
<?php
$blocked_countries = ['CN', 'RU', 'KP', 'IR', 'SY'];
if(!function_exists('get_visitor_country')){
function get_visitor_country(){
$ip = $_SERVER['REMOTE_ADDR'];
$json = file_get_contents("http://ip-api.com/json/{$ip}");
$data = json_decode($json,true);
return $data['countryCode'] ?? 'Unknown';
}
}
$country = get_visitor_country();
if(in_array($country,$blocked_countries)){
echo "<h1>Access Denied</h1><p>دخول الزوار من هذه الدولة ممنوع.</p>";
exit;
}
?>
هذه الطريقة تعتمد على API مجاني لتحديد الدولة بدقة.
القسم 2: حظر الدولة باستخدام .htaccess (Apache)
1️⃣ استخدام IP ranges
كل دولة لها مجموعات IP يمكن حظرها في ملف .htaccess.
# China IP range example
<RequireAll>
Require all granted
Require not ip 1.0.1.0/24
Require not ip 1.0.2.0/23
Require not ip 1.0.8.0/21
</RequireAll>
يمكنك تحميل ملفات IP لكل دولة من مواقع مثل: IP2Location
2️⃣ مثال حظر دولة كاملة
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^1\.0\.1\. [OR]
RewriteCond %{REMOTE_ADDR} ^1\.0\.2\. [OR]
RewriteCond %{REMOTE_ADDR} ^1\.0\.8\.
RewriteRule ^.*$ - [F,L]
</IfModule>
مع مئات الأكواد يمكنك حظر أي دولة باستخدام قائمة IP كاملة.
القسم 3: حظر الدولة في Nginx
1️⃣ مثال Nginx باستخدام geo module
http {
geo $blocked_country {
default 0;
CN 1; # China
RU 1; # Russia
KP 1; # North Korea
} server {
listen 80;
server_name example.com; if ($blocked_country) {
return 403;
} location / {
try_files $uri $uri/ =404;
}
}
}
2️⃣ مع رسالة مخصصة
if ($blocked_country) {
return 403 "دخول الزوار من هذه الدولة ممنوع";
}
القسم 4: حظر الدولة في WordPress
1️⃣ استخدام Plugin
- iQ Block Country – مجاني وفعال
- IP2Location Country Block – يدعم الحظر حسب الدولة وتخصيص الصفحة المحظورة
2️⃣ استخدام أكواد PHP داخل functions.php
function block_countries() {
$blocked = ['CN','RU','KP'];
$ip = $_SERVER['REMOTE_ADDR'];
$country = file_get_contents("http://ip-api.com/json/{$ip}");
$country = json_decode($country,true)['countryCode'] ?? 'Unknown';
if(in_array($country,$blocked)){
wp_die('Access Denied. دخول الزوار من هذه الدولة ممنوع.');
exit;
}
}
add_action('init','block_countries');
القسم 5: حظر الدولة باستخدام JavaScript (محدود)
ملاحظة: هذه الطريقة ليست دقيقة 100% ويمكن تجاوزها بسهولة، لكنها مفيدة كطبقة حماية إضافية.
fetch('https://ipapi.co/json/')
.then(res => res.json())
.then(data => {
const blocked = ['CN','RU','KP'];
if(blocked.includes(data.country)){
document.body.innerHTML = '<h1>Access Denied</h1><p>دخول الزوار من هذه الدولة ممنوع.</p>';
}
});
القسم 6: حظر الدولة باستخدام Cloudflare
- اذهب إلى Firewall Rules → Create a Firewall Rule
- اختر:
Field = Country→Operator = equals→Value = China - ثم Block أو Challenge
- يمكنك إضافة قواعد متعددة للدول.
ميزة Cloudflare أنها تمنع الهجوم قبل وصوله لسيرفر الموقع، مما يحمي الموارد ويحافظ على سرعة الموقع.
القسم 7: أكواد ضخمة لإدارة الحظر الديناميكي
1️⃣ حفظ قائمة الدول المحظورة في ملف JSON
<?php
$blocked_countries = json_decode(file_get_contents('blocked_countries.json'), true);
$ip = $_SERVER['REMOTE_ADDR'];
$country = file_get_contents("http://ip-api.com/json/{$ip}");
$country = json_decode($country,true)['countryCode'] ?? 'Unknown';
if(in_array($country,$blocked_countries)){
header("HTTP/1.0 403 Forbidden");
exit("دخول الزوار من هذه الدولة ممنوع.");
}
?>
2️⃣ إدارة التحديث الدوري للقائمة
<?php
$blocked = ['CN','RU','KP','IR','SY'];
file_put_contents('blocked_countries.json', json_encode($blocked));
?>
القسم 8: أفضل الممارسات
- نسخ احتياطي دائم قبل حظر أي دولة.
- اختبار الحظر على VPN للتأكد من فعاليته.
- عدم الاعتماد على طريقة واحدة فقط – الجمع بين PHP, .htaccess, Cloudflare يعطي أفضل حماية.
- تحديث قائمة IPs بانتظام خاصة عند استخدام .htaccess أو Nginx.
- تنبيه المستخدمين المحظورين برسالة واضحة لمنع الالتباس.
خاتمة
حظر دولة معينة من دخول موقعك أصبح أسهل باستخدام PHP, .htaccess, Nginx, JavaScript, WordPress Plugins، Cloudflare.
- لكل طريقة مزاياها وقيودها.
- أفضل طريقة هي الجمع بين Cloudflare + PHP + قواعد السيرفر لضمان حماية كاملة.
- هذه الأكواد يمكن استخدامها مباشرة لأي موقع سواء كان ووردبريس، HTML/CSS/JS، أو مواقع ديناميكية أخرى.
سر خفي: استخدام GeoIP + Firewall + Plugin يوفر أقوى حماية ممكنة دون التأثير على باقي الزوار.