مقدمة
UFW، أو جدار الحماية الغير معقد، هو واجهة لـ iptables
مصممة لتبسيط عملية تكوين جدار الحماية. بينما iptables
هي أداة قوية ومرنة، يمكن أن يكون من الصعب على المبتدئين تعلم كيفية استخدامها لتكوين جدار حماية بشكل صحيح. إذا كنت تبحث عن بدء تأمين شبكتك، ولست متأكدًا من أي أداة تستخدم، فقد يكون UFW الخيار الصحيح بالنسبة لك.
سوف يوضح لك هذا البرنامج التعليمي كيفية إعداد جدار حماية باستخدام UFW على Ubuntu v18.04 وما بعدها.
المتطلبات المسبقة
إذا كنت تستخدم إصدار Ubuntu 16.04 أو أقل، فإننا نوصيك بالترقية إلى إصدار أحدث نظرًا لعدم توفر دعم Ubuntu لهذه الإصدارات بعد الآن. ستساعدك هذه مجموعة من الأدلة في ترقية إصدار Ubuntu الخاص بك.
لمتابعة هذا البرنامج التعليمي، ستحتاج إلى:
-
خادم يعمل بنظام Ubuntu، بالإضافة إلى مستخدم غير جذري يمتلك امتيازات
sudo
. للإرشادات حول كيفية إعداد هذه المتطلبات، يرجى اختيار توزيعتك من هذه القائمة ومتابعة دليل إعداد الخادم الأولي الخاص بنا. -
يتم تثبيت UFW بشكل افتراضي على أوبونتو. إذا تم إلغاء تثبيته لأي سبب من الأسباب، يمكنك تثبيته مرة أخرى باستخدام
sudo apt install ufw
.
إعداد جدار الحماية على أوبونتو باستخدام UFW
- تمكين IPv6
- ضبط السياسات الافتراضية
- السماح باتصالات SSH
- تمكين UFW
- السماح بأي اتصالات أخرى المطلوبة
- رفض الاتصالات
- حذف قواعد جدار الحماية
- التحقق من حالة UFW والقواعد
- كيفية تعطيل أو إعادة تعيين جدار الحماية على أوبونتو
الخطوة 1 — التأكد من تمكين IPv6
في الإصدارات الحديثة من أوبونتو، يتم تمكين IPv6 بشكل افتراضي. في الواقع، يعني ذلك أن معظم قواعد جدار الحماية المضافة إلى الخادم ستتضمن نسخة IPv4 ونسخة IPv6، والتي يتم تحديدها بواسطة v6
داخل إخراج أمر الحالة في UFW. للتأكد من تمكين IPv6، يمكنك التحقق من ملف تكوين UFW الخاص بك في /etc/default/ufw
. افتح هذا الملف باستخدام nano
أو محرر سطر الأوامر المفضل لديك:
ثم تأكد من أن قيمة IPV6
مُعينة على yes
. يجب أن يبدو مثل هذا:
احفظ وأغلق الملف. إذا كنت تستخدم nano
، يمكنك القيام بذلك بكتابة CTRL+X
، ثم Y
و ENTER
للتأكيد.
عند تمكين UFW في الخطوة لاحقة من هذا الدليل، سيتم تكوينه لكتابة قواعد جدار الحماية لكل من IPv4 و IPv6.
الخطوة 2 — ضبط السياسات الافتراضية
إذا كنت تبدأ للتو مع UFW، فإن الخطوة الأولى الجيدة هي التحقق من سياسات جدار الحماية الافتراضية الخاصة بك. تتحكم هذه القواعد في كيفية التعامل مع حركة المرور التي لا تتطابق صراحة مع أي قواعد أخرى.
بشكل افتراضي، يتم ضبط UFW لرفض جميع الاتصالات الواردة والسماح بجميع الاتصالات الصادرة. هذا يعني أن أي شخص يحاول الوصول إلى خادمك لن يكون قادرًا على الاتصال، بينما ستكون أي تطبيق داخل الخادم قادرًا على الوصول إلى العالم الخارجي. يتم تضمين قواعد إضافية للسماح بخدمات ومنافذ محددة كاستثناء لهذه السياسة العامة.
للتأكد من قدرتك على متابعة بقية هذا البرنامج التعليمي، ستقوم الآن بضبط سياسات UFW الافتراضية الخاصة بك لحركة المرور الواردة والصادرة.
لضبط السياسة الافتراضية لـ UFW الواردة إلى deny
، قم بتشغيل:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
لضبط السياسة الافتراضية لـ UFW الصادرة إلى allow
، قم بتشغيل:
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
تضبط هذه الأوامر الافتراضات على رفض الاتصالات الواردة والسماح بالاتصالات الصادرة. قد تكون هذه الافتراضات النارية وحدها كافية لجهاز الكمبيوتر الشخصي، ولكن الخوادم عادة ما تحتاج إلى الاستجابة لطلبات الواردة من مستخدمين خارجيين. سننظر في ذلك في الخطوة التالية.
الخطوة 3 — السماح بالاتصالات عبر SSH
إذا قمت بتمكين جدار الحماية UFW الآن، فسيُنكِر جميع الاتصالات الواردة. هذا يعني أنه ستحتاج إلى إنشاء قواعد تسمح صراحة بالاتصالات الواردة الشرعية — مثل الاتصالات عبر SSH أو HTTP — إذا كنت ترغب في استجابة الخادم الخاص بك لهذه الأنواع من الطلبات. إذا كنت تستخدم خادمًا سحابيًا، فمن المحتمل أن ترغب في السماح بالاتصالات الواردة عبر SSH حتى تتمكن من الاتصال بخادمك وإدارته.
السماح بملف تعريف تطبيق OpenSSH UFW
عند التثبيت، ستقوم معظم التطبيقات التي تعتمد على الاتصالات الشبكية بتسجيل ملف تعريف تطبيق ضمن UFW، مما يتيح للمستخدمين السماح أو منع الوصول الخارجي إلى خدمة بشكل سريع. يمكنك التحقق من الملفات الشخصية المسجلة حاليًا في UFW باستخدام:
OutputAvailable applications:
OpenSSH
لتمكين ملف تعريف تطبيق OpenSSH، قم بتشغيل الأمر التالي:
OutputRule added
Rule added (v6)
سيقوم هذا بإنشاء قواعد جدار الحماية للسماح بجميع الاتصالات على منفذ 22
، وهو المنفذ الذي يستمع إليه مشغل SSH افتراضيًا.
السماح بـ SSH باستخدام اسم الخدمة
طريقة أخرى لتكوين UFW للسماح باتصالات SSH الواردة هي عن طريق الإشارة إلى اسم الخدمة الخاص بها: ssh
.
OutputRule added
Rule added (v6)
يعرف UFW الأبواب والبروتوكولات التي تستخدمها الخدمة استنادًا إلى ملف /etc/services
.
السماح بـ SSH باستخدام رقم البورت
بديلًا عن ذلك، يمكنك كتابة القاعدة المكافئة عن طريق تحديد البورت بدلاً من ملف التكوين أو اسم الخدمة. على سبيل المثال، تعمل هذه الأمر بنفس الطريقة كما في الأمثلة السابقة:
OutputRule added
Rule added (v6)
إذا قمت بتكوين خادم SSH الخاص بك لاستخدام بورت مختلف، سيتعين عليك تحديد البورت المناسب. على سبيل المثال، إذا كان خادم SSH الخاص بك يستمع على البورت 2222
، يمكنك استخدام هذا الأمر للسماح بالاتصالات على ذلك البورت:
OutputRule added
Rule added (v6)
الآن بعد تكوين جدار الحماية الخاص بك للسماح باتصالات SSH الواردة، يمكنك تمكينه.
الخطوة 4 — تمكين UFW
يجب تكوين جدار الحماية الخاص بك الآن للسماح باتصالات SSH. للتحقق من القواعد التي تمت إضافتها حتى الآن، حتى عندما يكون جدار الحماية معطلًا، يمكنك استخدام:
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
بعد التحقق من وجود قاعدة تمكين الاتصالات الواردة لـ SSH، يمكنك تمكين جدار الحماية باستخدام:
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
لعرض القواعد المحددة. تغطي بقية هذا البرنامج التعليمي كيفية استخدام 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
، استخدم هذه الأوامر:
عند تحديد نطاقات المنافذ مع UFW، يجب عليك تحديد البروتوكول (tcp
أو udp
) الذي يجب أن تنطبق القواعد عليه. لم نذكر هذا من قبل لأن عدم تحديد البروتوكول يسمح تلقائيًا بكلا البروتوكولين، وهو مقبول في معظم الحالات.
عناوين IP المحددة
عند العمل مع UFW، يمكنك أيضًا تحديد عناوين IP داخل قواعدك. على سبيل المثال، إذا كنت ترغب في السماح بالاتصالات من عنوان IP معين، مثل عنوان IP في العمل أو في المنزل 203.0.113.4
، فيجب عليك استخدام المعلمة from
، وتحديد العنوان IP الذي ترغب في السماح به:
OutputRule added
يمكنك أيضًا تحديد منفذ يُسمح لعنوان الـ IP بالاتصال به عن طريق إضافة to any port
تليه رقم المنفذ. على سبيل المثال، إذا كنت ترغب في السماح لـ 203.0.113.4
بالاتصال بالمنفذ 22
(SSH)، استخدم هذا الأمر:
OutputRule added
مجالات فرعية
إذا كنت ترغب في السماح بمجموعة من عناوين IP، يمكنك القيام بذلك باستخدام تدوين CIDR لتحديد قناع الشبكة. على سبيل المثال، إذا كنت ترغب في السماح بجميع عناوين IP التي تتراوح من 203.0.113.1
إلى 203.0.113.254
يمكنك استخدام هذا الأمر:
OutputRule added
بالمثل، يمكنك أيضًا تحديد المنفذ الوجهة الذي يُسمح للشبكة الفرعية 203.0.113.0/24
بالاتصال به. مرة أخرى، سنستخدم المنفذ 22
(SSH) كمثال:
OutputRule added
الاتصالات بواجهة شبكة محددة
إذا كنت ترغب في إنشاء قاعدة جدار نار تنطبق فقط على واجهة الشبكة المحددة، يمكنك القيام بذلك عن طريق تحديد “السماح داخلًا على” تليه اسم واجهة الشبكة.
قد ترغب في البحث عن واجهات الشبكة الخاصة بك قبل المتابعة. للقيام بذلك، استخدم هذا الأمر:
Output Excerpt2: 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
) إليه بهذا الأمر:
OutputRule added
Rule added (v6)
بهذه الطريقة، سيتمكن خادمك من استقبال طلبات HTTP من الإنترنت العام.
أو، إذا كنت ترغب في أن يستمع خادم قاعدة بيانات MySQL (المنفذ 3306
) للاتصالات على واجهة الشبكة الخاصة eth1
، على سبيل المثال، يمكنك استخدام هذا الأمر:
OutputRule added
Rule added (v6)
سيتيح هذا السماح للخوادم الأخرى على الشبكة الخاصة الاتصال بقاعدة البيانات MySQL الخاصة بك.
الخطوة 6 — رفض الاتصالات
إذا لم تقم بتغيير السياسة الافتراضية للاتصالات الواردة، يتم تكوين UFW لرفض جميع الاتصالات الواردة. عمومًا، يبسط هذا العملية لإنشاء سياسة جدار نار آمنة عن طريق الطلب منك بإنشاء قواعد تسمح صراحة بالمنافذ وعناوين IP المحددة.
ومع ذلك، في بعض الأحيان قد ترغب في رفض اتصالات محددة بناءً على عنوان IP المصدر أو الشبكة الفرعية، ربما لأنك تعلم أن خادمك يتعرض لهجوم من هناك. أيضًا، إذا كنت ترغب في تغيير سياسة الوارد الافتراضية الخاصة بك إلى السماح (الأمر الذي لا يُنصح به)، فستحتاج إلى إنشاء قواعد رفض لأي خدمات أو عناوين IP لا ترغب في السماح باتصالاتها.
لكتابة قواعد الرفض، يمكنك استخدام الأوامر الموصوفة سابقًا، مع استبدال السماح بالرفض.
على سبيل المثال، لرفض اتصالات HTTP، يمكنك استخدام هذا الأمر:
OutputRule added
Rule added (v6)
أو إذا كنت ترغب في رفض جميع الاتصالات من 203.0.113.4 يمكنك استخدام هذا الأمر:
OutputRule added
في بعض الحالات، قد ترغب أيضًا في حظر الاتصالات الصادرة من الخادم. لرفض جميع المستخدمين من استخدام منفذ على الخادم، مثل المنفذ 25 لحركة مرور SMTP، يمكنك استخدام “deny out” تليه رقم المنفذ:
OutputRule added
Rule added (v6)
سيتم بهذا حظر كل حركة مرور SMTP الصادرة على الخادم.
الخطوة 7 — حذف القواعد
معرفة كيفية حذف قواعد جدار الحماية مهمة بنفس القدر مثل معرفة كيفية إنشائها. هناك طريقتان مختلفتان لتحديد القواعد التي يتم حذفها: حسب رقم القاعدة أو باسمها المقروء للإنسان (مشابهة للطريقة التي تم فيها تحديد القواعد عند إنشائها).
حذف قاعدة UFW بالرقم
لحذف قاعدة UFW برقمها، أولاً سترغب في الحصول على قائمة مرقمة لجميع قواعد جدار الحماية الخاصة بك. يحتوي أمر UFW status على خيار لعرض أرقام بجوار كل قاعدة، كما هو موضح هنا:
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 مثل هذا:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
سيتم طلب تأكيد ثم حذف القاعدة 2، التي تسمح باتصالات HTTP. لاحظ أنه إذا كان IPv6 ممكّنًا، فسوف تريد حذف القاعدة الخاصة بـ IPv6 المقابلة أيضًا.
حذف قاعدة UFW بالاسم
بدلاً من استخدام أرقام القواعد، يمكنك أيضًا الإشارة إلى القاعدة بواسطة تسميتها القابلة للقراءة من الإنسان، والتي تعتمد على نوع القاعدة (عادةً allow
أو deny
) واسم الخدمة أو رقم المنفذ الذي كان الهدف لهذه القاعدة، أو اسم ملف تعريف التطبيق في حالة استخدامه. على سبيل المثال، إذا كنت تريد حذف قاعدة allow
لملف تعريف تطبيق يُسمى Apache Full
كان مُمكّنًا مسبقًا، يمكنك استخدام:
OutputRule deleted
Rule deleted (v6)
الأمر delete
يعمل بنفس الطريقة للقواعد التي تم إنشاؤها باستشارة خدمة بواسطة اسمها أو منفذها. على سبيل المثال، إذا قمت سابقًا بتعيين قاعدة للسماح باتصالات HTTP باستخدام sudo ufw allow http
، هذه هي الطريقة التي يمكنك بها حذف تلك القاعدة:
OutputRule deleted
Rule deleted (v6)
لأن أسماء الخدمات قابلة للتبديل مع أرقام المنافذ عند تحديد القواعد، يمكنك أيضًا الإشارة إلى نفس القاعدة باستخدام allow 80
، بدلاً من allow http
:
OutputRule deleted
Rule deleted (v6)
عند حذف قواعد UFW بالاسم، يتم حذف كل من القواعد IPv4 و IPv6 إذا كانت موجودة.
الخطوة 8 — التحقق من حالة UFW والقواعد
في أي وقت، يمكنك التحقق من حالة UFW باستخدام هذا الأمر:
إذا كان UFW معطلًا، الأمر الذي يحدث بشكل افتراضي، سترى شيئًا مثل هذا:
OutputStatus: inactive
إذا كان UFW نشطًا، الأمر الذي يجب أن يحدث إذا اتبعت الخطوة 3، سيقول الإخراج أنه نشط وسيقوم بسرد أي قواعد مضبوطة. على سبيل المثال، إذا كانت جدار الحماية مضبوطًا للسماح باتصالات SSH (منفذ 22
) من أي مكان، قد يبدو الإخراج مثل هذا:
OutputStatus: 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، يمكنك تعطيله باستخدام هذا الأمر:
OutputFirewall stopped and disabled on system startup
لن تكون أية قواعد قمت بإنشائها باستخدام UFW نشطة بعد الآن. يمكنك دائمًا تشغيل sudo ufw enable
إذا كنت بحاجة إلى تنشيطه لاحقًا.
إذا كانت لديك بالفعل قواعد مكونة مسبقًا باستخدام UFW ولكنك قررت البدء من جديد، يمكنك استخدام أمر الإعادة تعيين:
OutputResetting 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