العربية

حظر الاتصالات الصادرة نحو الشبكات الخاصة باستخدام UFW

2 min
استضافة VPS/VDS

عندما يبدأ سكربت مخترَق أو تطبيق سيئ الإعداد بفحص عناوين 10.x أو 192.168.x، تغادر الحركة خادمك وكثيرًا ما تؤدي إلى بلاغات إساءة من الشبكة. إن حظر الاتصالات الصادرة نحو النطاقات الخاصة إجراء وقائي بسيط على أي VPS Linux Infrawire. يوضح هذا الدليل كيف تفعل ذلك بـ UFW دون كسر DNS أو اتصالك بالخادم.

📋 المتطلبات

  • خادم VPS مع وصول SSH بصلاحية root، بنظام Ubuntu 24.04 أو Debian 12 (UFW متوفر في كليهما).
  • معرفة أساسية بـ UFW. إن لم يكن مثبّتًا بعد:
Bash
sudo apt update && sudo apt install -y ufw
  • جلسة SSH ثانية تبقى مفتوحة أثناء تغيير الجدار الناري.

🧭 النطاقات التي يجب حظرها

النطاقالاستخدام
10.0.0.0/8خاص وفق RFC1918
172.16.0.0/12خاص وفق RFC1918
192.168.0.0/16خاص وفق RFC1918
100.64.0.0/10NAT على مستوى المشغّل (RFC6598)
169.254.0.0/16link-local لـ IPv4
192.0.0.0/24تخصيصات بروتوكولات IETF
198.18.0.0/15اختبارات الأداء
fc00::/7عناوين IPv6 المحلية الفريدة

لا تحظر fe80::/10: يستخدم IPv6 عناوين link-local لاكتشاف الجيران وغالبًا للبوابة الافتراضية، وحظرها يقطع IPv6 بالكامل.

🔍 تحقق أولًا مما يحتاجه خادمك فعلًا

إذا كانت البوابة أو محلِّل DNS في نطاق خاص، فسيقطع الحظر الشامل شبكتك. اطّلع على إعدادك قبل إضافة أي قاعدة:

Bash
ip route ip -6 route cat /etc/resolv.conf resolvectl status | grep -E 'DNS Servers|Link'

إذا كان لمحلِّل أو خدمة تعتمد عليها عنوان خاص (PRIVATE_DNS_IP)، فاسمح به صراحةً وضع هذه القاعدة أولًا كما يلي. وإن كان كل ما تستخدمه عامًا، يمكنك تخطي هذه الخطوة.

🧱 الطريقة 1: ufw deny out

تأكد من بقاء SSH متاحًا، ثم اضبط السياسات الافتراضية. لا تتأثر ردود الجلسات الواردة إلى SSH بقواعد الصادر نحو النطاقات الخاصة.

Bash
sudo ufw allow 22/tcp sudo ufw default deny incoming sudo ufw default allow outgoing

إذا احتجت استثناءً فأدرجه في الموضع 1 ليُقيَّم قبل قواعد المنع:

Bash
sudo ufw insert 1 allow out to PRIVATE_DNS_IP port 53

أضف الآن قواعد المنع، واحدة لكل نطاق (تُقيَّم قواعد UFW بالترتيب وتفوز أول مطابقة):

Bash
sudo ufw deny out to 10.0.0.0/8 sudo ufw deny out to 172.16.0.0/12 sudo ufw deny out to 192.168.0.0/16 sudo ufw deny out to 100.64.0.0/10 sudo ufw deny out to 169.254.0.0/16 sudo ufw deny out to 192.0.0.0/24 sudo ufw deny out to 198.18.0.0/15 sudo ufw deny out to fc00::/7 sudo ufw enable

قد يحذّرك ufw enable من أنه قد يقطع اتصالات SSH؛ وبما أن المنفذ 22 مسموح، أجب بـ y. راجع الترتيب بالأمر:

Bash
sudo ufw status numbered

📄 الطريقة 2: before.rules

إذا فضّلت كتلة واحدة من القواعد تُطبَّق قبل قواعد المستخدم، فعدّل /etc/ufw/before.rules. خذ نسخة احتياطية أولًا:

Bash
sudo cp /etc/ufw/before.rules /etc/ufw/before.rules.bak sudo nano /etc/ufw/before.rules

في قسم *filter، بعد الأسطر التي تقبل loopback والاتصالات القائمة، أضف:

TEXT
1# حظر الحركة الصادرة نحو الشبكات الخاصة 2-A ufw-before-output -d 10.0.0.0/8 -j REJECT 3-A ufw-before-output -d 172.16.0.0/12 -j REJECT 4-A ufw-before-output -d 192.168.0.0/16 -j REJECT 5-A ufw-before-output -d 100.64.0.0/10 -j REJECT 6-A ufw-before-output -d 169.254.0.0/16 -j REJECT

لـ IPv6 ملف خاص هو /etc/ufw/before6.rules وفيه السلسلة ufw-before-output:

TEXT
-A ufw-before-output -d fc00::/7 -j REJECT

ضع استثناء PRIVATE_DNS_IP فوق هذه الأسطر مباشرة بالسطر -A ufw-before-output -d PRIVATE_DNS_IP -j ACCEPT. ثم أعد التحميل:

Bash
sudo ufw reload

يردّ REJECT فورًا بخطأ، فتفشل التطبيقات بسرعة بدل انتظار انتهاء المهلة. استخدم -j DROP إن فضّلت الصمت.

✅ التحقق

يجب أن تكون القواعد محمَّلة، وأن تفشل الوجهات المحظورة بينما تعمل الوجهات العامة:

Bash
sudo ufw status verbose ping -c 1 10.0.0.1 # يجب أن يفشل ping -c 1 192.168.1.1 # يجب أن يفشل curl -m 5 http://10.0.0.1 # يجب أن يفشل ping -c 2 1.1.1.1 # يجب أن ينجح dig +short example.com # يجب أن يُحلّ curl -I https://www.debian.org

مع ufw deny out يعرض الـ ping الفاشل عادةً Operation not permitted. تؤكد عدّادات الحزم الإصابات:

Bash
sudo iptables -L ufw-user-output -n -v sudo iptables -L ufw-before-output -n -v

🛠️ استكشاف الأخطاء

توقف DNS عن العمل. محلِّلك في نطاق خاص. راجع الترتيب بـ sudo ufw status numbered، ثم أضف sudo ufw insert 1 allow out to PRIVATE_DNS_IP port 53. يمكنك أيضًا التحويل إلى محلِّل عام في إعدادات الشبكة.

تعطّل IPv6 بعد التغيير. غالبًا حظرت fe80::/10 أو بوابة ضمن fc00::/7. احذف القاعدة بـ sudo ufw delete deny out to fc00::/7 وأعد إضافة ما يلزم فقط.

لا تستطيع الوصول إلى خدمة في شبكة خاصة (VPN أو API داخلي). أضف قاعدة سماح لهذا العنوان بالتحديد بالأمر ufw insert 1 allow out to PRIVATE_IP. وإذا انقطع وصولك إلى SSH نفسه، فاستخدم أي وصول بالكونسول إلى الخادم ونفّذ sudo ufw disable.


🔒 لم يعد خادمك قادرًا على مسح الشبكات الخاصة عن طريق الخطأ: ينبغي أن تتوقف بلاغات الإساءة من هذا النوع.

ابقَ على اطلاع بأحدث العروض والخصومات والعروض الترويجية الخاصة.

عرض العروض الترويجية

نستخدم ملفات تعريف الارتباط

نستخدم كوكيز تحليلية لتحسين تجربتك. لا نبيع البيانات لأطراف ثالثة. المزيد في سياسة الخصوصية.