كيفية إعداد جدار ناري باستخدام UFW على Ubuntu

المقدمة

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

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

الشروط المسبقة

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

لمتابعة هذا البرنامج التعليمي، ستحتاج إلى:

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

  • يتم تثبيت UFW بشكل افتراضي على Ubuntu. إذا تم إلغاء تثبيته لأي سبب ما، يمكنك تثبيته مرة أخرى باستخدام sudo apt install ufw.

إعداد جدار حماية Ubuntu باستخدام UFW

  1. تمكين IPv6
  2. ضبط السياسات الافتراضية
  3. السماح باتصالات SSH
  4. تمكين UFW
  5. السماح بأي اتصالات أخرى المطلوبة
  6. رفض الاتصالات
  7. حذف قواعد جدار الحماية
  8. تحقق من حالة وقواعد UFW
  9. كيفية تعطيل أو إعادة تعيين جدار الحماية على أوبونتو

الخطوة 1 — التأكد من تمكين IPv6

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

  1. sudo nano /etc/default/ufw

ثم تأكد من أن قيمة IPV6 مضبوطة على yes. يجب أن تبدو مثل هذا:

/etc/default/ufw excerpt
  1. IPV6=yes

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

عند تمكين UFW في خطوة لاحقة من هذا الدليل، سيتم تكوينه لكتابة قواعد جدار الحماية لكل من IPv4 و IPv6.

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

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

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

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

لتعيين سياسة UFW الافتراضية للواردة إلى رفض، قم بتشغيل:

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

لتعيين سياسة UFW الافتراضية للصادرة إلى السماح، قم بتشغيل:

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

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

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

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

السماح بملف تعريف التطبيق OpenSSH في UFW

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

  1. sudo ufw app list
Output
Available applications: OpenSSH

لتمكين ملف تعريف التطبيق OpenSSH، قم بتشغيل:

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

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

السماح بـ SSH عن طريق اسم الخدمة

طريقة أخرى لتكوين UFW للسماح باتصالات SSH الواردة هي من خلال الإشارة إلى اسم الخدمة: ssh.

  1. sudo ufw allow ssh
Output
Rule added Rule added (v6)

يعرف UFW الأبواب والبروتوكولات التي تستخدمها الخدمة بناءً على ملف /etc/services.

السماح بـ SSH عن طريق رقم البوابة

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

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

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

  1. sudo ufw allow 2222
Output
Rule added Rule added (v6)

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

الخطوة 4 — تمكين UFW

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

  1. sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH

بعد تأكيدك على وجود قاعدة للسماح باتصالات SSH الواردة، يمكنك تمكين جدار الحماية باستخدام:

  1. sudo ufw enable
Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup

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

الآن جدار الحماية نشط. قم بتشغيل الأمر sudo ufw status verbose لرؤية القواعد التي تم تعيينها. يغطي بقية هذا البرنامج التعليمي كيفية استخدام UFW بالتفصيل، مثل السماح أو الرفض لأنواع مختلفة من الاتصالات.

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

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

  • HTTP على المنفذ 80، وهو ما يستخدمه خوادم الويب غير المشفرة، باستخدام sudo ufw allow http أو sudo ufw allow 80
  • HTTPS على البور 443، وهو ما يستخدمه خوادم الويب المشفرة، باستخدام sudo ufw allow https أو sudo ufw allow 443
  • Apache مع كل من HTTP و HTTPS، باستخدام sudo ufw allow ‘Apache Full’
  • Nginx مع كل من HTTP و HTTPS، باستخدام sudo ufw allow ‘Nginx Full’

لا تنسى التحقق من الملفات التعريفية لتطبيقات الخادم المتاحة باستخدام sudo ufw app list.

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

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

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

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

  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
Output
Rule added

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

  1. sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

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

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

  1. sudo ufw allow from 203.0.113.0/24
Output
Rule added

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

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

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

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

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

  1. ip addr
Output Excerpt
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 (المنفذ 80) لها بهذا الأمر:

  1. sudo ufw allow in on eth0 to any port 80
Output
Rule added Rule added (v6)

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

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

  1. sudo ufw allow in on eth1 to any port 3306
Output
Rule added Rule added (v6)

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

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

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

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

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

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

  1. sudo ufw deny http
Output
Rule added Rule added (v6)

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

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

في بعض الحالات، قد ترغب أيضًا في حظر الاتصالات الصادرة من الخادم. لرفض جميع المستخدمين من استخدام منفذ على الخادم، مثل منفذ 25 لحركة المرور SMTP، يمكنك استخدام deny out تتبعه رقم المنفذ:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

سيحظر هذا كل حركة مرور SMTP الصادرة على الخادم.

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

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

حذف قاعدة UFW برقم

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

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

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

  1. sudo ufw delete 2
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted

سيُطلب تأكيد ثم سيتم حذف القاعدة 2، التي تسمح باتصالات HTTP. يرجى ملاحظة أنه إذا كنت قد قمت بتمكين IPv6، فيجب عليك حذف القاعدة المقابلة لـ IPv6 أيضًا.

حذف قاعدة UFW بالاسم

بدلاً من استخدام أرقام القواعد، يمكنك أيضًا الإشارة إلى القاعدة باسمها المقروء للإنسان، الذي يستند إلى نوع القاعدة (عادةً السماح أو الرفض) واسم الخدمة أو رقم المنفذ الذي كان الهدف لهذه القاعدة، أو اسم ملف التعريف التطبيقي في حالة كان يُستخدم. على سبيل المثال، إذا كنت تريد حذف قاعدة السماح لملف تعريف تطبيق يسمى Apache Full تم تمكينه مسبقًا، يمكنك استخدام:

  1. sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)

الأمر delete يعمل بنفس الطريقة على القواعد التي تم إنشاؤها بالإشارة إلى خدمة بواسطة اسمها أو منفذها. على سبيل المثال، إذا قمت سابقًا بتعيين قاعدة للسماح باتصالات HTTP باستخدام sudo ufw allow http، هكذا يمكنك حذف القاعدة:

  1. sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)

لأن أسماء الخدمات قابلة للتبديل مع أرقام المنافذ عند تحديد القواعد، يمكنك أيضًا الإشارة إلى نفس القاعدة بأنها allow 80، بدلاً من allow http:

  1. sudo ufw delete allow 80
Output
Rule deleted Rule deleted (v6)

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

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

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

  1. sudo ufw status verbose

إذا كانت UFW معطلة، كما هو الحال افتراضيًا، سترى شيئًا مثل هذا:

Output
Status: inactive

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

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

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

الخطوة 9 — تعطيل أو إعادة تعيين جدار الحماية

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

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

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

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

  1. sudo ufw reset
Output
Resetting all rules to installed defaults. This may disrupt existing ssh connections. Proceed with operation (y|n)? y Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353' Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353' Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

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

نشر تطبيقات الواجهة الأمامية الخاصة بك من GitHub باستخدام منصة تطبيقات DigitalOcean. دع DigitalOcean يركز على توسيع تطبيقك.

الختام

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

لمعرفة المزيد عن تكوينات UFW الشائعة، تحقق من درس أساسيات UFW: قواعد وأوامر جدار الحماية الشائعة.

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