أساسيات UFW: إعداد جدار حماية VPS
UFW هو أبسط طريقة لتشغيل جدار حماية على خادم VPS. اضبط سياسة رفض افتراضية، واسمح فقط بالمنافذ التي تحتاجها، وفعّله دون أن تغلق الباب على نفسك خارج SSH.
ما هو UFW ولماذا تحتاج إليه
UFW اختصار لـ Uncomplicated Firewall، والاسم صادق فعلًا. إنه واجهة سهلة الاستخدام فوق جدار الحماية المدمج أصلًا في نواة Linux، فبدلًا من كتابة قواعد مباشرة منخفضة المستوى تكتب أوامر قصيرة مثل ufw allow 22/tcp. على خادم VPS جديد، كل خدمة تستمع تكون قابلة للوصول من الإنترنت افتراضيًا. جدار الحماية يقلب هذه المعادلة: ترفض كل شيء، ثم تسمح فقط بالمنافذ القليلة التي تستخدمها فعلًا. هذا التغيير الوحيد يزيل معظم انكشافك في نحو أربعة أوامر.
قبل أن تلمسه، اعرف ما الذي يستمع فعلًا، لأن هذه هي الخدمات التي يقرر جدار الحماية مصيرها. قراءة ما الذي يستمع بالأمر ss -tlnp هي الخطوة الأولى الصحيحة.
القاعدة الوحيدة التي تمنعك من إغلاق الباب على نفسك خارج الخادم
إليك الخطأ الذي يخيف الناس من جدران الحماية. تُفعّل UFW بسياسة رفض افتراضية، لكنك لم تسمح بـ SSH قط، فما إن يعمل جدار الحماية حتى يُقطع اتصالك أنت ولا تستطيع العودة. تجنّب ذلك بأن تسمح دومًا بـ SSH قبل تفعيل UFW. هذه هي الحيلة كلها، والخطوات أدناه تنفذها بالترتيب الآمن.
إن حدث ذلك لك رغم كل شيء، فأنت لست عالقًا: وحدة التحكم عبر الويب لدى مزوّد الخدمة، عبر VNC أو الطرفية التسلسلية، لا تمر عبر SSH، فتستطيع تسجيل الدخول من هناك وتنفيذ ufw disable أو إضافة القاعدة الناقصة.
الخطوة 1: اضبط السياسات الافتراضية
ابدأ بإخبار UFW أن يرفض كل ما يَرِد وأن يسمح بكل ما يخرج:
sudo ufw default deny incoming
sudo ufw default allow outgoingdeny 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جدار الحماية طبقة واحدة فقط. فهو يتحكم فيما يستطيع الوصول إلى منفذ، لكنه لا يبطئ من يقرع بلا توقف على منفذ تركته مفتوحًا، مثل 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، فتنطبق كل قاعدة على كلا البروتوكولين معًا، ويعرض 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، الذي يعرض عنوان المصدر بجانب المنفذ.