جاري التحميل...

حظر دولة معينة من دخول موقعك – دليل شامل

في بعض الحالات، قد تحتاج إلى حظر زوار من دولة معينة من الوصول إلى موقعك. هذا قد يكون لأسباب:

  • حماية من هجمات 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 RulesCreate a Firewall Rule
  • اختر: Field = CountryOperator = equalsValue = 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: أفضل الممارسات

  1. نسخ احتياطي دائم قبل حظر أي دولة.
  2. اختبار الحظر على VPN للتأكد من فعاليته.
  3. عدم الاعتماد على طريقة واحدة فقط – الجمع بين PHP, .htaccess, Cloudflare يعطي أفضل حماية.
  4. تحديث قائمة IPs بانتظام خاصة عند استخدام .htaccess أو Nginx.
  5. تنبيه المستخدمين المحظورين برسالة واضحة لمنع الالتباس.

خاتمة

حظر دولة معينة من دخول موقعك أصبح أسهل باستخدام PHP, .htaccess, Nginx, JavaScript, WordPress Plugins، Cloudflare.

  • لكل طريقة مزاياها وقيودها.
  • أفضل طريقة هي الجمع بين Cloudflare + PHP + قواعد السيرفر لضمان حماية كاملة.
  • هذه الأكواد يمكن استخدامها مباشرة لأي موقع سواء كان ووردبريس، HTML/CSS/JS، أو مواقع ديناميكية أخرى.

سر خفي: استخدام GeoIP + Firewall + Plugin يوفر أقوى حماية ممكنة دون التأثير على باقي الزوار.