مقدمة
جدار الحماية البسيط (UFW)، أو جدار الحماية البسيط، هو واجهة مستخدم لبرنامج iptables مصممة لتبسيط عملية إعداد جدار الحماية. على الرغم من أن iptables أداة قوية ومرنة، إلا أن تعلم كيفية استخدامه لإعداد جدار الحماية بشكل صحيح قد يكون صعبًا على المبتدئين. إذا كنت ترغب في بدء تأمين شبكتك ولا تعرف الأداة المناسبة، فقد يكون UFW خيارًا جيدًا لك.
المتطلبات الأساسية
إذا كنت تستخدم إصدار أوبونتو 16.04 أو إصدارًا أقدم، فننصحك بالترقية إلى إصدار أحدث، لأن أوبونتو لم يعد يدعم هذه الإصدارات. ستساعدك هذه التعليمات على ترقية إصدار أوبونتو لديك.
الخطوة 1 - تأكد من تمكين IPv6
في الإصدارات الحديثة من أوبونتو، يكون IPv6 مُفعّلاً افتراضياً. عملياً، هذا يعني أن معظم قواعد جدار الحماية المُضافة إلى الخادم ستتضمن كلاً من IPv4 وIPv6، مع تحديد الأخير كـ v6 في مُخرجات أمر حالة UFW. للتأكد من تفعيل IPv6، يُمكنك التحقق من ملف تكوين UFW على المسار /etc/default/ufw. افتح هذا الملف باستخدام nano أو مُحرّر سطر الأوامر المُفضّل لديك:
sudo nano /etc/default/ufwتأكد بعد ذلك من ضبط قيمة IPV6 على "نعم". يجب أن تبدو كالتالي:
IPV6=yesاحفظ الملف وأغلقه. إذا كنت تستخدم برنامج nano، يمكنك القيام بذلك بالضغط على CTRL+X، ثم Y، ثم ENTER للتأكيد.
عندما يتم تمكين UFW في الخطوة التالية من هذا الدليل، سيتم تكوينه لكتابة قواعد جدار الحماية IPv4 وIPv6.
الخطوة 2 - تعيين السياسات الافتراضية
إذا كنت قد بدأت للتو باستخدام جدار الحماية الموحد، فإن أول خطوة جيدة هي مراجعة سياسات جدار الحماية الافتراضية. تتحكم هذه القواعد في كيفية معالجة حركة البيانات التي لا تتوافق صراحةً مع أي قواعد أخرى.
افتراضيًا، تم إعداد UFW لرفض جميع الاتصالات الواردة والسماح بجميع الاتصالات الصادرة. هذا يعني أن أي شخص يحاول الوصول إلى خادمك لن يتمكن من الاتصال، بينما سيتمكن أي تطبيق داخل الخادم من الوصول إلى العالم الخارجي. أُدرجت قواعد إضافية للسماح بخدمات ومنافذ محددة كاستثناءات لهذه السياسة العامة.
لتتأكد من قدرتك على متابعة بقية هذا البرنامج التعليمي، ستقوم الآن بإعداد سياسات UFW الافتراضية الخاصة بك لحركة المرور الواردة والصادرة.
لتعيين سياسة دخول UFW الافتراضية على الرفض، قم بتشغيل الأمر التالي:
sudo ufw default deny incomingOutput
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)لتعيين سياسة UFW الصادرة الافتراضية إلى مسموح بها، قم بتشغيل الأمر التالي:
تُعيّن هذه الأوامر الإعدادات الافتراضية لرفض الاتصالات الواردة والسماح بالاتصالات الصادرة. قد تكفي إعدادات جدار الحماية الافتراضية هذه وحدها لأجهزة الكمبيوتر الشخصية، ولكن غالبًا ما تحتاج الخوادم إلى الاستجابة للطلبات الواردة من مستخدمين خارجيين. سنتناول هذا لاحقًا.
الخطوة 3 – السماح باتصالات SSH
إذا فعّلت جدار حماية UFW الآن، فسيرفض جميع الاتصالات الواردة. هذا يعني أنه إذا أردت أن يستجيب خادمك لهذه الأنواع من الطلبات، فستحتاج إلى إنشاء قواعد تسمح صراحةً بالاتصالات الواردة الشرعية - مثل اتصالات SSH أو HTTP. إذا كنت تستخدم خادمًا سحابيًا، فغالبًا ما ترغب في السماح باتصالات SSH الواردة لتتمكن من الاتصال بخادمك وإدارته.
السماح بملف تعريف تطبيق OpenSSH UFW
بمجرد التثبيت، تُسجّل معظم التطبيقات التي تعتمد على اتصالات الشبكة ملف تعريف تطبيق لدى UFW، مما يُمكّن المستخدمين من السماح بالوصول الخارجي إلى الخدمة أو منعه بسرعة. يمكنك التحقق من الملفات التعريفية المُسجّلة حاليًا لدى UFW باستخدام الأمر التالي:
sudo ufw app listOutput
Available applications:
OpenSSHلتفعيل ملف تعريف تطبيق OpenSSH، قم بتشغيل الأمر التالي:
السماح باستخدام SSH استنادًا إلى اسم الخدمة
هناك طريقة أخرى لتكوين UFW للسماح باتصالات SSH الواردة وهي الإشارة إلى اسم الخدمة الخاص به:
تمكين SSH بناءً على رقم المنفذ
كبديل، يمكنك كتابة القاعدة المكافئة بتحديد المنفذ بدلاً من اسم التطبيق أو ملف تعريف الخدمة. على سبيل المثال، يعمل هذا الأمر مثل الأمثلة السابقة:
sudo ufw allow 22Output
Rule added
Rule added (v6)إذا قمتَ بتكوين خدمة SSH لاستخدام منفذ مختلف، فستحتاج إلى تحديد المنفذ المناسب. على سبيل المثال، إذا كان خادم SSH يستمع على المنفذ 2222، يمكنك استخدام هذا الأمر للسماح بالاتصالات على هذا المنفذ:
sudo ufw allow 2222Output
Rule added
Rule added (v6)الآن بعد أن تم تكوين جدار الحماية الخاص بك للسماح باتصالات SSH الواردة، يمكنك تمكينه.
الخطوة 4 - تمكين UFW
يجب الآن تهيئة جدار الحماية للسماح باتصالات SSH. للتحقق من القواعد التي تمت إضافتها حتى الآن، حتى مع استمرار تعطيل جدار الحماية، يمكنك استخدام الأمر التالي:
sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSHبعد التأكد من وجود قاعدة تسمح باتصالات SSH الواردة، يمكنك تمكين جدار الحماية باستخدام الأمر التالي:
sudo ufw enable
OutputCommand 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 للاطلاع على القواعد المُعدّة. يتناول باقي هذا الدليل كيفية استخدام جدار الحماية بمزيد من التفصيل، مثل السماح بأنواع مختلفة من الاتصالات أو رفضها.
الخطوة 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، استخدم الأوامر التالية:
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
عند تحديد نطاقات المنافذ باستخدام UFW، يجب تحديد البروتوكول (TCP أو UDP) الذي تنطبق عليه القواعد. لم نذكر هذا من قبل، لأن عدم تحديد بروتوكول يسمح تلقائيًا باستخدام كلا البروتوكولين، وهو أمر مقبول في معظم الحالات.
عناوين IP محددة
عند استخدام UFW، يمكنك أيضًا تحديد عناوين IP في قواعدك. على سبيل المثال، إذا كنت ترغب في السماح بالاتصالات من عنوان IP محدد، مثل عنوان IP الخاص بالعمل أو المنزل 203.0.113.4، فاستخدم المعلمة "from" ثم أدخل عنوان IP المطلوب:
sudo ufw allow from 203.0.113.4Output
Rule addedيمكنك أيضًا تحديد المنفذ الذي يُسمح لعنوان IP بالاتصال به بإضافة رقم المنفذ إلى كل منفذ. على سبيل المثال، إذا كنت تريد السماح لعنوان IP 203.0.113.4 بالاتصال بالمنفذ 22 (SSH)، فاستخدم هذا الأمر:
sudo ufw allow from 203.0.113.4 to any port 22
OutputRule added
الشبكات الفرعية
إذا كنت ترغب في السماح بالوصول إلى شبكة فرعية من عناوين IP، يمكنك ذلك باستخدام ترميز CIDR لتحديد قناع الشبكة. على سبيل المثال، إذا كنت ترغب في السماح بالوصول إلى جميع عناوين IP من 203.0.113.1 إلى 203.0.113.254، يمكنك استخدام هذا الأمر:
sudo ufw allow from 203.0.113.0/24
Output
Rule addedوبالمثل، يمكنك تحديد منفذ الوجهة الذي يُسمح للشبكة الفرعية 203.0.113.0/24 بالاتصال به. سنستخدم المنفذ 22 (SSH) كمثال.
sudo ufw allow from 203.0.113.0/24 to any port 22Output
Rule addedالاتصال بواجهة شبكة محددة
إذا كنت تريد إنشاء قاعدة جدار حماية تنطبق فقط على واجهة شبكة محددة، فيمكنك القيام بذلك عن طريق تحديد "السماح بالتسجيل" متبوعًا باسم واجهة الشبكة.
قبل المتابعة، يمكنك البحث عن واجهات شبكتك. للقيام بذلك، استخدم هذا الأمر:
ip addrOutput 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) إليها باستخدام هذا الأمر:
sudo ufw allow in on eth0 to any port 80Output
Rule added
Rule added (v6)سيؤدي القيام بذلك إلى السماح لخادمك بتلقي طلبات HTTP من الإنترنت العام.
أو إذا كنت تريد أن يستمع خادم قاعدة بيانات MySQL (المنفذ 3306) إلى الاتصالات على واجهة الشبكة الخاصة eth1، على سبيل المثال، فيمكنك استخدام هذا الأمر:
sudo ufw allow in on eth1 to any port 3306Output
Rule added
Rule added (v6)يتيح هذا لخوادم أخرى على شبكتك الخاصة الاتصال بقاعدة بيانات MySQL الخاصة بك.
الخطوة 6 - التخلص من الاتصالات
إذا لم تُغيّر السياسة الافتراضية للاتصالات الواردة، فسيتم تكوين جدار الحماية الموحد لرفض جميع الاتصالات الواردة. يُبسّط هذا عملية إنشاء سياسة جدار حماية آمن من خلال مطالبتك بإنشاء قواعد تسمح صراحةً لمنافذ وعناوين IP محددة بالمرور.
مع ذلك، قد ترغب أحيانًا في رفض اتصالات محددة بناءً على عنوان IP المصدر أو الشبكة الفرعية، ربما لأنك تعلم أن خادمك يتعرض لهجوم من هناك. أيضًا، إذا أردت تغيير سياسة الدخول الافتراضية إلى السماح (وهو أمر غير مستحسن)، فستحتاج إلى إنشاء قواعد رفض لكل خدمة أو عنوان IP لا ترغب في السماح بالاتصالات منه.
لكتابة قواعد الرفض، يمكنك استخدام الأوامر الموضحة سابقًا، واستبدال allow بـ deny.
على سبيل المثال، لرفض اتصالات HTTP، يمكنك استخدام هذا الأمر:
sudo ufw deny httpOutput
Rule added (v6)أو إذا كنت تريد رفض جميع الاتصالات من 203.0.113.4، يمكنك استخدام هذا الأمر:
sudo ufw deny from 203.0.113.4Output
Rule addedفي بعض الحالات، قد ترغب أيضًا في حظر الاتصالات الصادرة من الخادم. لمنع جميع المستخدمين من استخدام منفذ على الخادم، مثل المنفذ 25 لحركة مرور SMTP، يمكنك استخدام "منع الخروج" متبوعًا برقم المنفذ:
sudo ufw deny out 25Output
Rule added
Rule added (v6)سيؤدي هذا إلى حظر جميع حركة مرور SMTP الصادرة على الخادم.
الخطوة 7 - حذف القواعد
معرفة كيفية حذف قواعد جدار الحماية لا تقل أهمية عن معرفة كيفية إنشائها. هناك طريقتان لتحديد القواعد المراد حذفها: عبر رقم القاعدة أو عبر اسمها السهل القراءة (كما هو الحال عند تحديد القواعد عند إنشائها).
حذف قاعدة UFW حسب الرقم
لحذف قاعدة جدار الحماية بناءً على رقمها، عليك أولاً الحصول على قائمة مرقمة بجميع قواعد جدار الحماية لديك. يتيح لك أمر حالة جدار الحماية عرض الأرقام بجوار كل قاعدة، كما هو موضح هنا:
sudo ufw status numberedNumbered Output:
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhereإذا قررت إزالة القاعدة رقم 2، وهي القاعدة التي تسمح باتصالات المنفذ 80 (HTTP)، فيمكنك تحديدها في أمر إزالة UFW على النحو التالي:
sudo ufw delete 2Output
Deleting:
allow 80
Proceed with operation (y|n)? y
Rule deletedسيطلب منك هذا التأكيد، ثم يحذف القاعدة ٢ التي تسمح باتصال HTTP. يرجى ملاحظة أنه في حال تفعيل IPv6، ستحتاج إلى حذف قاعدة IPv6 المقابلة أيضًا.
حذف قاعدة UFW حسب الاسم
بدلاً من استخدام أرقام القواعد، يمكنك أيضًا الإشارة إلى قاعدة باسم يسهل على البشر قراءته، والذي يُحدده نوع القاعدة (عادةً ما يكون سماحًا أو رفضًا) واسم الخدمة أو رقم المنفذ الذي تستهدفه القاعدة، أو اسم ملف تعريف التطبيق إن وُجد. على سبيل المثال، إذا كنت ترغب في إزالة قاعدة سماح لملف تعريف تطبيق باسم Apache Full كان مُفعّلًا سابقًا، يمكنك استخدام الأمر التالي:
sudo ufw delete allow "Apache Full"Output
Rule deleted
Rule deleted (v6)
يعمل أمر الحذف بالطريقة نفسها مع القواعد التي أُنشئت بالإشارة إلى خدمة بالاسم أو المنفذ. على سبيل المثال، إذا أنشأتَ سابقًا قاعدةً للسماح باتصالات HTTP، sudo ufw السماح بـ http يمكنك حذف القاعدة على النحو التالي:
sudo ufw delete allow httpOutput
Rule deleted
Rule deleted (v6)نظرًا لأن أسماء الخدمات قابلة للتبادل مع أرقام المنافذ عند تحديد القواعد، فيمكنك أيضًا الرجوع إلى نفس القاعدة السماح بـ 80 بدلاً من السماح بـ http:
sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)نظرًا لأن أسماء الخدمات قابلة للتبادل مع أرقام المنافذ عند تحديد القواعد، فيمكنك أيضًا الرجوع إلى نفس القاعدة السماح بـ 80 بدلاً من السماح بـ http:
sudo ufw delete allow 80Output
Rule deleted
Rule deleted (v6)عند حذف قواعد UFW حسب الاسم، سيتم حذف كل من قواعد IPv4 وIPv6، إن وجدت.
الخطوة 8 - التحقق من حالة UFW والقواعد
في أي وقت، يمكنك التحقق من حالة UFW باستخدام هذا الأمر:
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اگر میخواهید بررسی کنید که UFW چگونه فایروال را پیکربندی کرده است، از دستور status استفاده کنید.
مرحله ۹ – غیرفعال کردن یا تنظیم مجدد فایروال
اگر تصمیم دارید که از فایروال UFW استفاده نکنید، میتوانید آن را با این دستور غیرفعال کنید:
sudo ufw disableOutput
Firewall stopped and disabled on system startupأي قواعد أنشأتها باستخدام UFW لن تكون نشطة بعد الآن. إذا كنت بحاجة إلى تفعيلها لاحقًا، يمكنك دائمًا sudo ufw تمكين يجري.
إذا كنت قد قمت بالفعل بتكوين قواعد UFW ولكنك قررت البدء من جديد، فيمكنك استخدام أمر إعادة الضبط:
sudo ufw resetOutput
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. تذكّر أنه في حال تغيير السياسات الافتراضية في أي وقت، فلن تعود إلى إعداداتها الأصلية.
خاتمة
تم الآن تهيئة جدار الحماية للسماح باتصالات SSH (على الأقل). تأكد من السماح بأي اتصالات واردة أخرى يحتاجها خادمك، مع تقييد أي اتصالات غير ضرورية للحفاظ على أداء خادمك وأمانه.
لمزيد من المعلومات حول تكوينات UFW الشائعة، راجع البرنامج التعليمي
أساسيات جدار الحماية UFW: قواعد وأوامر جدار الحماية الشائعة لأمان Linux
تحقق من ذلك.









