كيفية إعداد جدار حماية مع UFW على Ubuntu

مقدمة

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

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

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

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

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

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

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

إعداد جدار الحماية على أوبونتو باستخدام 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 الواردة إلى deny، قم بتشغيل:

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

لضبط السياسة الافتراضية لـ UFW الصادرة إلى allow، قم بتشغيل:

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

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

الخطوة 3 — السماح بالاتصالات عبر 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 status على خيار لعرض أرقام بجوار كل قاعدة، كما هو موضح هنا:

  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 بالاسم

بدلاً من استخدام أرقام القواعد، يمكنك أيضًا الإشارة إلى القاعدة بواسطة تسميتها القابلة للقراءة من الإنسان، والتي تعتمد على نوع القاعدة (عادةً allow أو deny) واسم الخدمة أو رقم المنفذ الذي كان الهدف لهذه القاعدة، أو اسم ملف تعريف التطبيق في حالة استخدامه. على سبيل المثال، إذا كنت تريد حذف قاعدة allow لملف تعريف تطبيق يُسمى 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 باستخدام منصة التطبيقات في ديجيتال أوشن. دع ديجيتال أوشن تركز على توسيع تطبيقك.

الختام

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

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

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