كيفية إعداد جدار ناري مع UFW على Debian 11

مقدمة

UFW، أو جدار الحماية غير المعقد، هو واجهة إدارة جدار حماية مبسطة تخفي تعقيد تقنيات تصفية الحزم على مستوى منخفض مثل iptables و nftables. إذا كنت تبحث عن بدء تأمين شبكتك، ولست متأكدًا من الأداة التي يجب استخدامها، فقد يكون UFW هو الخيار الصحيح بالنسبة لك.

سوف يوضح لك هذا البرنامج التعليمي كيفية إعداد جدار حماية باستخدام UFW على Debian 11.

المتطلبات المسبقة

لمتابعة هذا البرنامج التعليمي، ستحتاج إلى خادم Debian 11 واحد يحتوي على مستخدم sudo غير root، والذي يمكنك إعداده عن طريق اتباع الخطوة 1 إلى 3 في برنامج التعليمي إعداد الخادم الأولي مع Debian 11.

الخطوة 1 – تثبيت UFW

ديبيان لا تقوم بتثبيت UFW افتراضيًا. إذا اتبعت كل دليل إعداد الخادم الأولي، فسوف تكون قد قمت بتثبيت UFW وتم تمكينه. إذا لم تفعل ذلك، قم بتثبيته الآن باستخدام apt:

  1. sudo apt install ufw

سوف تقوم بإعداد UFW وتمكينه في الخطوات التالية.

الخطوة 2 — استخدام IPv6 مع UFW (اختياري)

تم كتابة هذا الدليل مع الأخذ بعين الاعتبار IPv4 ولكنه سيعمل مع IPv6 أيضًا إذا قمت بتمكينه. إذا كانت خادمك Debian مفعلًا لـ IPv6، فسترغب في التأكد من تكوين UFW لدعم IPv6. سيضمن هذا أن UFW ستدير قواعد جدار الحماية لـ IPv6 بالإضافة إلى IPv4. لتكوين هذا، افتح ملف تكوين UFW /etc/default/ufw باستخدام nano أو محررك المفضل:

  1. sudo nano /etc/default/ufw

ابحث عن IPV6 في الملف وتأكد من أن القيمة هي yes:

/etc/default/ufw excerpt
IPV6=yes

احفظ وأغلق الملف. إذا كنت تستخدم nano، اضغط CTRL+X، ثم Y، ثم ENTER لحفظ التغييرات والخروج من الملف.

الآن عند تمكين UFW، سيتم تكوينه لكتابة قواعد جدار الحماية لكل من IPv4 و IPv6. قبل تمكين UFW، مع ذلك، سترغب في التأكد من أن جدار الحماية مكون للسماح لك بالاتصال عبر SSH. ابدأ بتعيين السياسات الافتراضية.

الخطوة 3 — إعداد السياسات الافتراضية

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

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

  1. sudo ufw default deny incoming
  2. sudo ufw default allow outgoing

سوف تتلقى نتائج مثل التالي:

Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly) Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

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

الخطوة 4 — السماح باتصالات SSH

لا يمكنك تمكين جدار الحماية UFW الخاص بك بعد، لأنه سيحظر جميع الاتصالات الواردة بما في ذلك محاولات الوصول إلى خادمك. هذا يعني أنك ستحتاج إلى إنشاء قواعد تسمح صراحة بالاتصالات الواردة الشرعية – مثل اتصالات SSH أو HTTP، على سبيل المثال – إذا كنت ترغب في أن يستجيب خادمك لهذه الأنواع من الطلبات. إذا كنت تستخدم خادم سحابيًا، فمن المحتمل أن ترغب في السماح باتصالات SSH الواردة حتى تتمكن من الاتصال بخادمك وإدارته.

لتكوين خادمك للسماح باتصالات SSH الواردة، استخدم هذا الأمر:

  1. sudo ufw allow ssh

سينشئ هذا الأمر قواعد جدار الحماية التي ستسمح بجميع الاتصالات على منفذ 22، وهو المنفذ الذي يستمع إليه ديمون SSH افتراضيًا. يعرف UFW أي منفذ مرتبط بـ ssh السماح لأنه مُدرج كخدمة في ملف /etc/services.

ومع ذلك، يمكنك كتابة القاعدة المعادلة بالفعل عن طريق تحديد المنفذ بدلاً من اسم الخدمة. على سبيل المثال، ينتج هذا الأمر نفس النتيجة كما الأمر السابق:

  1. sudo ufw allow 22

إذا قمت بتكوين ديمون SSH الخاص بك لاستخدام منفذ مختلف، سيتعين عليك تحديد المنفذ المناسب. على سبيل المثال، إذا كان خادم SSH الخاص بك يستمع على المنفذ 2222، يمكنك استخدام نفس الأمر ولكن استبدال 22 بـ 2222.

الآن بعد أن تم تكوين جدار الحماية الخاص بك للسماح باتصالات SSH الواردة، يمكنك تمكينه.

الخطوة 5 – تمكين UFW

لتمكين UFW، استخدم هذا الأمر:

  1. sudo ufw enable

ستتلقى تحذيرًا يُفيد بأن الأمر قد يؤدي إلى تعطيل اتصالات SSH الحالية. لقد قمت بالفعل بإعداد قاعدة جدار حماية تسمح باتصالات SSH، لذا يجب أن يكون من الآمن المتابعة. ارد على الرسالة بإدخال y ثم الضغط على ENTER.

الجدار الناري نشط الآن. لرؤية القواعد التي قمت بتعيينها، قم بتشغيل هذا الأمر:

  1. sudo ufw status verbose

بقية هذا البرنامج التعليمي يشرح كيفية استخدام UFW بمزيد من التفصيل، بما في ذلك السماح والرفض لأنواع مختلفة من الاتصالات.

الخطوة 6 — السماح بالاتصالات الأخرى

في هذه المرحلة، يجب عليك السماح بجميع الاتصالات الأخرى التي يحتاجها الخادم الخاص بك للعمل بشكل صحيح. الاتصالات التي يجب عليك السماح بها تعتمد على احتياجاتك الخاصة. لقد عرفت بالفعل كيفية كتابة القواعد التي تسمح بالاتصالات استنادًا إلى اسم الخدمة أو المنفذ؛ لقد فعلت ذلك لـ SSH على المنفذ 22.

يمكنك القيام بذلك أيضًا لـ HTTP على المنفذ 80، وهو ما يستخدمه خوادم الويب غير المشفرة. للسماح بهذا النوع من حركة المرور، يمكنك كتابة:

  1. sudo ufw allow http

يمكنك أيضًا القيام بذلك لـ HTTPS على المنفذ 443، وهو ما يستخدمه خوادم الويب المشفرة. للسماح بهذا النوع من حركة المرور، يمكنك كتابة:

  1. sudo ufw allow https

في كلا السيناريو، سيعمل تحديد المنافذ أيضًا، مع HTTP يكون 80 وHTTPS يكون 443. على سبيل المثال:

  1. sudo ufw allow 80

هناك طرق أخرى للسماح بالاتصالات، ولكن بجانب تحديد المنفذ أو الخدمة المعروفة. سنناقش هذا في الخطوة التالية.

نطاقات المنافذ المحددة

يمكنك تحديد نطاقات المنافذ باستخدام UFW. على سبيل المثال، تستخدم بعض التطبيقات عدة منافذ بدلاً من منفذ واحد.

على سبيل المثال، للسماح باتصالات X11، التي تستخدم منافذ 60006007، استخدم هذه الأوامر:

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

عند تحديد نطاقات المنافذ باستخدام UFW، يجب عليك تحديد البروتوكول (tcp أو udp) الذي ينبغي تطبيق القواعد عليه. لم يتم ذكر هذا من قبل لأن عدم تحديد البروتوكول يسمح تلقائياً بكلا البروتوكولين، وهو مقبول في معظم الحالات.

عناوين IP المحددة

عند العمل مع UFW، يمكنك أيضاً تحديد عناوين IP. على سبيل المثال، إذا كنت ترغب في السماح بالاتصالات من عنوان IP معين، مثل عنوان IP للعمل أو المنزل 203.0.113.4، يجب عليك تحديد from وبعد ذلك عنوان IP:

  1. sudo ufw allow from 203.0.113.4

يمكنك أيضاً تحديد منفذ محدد يمكن لعنوان الـ IP الاتصال به من خلال إضافة to any port تليه رقم المنفذ. على سبيل المثال، إذا كنت ترغب في السماح لـ 203.0.113.4 بالاتصال بالمنفذ 22 (SSH)، استخدم هذا الأمر:

  1. sudo ufw allow from 203.0.113.4 to any port 22

الشبكات الفرعية

إذا كنت ترغب في السماح بشبكة فرعية من عناوين IP، يمكنك القيام بذلك باستخدام تدوين CIDR لتحديد قناع الشبكة. على سبيل المثال، إذا كنت ترغب في السماح بجميع عناوين IP التي تتراوح من 203.0.113.1 إلى 203.0.113.254 يمكنك استخدام هذا الأمر:

  1. sudo ufw allow from 203.0.113.0/24

بالمثل، يمكنك أيضًا تحديد منفذ الوجهة الذي يُسمح لشبكة الفرعية 203.0.113.0/24 بالاتصال به. مرة أخرى، باستخدام المنفذ 22 (SSH) كمثال:

  1. sudo ufw allow from 203.0.113.0/24 to any port 22

الاتصالات بواجهة شبكة محددة

إذا كنت ترغب في إنشاء قاعدة جدار حماية تنطبق فقط على واجهة شبكة محددة، يمكنك القيام بذلك عن طريق تحديد allow in on، تليه اسم واجهة الشبكة.

سيكون من المفيد البحث عن واجهات الشبكة الخاصة بك قبل الاستمرار. للقيام بذلك، استخدم هذا الأمر:

  1. ip addr
Output
. . . 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .

يشير الإخراج المُظلل إلى أسماء واجهات الشبكة. عادةً ما تكون لديها أسماء مثل eth0 أو enp3s2.

إذا كان لديك خادم يحتوي على واجهة شبكة عامة تُسمى eth0، على سبيل المثال، يمكنك السماح بحركة مرور HTTP إليه باستخدام هذا الأمر:

  1. sudo ufw allow in on eth0 to any port 80

بذلك سيتمكن خادمك من استقبال طلبات HTTP من الإنترنت العام.

أو، إذا كنت ترغب في جعل خادم قاعدة بيانات MySQL (المنفذ 3306) يستمع للاتصالات على واجهة الشبكة الخاصة eth1، يمكنك استخدام هذا الأمر:

  1. sudo ufw allow in on eth1 to any port 3306

سيسمح هذا بالاتصال بقواعد البيانات MySQL الخاصة بك من خوادم أخرى على شبكتك الخاصة.

الخطوة 7 — رفض الاتصالات

إذا لم تقم بتغيير السياسة الافتراضية للاتصالات الواردة، فإن UFW مضبوطة لرفض جميع الاتصالات الواردة عمومًا، وهذا يبسط عملية إنشاء سياسة جدار حماية آمنة من خلال طلبك بإنشاء قواعد تسمح صراحة بمنافذ وعناوين IP معينة.

في بعض الأحيان قد ترغب في رفض اتصالات معينة استنادًا إلى عنوان IP المصدر أو الشبكة الفرعية، وربما لأنك تعلم أن خادمك يتعرض لهجوم من هناك. أيضًا، إذا كنت ترغب في تغيير السياسة الافتراضية الواردة لديك إلى السماح (وهو ليس مستحسنًا)، فسوف تحتاج إلى إنشاء قواعد رفض لأي خدمات أو عناوين IP لا ترغب في السماح بالاتصال بها.

لكتابة قواعد رفض، يمكنك استخدام الأوامر الموضحة أعلاه، مع استبدال السماح بـ الرفض.

على سبيل المثال، لرفض اتصالات HTTP، يمكنك استخدام هذا الأمر:

  1. sudo ufw deny http

أو إذا كنت ترغب في رفض جميع الاتصالات من 203.0.113.4 يمكنك استخدام هذا الأمر:

  1. sudo ufw deny from 203.0.113.4

الآن، يمكنك أن تتعلم كيفية تنفيذ قواعد الحذف.

الخطوة 8 — حذف القواعد

معرفة كيفية حذف قواعد جدار الحماية مهمة بنفس القدر من معرفة كيفية إنشائها. هناك طريقتان لتحديد القواعد التي سيتم حذفها: حسب رقم القاعدة أو حسب القاعدة نفسها. هذا مشابه لكيفية تحديد القواعد عند إنشائها.

حسب رقم القاعدة

إذا كنت تستخدم رقم القاعدة لحذف قواعد جدار الحماية، فإن أول ما سترغب في القيام به هو الحصول على قائمة بقواعد جدار الحماية الخاصة بك. تحتوي أمر UFW status على الخيار numbered، الذي يعرض أرقامًا بجانب كل قاعدة:

  1. sudo ufw status numbered
Output
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

إذا قررت أنك تريد حذف القاعدة 2، التي تسمح باتصالات HTTP على المنفذ 80، يمكنك تحديد ذلك في أمر UFW delete التالي:

  1. sudo ufw delete 2

سيظهر لك مربع حوار تأكيد، يمكنك الرد عليه بـ y/n. كتابة y ستحذف بعد ذلك القاعدة 2. يرجى ملاحظة أنه إذا كان IPv6 مفعّلًا، فسترغب في حذف القاعدة المقابلة لـ IPv6 أيضًا.

بواسطة القاعدة الفعلية

البديل عن أرقام القواعد هو تحديد القاعدة الفعلية التي تريد حذفها. على سبيل المثال، إذا كنت تريد إزالة قاعدة allow http، يمكنك كتابتها بهذه الطريقة:

  1. sudo ufw delete allow http

يمكنك أيضًا تحديد القاعدة باستخدام allow 80 بدلاً من اسم الخدمة:

  1. sudo ufw delete allow 80

سيقوم هذا الأسلوب بحذف القواعد IPv4 و IPv6، إذا كانت موجودة.

الخطوة 9 — التحقق من حالة وقواعد UFW

يمكنك في أي وقت التحقق من حالة UFW باستخدام هذا الأمر:

  1. sudo ufw status verbose

إذا كان UFW معطلًا، وهو الوضع الافتراضي، سيكون الناتج كالتالي:

Output
Status: inactive

إذا كان UFW نشطًا، كما ينبغي إذا كنت قد اتبعت الخطوة 3، ستقول النتيجة أنه نشط وستقوم بسرد أي قواعد قمت بتعيينها. على سبيل المثال، إذا كانت جدار الحماية مضبوطًا للسماح باتصالات SSH (المنفذ 22) من أي مكان، قد تتضمن النتيجة شيئًا مثل هذا:

Output
Status: active To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

استخدم الأمر status إذا كنت ترغب في التحقق من كيفية تكوين جدار الحماية باستخدام UFW.

الخطوة 10 — تعطيل أو إعادة ضبط UFW (اختياري)

إذا قررت عدم استخدام UFW، يمكنك تعطيله باستخدام هذا الأمر:

  1. sudo ufw disable

أيُّ قواعد قمتَ بإنشائها باستخدام UFW لن تكون نشطة بعد الآن. يمكنك دائمًا تشغيل sudo ufw enable إذا كنت بحاجة لتنشيطه لاحقًا.

إذا كانت لديك بالفعل قواعد UFW مكونة، ولكنك تقرر أن تبدأ من جديد، يمكنك استخدام الأمر reset:

  1. sudo ufw reset

سيؤدي هذا إلى تعطيل UFW وحذف أي قواعد قمتَ بتعريفها مسبقًا. تذكر أن السياسات الافتراضية لن تتغير إلى إعداداتها الأصلية إذا قمتَ بتعديلها في أي وقت مضى. يجب أن يمنحك هذا بداية جديدة مع UFW.

الاستنتاج

تم تكوين جدار الحماية الخاص بك الآن للسماح (على الأقل) باتصالات SSH. تأكد من السماح بأي اتصالات واردة أخرى يحتاجها خادمك، مع الحد من الاتصالات غير الضرورية. سيضمن هذا أن يكون خادمك وظيفيًا وآمنًا.

لمعرفة المزيد حول تكوينات UFW الشائعة، تحقق من هذا البرنامج التعليمي حول UFW Essentials: Common Firewall Rules and Commands.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-debian