إعداد جدار حماية UFW على خادم VPS بأمان
تعلّم إعداد UFW على VPS بسياسة رفض افتراضية، والسماح بالمنافذ الضرورية فقط، وتفعيله بأمان من دون فقدان اتصال SSH أو حظر دخولك إلى الخادم.
ما هو UFW ولماذا تحتاج إليه
يرمز UFW إلى Uncomplicated Firewall، والاسم يعبّر عن وظيفته بدقة. فهو واجهة مبسطة لجدار الحماية المضمّن في نواة Linux، ولذلك تكتب أوامر قصيرة مثل ufw allow 22/tcp بدلاً من كتابة القواعد الأولية مباشرة. في VPS جديد، يمكن الوصول إلى كل خدمة تستمع على منفذ من الإنترنت افتراضياً. يغيّر جدار الحماية هذا الوضع: ترفض كل الاتصالات، ثم تسمح بالمنافذ القليلة التي تستخدمها فعلياً. يزيل هذا التغيير وحده معظم سطح التعرض خلال نحو أربعة أوامر. UFW هو الأداة المستخدمة في Ubuntu وDebian، لذلك إذا كان VPS يعمل بنظام Rocky أو AlmaLinux فاستخدم firewalld بدلاً منه، إذ ينظّم القواعد ضمن مناطق.
قبل أن تغيّر إعداداته، اعرف الخدمات التي تستمع على المنافذ، لأن جدار الحماية يحدد مصير هذه الخدمات. وتُعد معرفة المنافذ التي تستمع باستخدام ss -tlnp الخطوة الأولى الصحيحة.
القاعدة الوحيدة التي تمنعك من فقدان الوصول إلى الخادم
هذا هو الخطأ الذي يجعل البعض يتجنبون الجدران النارية. تفعّل UFW مع سياسة الرفض الافتراضي، لكنك لا تسمح باتصالات SSH مسبقاً. لذلك، ما إن يبدأ الجدار الناري حتى ينقطع اتصالك الحالي ولا تتمكن من تسجيل الدخول مجدداً. تجنب ذلك بالسماح دائماً باتصالات SSH قبل تفعيل UFW. هذه هي الخطوة الأساسية، والخطوات أدناه تنفذها بالترتيب الآمن.
إذا حدث ذلك رغم كل شيء، فلست عالقاً خارج الخادم. وحدة التحكم على الويب التي يوفرها مزود الخدمة، عبر VNC أو المنفذ التسلسلي، لا تستخدم SSH. لذلك يمكنك تسجيل الدخول إليها وتشغيل ufw disable أو إضافة القاعدة المفقودة. كما أن فقدان الوصول بسبب الجدار الناري له عرض واضح: تظل حزمة SSH التي أسقطها الجدار الناري معلقة حتى انتهاء مهلة الاتصال، بينما يرفض SSH daemon المتوقف الاتصال فوراً. راجع الفرق بين رفض الاتصال وانتهاء مهلة الاتصال.
الخطوة 1: عيّن السياسات الافتراضية
ابدأ بإعداد UFW لرفض جميع الاتصالات الواردة والسماح بجميع الاتصالات الصادرة:
sudo ufw default deny incoming
sudo ufw default allow outgoingيمثّل deny incoming الجزء المهم. فهذا يعني أن أي منفذ لا توجد له قاعدة سماح صريحة يكون مغلقاً أمام الاتصالات الخارجية، حتى إذا كانت هناك خدمة تستمع عليه. ويسمح allow outgoing لخادمك بالوصول إلى الإنترنت بشكل طبيعي لإجراء التحديثات وما شابهها. يغيّر هذان الأمران السياسة فقط؛ ولا تُطبَّق أي قاعدة حتى تفعّل UFW في الخطوة 3.
الخطوة 2: اسمح بالمنافذ التي تحتاج إليها فعلياً
قبل التفعيل، افتح SSH حتى تحافظ على اتصالك:
sudo ufw allow 22/tcpيمكن لـUFW أيضاً تطبيق حد لمعدل اتصالات SSH: يسمح sudo ufw limit 22/tcp بالمنفذ، لكنه يحظر أي عنوان ينشئ ستة اتصالات أو أكثر خلال ثلاثين ثانية. يحد ذلك من فعالية نصوص هجمات القوة الغاشمة من دون برامج إضافية.
إذا كنت تشغّل خادم ويب، فاسمح أيضاً بـHTTP وHTTPS:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpاسمح فقط بالخدمات التي توفّرها للعامة. يجب ألا تضيف قاعدة سماح لقاعدة بيانات مثل Postgres على المنفذ 5432 في معظم الحالات. اربطها بـ127.0.0.1 بدلاً من ذلك، حتى لا يمكن الوصول إليها إلا من الجهاز نفسه. كل منفذ تفتحه يصبح منفذاً عليك حمايته، لذلك أبقِ القائمة قصيرة.
يمكنك أيضاً إنشاء التسلسل الكامل لأوامر ufw لخادمك هنا، ثم تشغيلها بالترتيب:
الخطوة 3: فعّل الجدار الناري وتحقق من تشغيله
sudo ufw enableيحذّرك الأمر من أنه قد يعطّل اتصالات SSH الحالية. وبما أنك سمحت بـ22/tcp في الخطوة 2، فستستمر جلستك. تحقّق من النتيجة:
sudo ufw status verboseStatus: active
Default: deny (incoming), allow (outgoing)
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp ALLOW IN Anywhereاقرأ أمرين هنا. يعني Status: active أن الجدار الناري قيد التشغيل. وتظهر كل قاعدة مرتين، مرة بصيغتها العادية ومرة مع (v6)، وهذا يوضح أن UFW يغطي IPv6 وIPv4 معاً. إذا كانت أسطر (v6) مفقودة، فلن يكون جانب IPv6 مُداراً، وهذه مشكلة مستقلة يغطيها مقالة جدار IPv6 الناري.
إدارة القواعد لاحقاً
لعرض القواعد مع أرقامها حتى تتمكن من إزالة إحدى القواعد:
sudo ufw status numbered
sudo ufw delete 3للسماح بمنفذ من عنوان واحد فقط، وهي طريقة مناسبة لإتاحة خدمة إدارية لعنوان IP الخاص بك فقط:
sudo ufw allow from 10.0.0.24 to any port 5432 proto tcpينهار هذا الأسلوب بمجرد تغيّر عنوانك أو حاجة عدة أجهزة إلى الوصول، والحل المعتاد هو التوقف عن فتح المنفذ للعامة تماماً والوصول إلى الخدمة عبر شبكة خاصة بدلاً من ذلك، وهذا هو الغرض من الإعلان عن الشبكة الفرعية الخاصة بالخادم ضمن شبكة tailnet الخاصة بك.
جدار الحماية طبقة واحدة. فهو يتحكم في ما يمكنه الوصول إلى منفذ، لكنه لا يبطئ من يكرر الاتصال بمنفذ تركته مفتوحاً، مثل SSH. لهذه الحالة، أضف Fail2ban أمام SSH لحظر من يكرر المحاولات. يعني الدفاع متعدد الطبقات أن تغطي كل طبقة ما لا تستطيع الطبقات الأخرى تغطيته.
لا يصبح جدار الحماية مفيداً إلا بعد أن تعرف ما هي المنافذ وكيف تستمع الخدمات، ويُعدّ تكوينه خطوة ضمن الدقائق 10 الأولى على VPS جديد.
FAQ
هل يؤدي تفعيل UFW إلى قطع جلسة SSH؟
لا، إذا سمحت باتصالات SSH أولاً. شغّل sudo ufw allow 22/tcp قبل sudo ufw enable، وستبقى الاتصالات قائمة لأن جدار الحماية سيسمح الآن بالمنفذ 22. يكمن الخطر في تفعيل جدار حماية يرفض الاتصالات افتراضياً من دون قاعدة تسمح بـSSH، ما يؤدي إلى قطع اتصالك. إذا حدث ذلك، فسجّل الدخول عبر وحدة تحكم VNC أو الوحدة التسلسلية لدى مزود الخدمة، ثم شغّل ufw disable.
ما المنافذ التي ينبغي أن أفتحها على VPS؟
افتح فقط المنافذ التي تقدم خدماتها للعامة. افتح SSH (22/tcp) لتتمكن من إدارة الخادم، وافتح HTTP وHTTPS (80/tcp، 443/tcp) إذا كنت تشغّل موقعاً إلكترونياً. اترك جميع المنافذ الأخرى مرفوضة. يجب أن ترتبط الخدمات الداخلية، مثل قواعد البيانات، بـ127.0.0.1، وألا تضيف لها أي قاعدة في جدار الحماية، حتى لا يمكن الوصول إليها من الشبكة.
هل يتعامل UFW مع IPv6؟
نعم، في إصدارات Ubuntu الحديثة: تكون IPV6=yes مضبوطة في /etc/default/ufw، لذلك تنطبق كل قاعدة على مكدسي IPv4 وIPv6، ويعرض ufw status قواعد IPv6 مع اللاحقة (v6). تتناول مشكلة جدار حماية IPv6 الحالات التي قد يحدث فيها خلل رغم ذلك.
كيف أزيل قاعدة UFW؟
شغّل sudo ufw status numbered لسرد القواعد مع أرقام الفهارس، ثم شغّل sudo ufw delete N، حيث يمثّل N رقم القاعدة التي تريد حذفها. يمكنك أيضاً الحذف حسب مواصفات القاعدة، مثل sudo ufw delete allow 80/tcp.
كيف أسمح بالوصول إلى منفذ من عنوان IP واحد فقط؟
استخدم قاعدة from بدلاً من قاعدة allow عادية. للسماح لعنوان مكتبك فقط بالوصول إلى PostgreSQL، شغّل sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp. عند استخدام سياسة رفض افتراضية، يكون المنفذ مغلقاً أمام الجميع إلى أن تفتحه قاعدة، ولذلك تكون قاعدة from هذه هي طريقة الدخول الوحيدة: يبقى الإنترنت بأكمله محجوباً، ولا يُسمح إلا للعنوان الذي تحدده بالمرور. لا تضف أيضاً قاعدة allow 5432/tcp عادية، لأنها ستفتح المنفذ أمام الجميع. هذه هي الطريقة الأكثر أماناً لإتاحة قاعدة بيانات أو لوحة إدارة. تحقّق من ذلك باستخدام sudo ufw status verbose، الذي يعرض عنوان المصدر بجانب المنفذ.