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

المقدمة

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

خيار آخر هو UFW، أو جدار النار البسيط. UFW هو واجهة أمامية لـ iptables تهدف إلى توفير واجهة أكثر ودية للمستخدم من غيرها من أدوات إدارة جدران النار. يتم دعم UFW بشكل جيد في مجتمع Linux، وعادة ما يتم تثبيته افتراضيًا على العديد من التوزيعات.

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

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

لمتابعة هذا البرنامج التعليمي، ستحتاج إلى خادم يعمل بنظام التشغيل Ubuntu أو Debian. يجب أن يكون لديك مستخدم غير root على الخادم يمتلك امتيازات sudo. لإعداد هذا على Ubuntu، اتبع دليلنا على إعداد الخادم الأولي مع Ubuntu 20.04. ولإعداد هذا على Debian، اتبع دليلنا على إعداد الخادم الأولي مع Debian 11. سيضمن كل من هذين الدليلين على إعداد الخادم الأولي أن يكون لديك برنامج UFW مثبتًا على جهازك وأن لديك بيئة آمنة يمكنك استخدامها لممارسة إنشاء قواعد جدار الحماية.

استخدام IPv6 مع UFW

إذا كانت خادم الخاص بك الافتراضي الخاص (VPS) مُكونًا لـ IPv6، فتأكد من تكوين UFW لدعم IPv6 بحيث يكوّن كلاً من قواعد جدار الحماية IPv4 و IPv6. للقيام بذلك، افتح ملف تكوين UFW في محرر النص المفضل لديك. سنستخدم هنا nano:

  1. sudo nano /etc/default/ufw

تأكد من أن IPV6 مُعيّن إلى نعم:

/etc/default/ufw
# /etc/default/ufw # # تعيينه إلى نعم لتطبيق القواعد لدعم IPv6 (لا يعني ذلك فقط IPv6 على الحلقة الافتراضية # مقبولة). ستحتاج إلى 'تعطيل' ثم 'تمكين' جدار الحماية ل # التغييرات لتأثير. IPV6=yes

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

الآن أعد تشغيل جدار الحماية الخاص بك بتعطيله أولاً:

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

ثم قم بتمكينه مرة أخرى:

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

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

إعداد القيم الافتراضية لـ UFW

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

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

بعد ذلك، قم بمعالجة قاعدة الاتصالات الصادرة:

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

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

  1. sudo ufw default deny outgoing

السماح بالاتصالات إلى جدار الحماية

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

  1. sudo ufw allow ssh

إذا نجحت التغييرات الخاصة بك، ستتلقى الناتج التالي:

Output
Rule added Rule added (v6)

يأتي UFW مع بعض الإعدادات الافتراضية مثل الأمر ssh المستخدم في المثال السابق. بالإضافة إلى ذلك، يمكنك السماح بالاتصالات الواردة إلى منفذ 22/tcp، الذي يستخدم بروتوكول التحكم بالنقل (TCP) لتحقيق نفس الغرض:

  1. sudo ufw allow 22/tcp

ومع ذلك، إذا حاولت ذلك بعد تشغيل أمر allow ssh بالفعل، فستتلقى الرسالة التالية نظرًا لأن القاعدة موجودة بالفعل:

Output
Skipping adding existing rule Skipping adding existing rule (v6)

إذا كان خادم SSH الخاص بك يعمل على منفذ 2222، يمكنك السماح بالاتصالات بنفس الصيغة، ولكن استبدله بمنفذ 2222. يرجى ملاحظة أنه إذا استخدمت رقم المنفذ بمفرده، فإنه يؤثر على tcp و udp أيضًا:

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

تأمين خوادم الويب

لتأمين خادم الويب مع الوصول عبر بروتوكول نقل الملفات (FTP)، ستحتاج إلى السماح بالاتصالات لمنفذ 80/tcp.

السماح بالاتصالات لمنفذ 80 مفيد لخوادم الويب مثل Apache و Nginx التي تستمع إلى طلبات الاتصال HTTP. للقيام بذلك، قم بالسماح بالاتصالات لمنفذ 80/tcp:

  1. sudo ufw allow 80/tcp

عادةً ما يوفر UFW الملفات الشخصية مع القواعد المطلوبة لوظيفة خادم الويب. إذا لم يكن كذلك، فقد يتم تخزين ملفات الشخصية لخادم الويب باسم “WWW” ومفتوحة باسم ftp أو tcp، كما في الأمثلة التالية:

  1. sudo ufw allow www

يمكنك أيضًا استخدام ftp أو منفذ 21 للسماح باتصالات FTP:

  1. sudo ufw allow ftp
  1. sudo ufw allow 21/tcp

بالنسبة لاتصالات FTP، ستحتاج أيضًا إلى السماح بالاتصالات لمنفذ 20:

  1. sudo ufw allow 20/tcp

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

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

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

على سبيل المثال ، ستسمح الأمر التالي بالوصول عبر TCP إلى كل منفذ من 1000 إلى 2000 بما في ذلك:

  1. sudo ufw allow 1000:2000/tcp

بالمثل ، سينكر الأمر التالي اتصالات UDP بكل منفذ من 1234 إلى 4321:

  1. sudo ufw deny 1234:4321/udp

تحديد عناوين IP

يمكنك السماح بالاتصالات من عنوان IP معين مثلما في المثال التالي. تأكد من استبدال عنوان IP بمعلوماتك الخاصة:

  1. sudo ufw allow from your_server_ip

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

رفض الاتصالات

إذا كنت ترغب في فتح جميع منافذ الخادم الخاص بك – الأمر الذي لا يُوصى به – يمكنك السماح بجميع الاتصالات ثم منع أي منافذ لا ترغب في منحها إمكانية الوصول إليها. يُظهر المثال التالي كيفية منع الوصول إلى منفذ 80:

  1. sudo ufw deny 80/tcp

حذف القواعد

إذا كنت ترغب في حذف بعض القواعد التي قمت بتنفيذها، استخدم delete وحدد القاعدة التي تريد القضاء عليها:

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

إذا كانت القواعد طويلة ومعقدة، هناك طريقة بديلة ذات خطوتين. أولاً، قم بإنشاء قائمة مُرقمة بالقواعد الحالية:

  1. sudo ufw status numbered

ثم، باستخدام هذه القائمة المُرقمة، قم بمراجعة القواعد المسموح بها حاليًا واحذف القاعدة عن طريق الإشارة إلى رقمها:

  1. sudo ufw delete number
Output
Status: active To Action From -- ------ ---- [ 1] OpenSSH ALLOW IN Anywhere [ 2] 22/tcp ALLOW IN Anywhere [ 3] 2222/tcp ALLOW IN Anywhere [ 4] 80 ALLOW IN Anywhere [ 5] 20/tcp ALLOW IN Anywhere …

على سبيل المثال، إذا كان منفذ 80 هو الرقم 4 في القائمة، فسوف تستخدم الصيغة التالية. قد يُطلب منك أيضًا سؤال ما إذا كنت ترغب في المتابعة مع العملية. يمكنك القرار بنعم y أو لا n:

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

تمكين UFW

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

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

للتأكد من أن التغييرات قد تمت بنجاح، يرجى التحقق من الحالة لمراجعة قائمة القواعد:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 22/tcp ALLOW Anywhere 2222/tcp ALLOW Anywhere 20/tcp ALLOW Anywhere 80/tcp DENY Anywhere …

يمكنك أيضًا استخدام verbose للحصول على إخراج شامل أكثر:

  1. sudo ufw status verbose

لتعطيل UFW، قم بتشغيل الأمر التالي:

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

إعادة ضبط الإعدادات الافتراضية

إذا كنت بحاجة لأسباب ما إلى إعادة تعيين قواعد خادم السحابة الخاص بك إلى إعداداتها الافتراضية، يمكنك فعل ذلك باستخدام الأمر ufw reset. يرجى ملاحظة أنه ستتلقى رسالة تطلب منك كتابة y أو n قبل إعادة الكل إلى الإعدادات الافتراضية، حيث أن ذلك قد يؤدي إلى تعطيل الاتصالات الموجودة عبر SSH:

  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.20220217_190530' Backing up 'before.rules' to '/etc/ufw/before.rules.20220217_190530' Backing up 'after.rules' to '/etc/ufw/after.rules.20220217_190530' Backing up 'user6.rules' to '/etc/ufw/user6.rules.20220217_190530' Backing up 'before6.rules' to '/etc/ufw/before6.rules.20220217_190530' Backing up 'after6.rules' to '/etc/ufw/after6.rules.20220217_190530'

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

الختام

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian-cloud-server