مقدمة
UFW، أو جدار الحماية البسيط، هو واجهة لـ iptables
تهدف إلى تبسيط عملية تكوين جدار الحماية. بينما يكون iptables
أداة قوية ومرنة، يمكن أن يكون من الصعب على المبتدئين التعلم كيفية استخدامها لتكوين جدار الحماية بشكل صحيح. إذا كنت تبحث عن بدء في تأمين شبكتك، ولا تكن تعرف أي أداة يجب استخدامها، فقد يكون UFW الخيار المناسب لك.
ستظهر هذه الدليلة كيفية إعداد جدار حماية بـ UFW على Ubuntu الإصدار v18.04 وما فوق.
المتطلبات الأساسية
إذا كنت تستخدم إصدار Ubuntu 16.04 أو أدناه، نوصي بترقية إلى إصدار أحدث حيث لم يعد Ubuntu يقدم الدعم لهذه الإصدارات. هذه مجموعة من الدلائل ستساعدك في ترقية إصدار Ubuntu الخاص بك.
لاتباع هذه الدليلة، ستحتاج إلى:
-
خوادم تشتغل على Ubuntu، ومستخدم غير رئيسي بالموارد الممولة ب
sudo
، لمعلومات عن كيفية تأسيس هذه الخوادم، يرجى اختيار توزيع التعريفات الخاصة بك من هذه القائمة وتتبع دراسة بدائل الخوادم الأولية التي نوفر لكم -
تم تثبيت UFW تلقائيًا في Ubuntu. إذا تم حذفه لسبب ما، يمكنك تثبيته باستخدام
sudo apt install ufw
.
إعداد جدار Ubuntu مع UFW
- تمكين IPv6
- إعداد سياسات تلقائية
- السماح باتصالات SSH
- تمكين UFW
- السماح بأي اتصالات أخرى مطلوبة
- رفض الاتصالات
- حذف قواعد الجدار الناري
- التحقق من حالة UFW والقواعد
- كيف تعطيل أو إعادة تعيين الجدار الناري على Ubuntu
خطوة 1 — التأكد من تمكين IPv6
في الإصدارات الأحدث من Ubuntu، يتم تمكين 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، على سبيل المثال — إذا كنت تريد أن تستجيب
السماح بملف الملف التطبيقي لـ 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. بعض البرمجة تستخدم منافصل متعددة، بلغ عن ذلك حلقة من خالل منفصلة 6000
–6007
. لم نُشر هذا من قبلنا من قبل سيناء لأن لا تحتوي على سيناء من قبل سيناء.
ل لحصول على إمكانية إدخال فترات منفصلة بواسطة UFW، يجب إدخال معلومات البرمجة مثل tcp
أو udp
. لم نُشر هذا من قبلنا من قبل سيناء لأن لا تحتوي على سيناء من قبل سيناء.
ل لحصول على إمكانية إدخال فترات منفصلة بواسطة UFW، يجب إدخال معلومات البرمجة مثل tcp
أو udp
. لم نُشر هذا من قبلنا من قبل سيناء لأن لا تحتوي على سيناء من قبل سيناء.
IP Addresses
إذا كانت سيناء إدخال فترات بواسطة UFW، يمكنك إدخال معلومات صفحة من خالل منفصلة. ل لحصول على إمكانية إدخال فترات بواسطة UFW، يجب إدخال معلومات صفحة من خالل منفصلة. ل لحصول على إمكانية إدخال فترات بواسطة UFW، يجب إدخال معلومات صفحة من خالل منفصلة.
OutputRule added
يمكنك إدخال معلومات صفحة من خالل منفصلة بواسطة UFW، يمكنك إدخال معلومات صفحة من خالل منفصلة. ل لحصول على إمكانية إدخال فترات بواسطة UFW، يجب إدخال معلومات صفحة من خالل منفصلة.
OutputRule added
Subnets
إذا كنت ترغب في السماح بشبكة فرعية من عناوين الـ IP، يمكنك القيام بذلك باستخدام تنسيق CIDR لتحديد قناع الشبكة. على سبيل المثال، إذا كنت ترغب في السماح بجميع عناوين الـ IP التي تتراوح بين 203.0.113.1
و 203.0.113.254
يمكنك استخدام هذا الأمر:
OutputRule added
كما يمكنك تحديد منفذ الوصول الوجهة الذي يُسمح لشبكة الفرعية 203.0.113.0/24
بالاتصال به. مرة أخرى، سنستخدم منفذ 22
(SSH) كمثال:
OutputRule added
الاتصالات بواجهة شبكة محددة
إذا كنت ترغب في إنشاء قاعدة حماية تُطبق فقط على واجهة شبكة محددة، يمكنك القيام بذلك عن طريق تحديد “allow in on” متبوعًا باسم واجهة الشبكة.
قد ترغب في البحث عن واجهات شبكتك قبل المتابعة. لفعل ذلك، استخدم هذا الأمر:
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 لرفض جميع الاتصالات المنازلة. عامةً, هذا يبسط عملية إنشاء سياسة جدار آمنة بمجرد توجيهك لإنشاء قواعد تبين بوضوح تسمح بالاتصال بالأخصائيات والعناوين المحددة.
ومع ذلك, في بعض الأحيان سترغب في رفض اتصالات معينة وفقاً للعناوين المصدرية أو المنطقة, ربما لأنك تعرف أن قاعدة بياناتك تتحدث من هناك. أيضًا, إذا كنت تريد تغيير سياسة الوصول الافتراضية الإلزامية المتبعة إلى السماح (وهذا لا يوصل), فسيكون عليك إنشاء قواعد رفض لأي خدمات أو أعناوين لا تريد تسمح بالاتصال إليهم.
لكتابة قواعد رفض, يمكنك استخدام الأوامر الموضوعة من قبل, محاولاً 替سماح بالقواعد الجانبية رفض.
على سبيل المثال, لرفض اتصالات 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状态命令有一个选项可以显示每个规则旁边的编号,如下所示:
Numbered Output:Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
如果您决定删除规则编号为2的规则,该规则允许端口80(HTTP)连接,您可以像这样指定它:
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)
يعمل أمر الحذف بنفس الطريقة للقواعد التي تم إنشاؤها من خلال إشارة إلى خدمة بإسمها أو قناة. على سبيل المثال، إذا قمت مسبقًا بتعيين قاعدة تسمح بالاتصالات 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. تأكد من أن السياسات الافتراضية لن تتغير إلى تفاصيلها الأصلية، إذا قمت بتعديلها في أي نقطة.
استخدم DigitalOcean App Platform لنشر تطبيقات واجهةك من GitHub. دع DigitalOcean يركز على تكييف حجم تطبيقك.
ختام
تم إعداد جدارك السيكيري بشكل يسمح بالاتصالات (على الأقل) بالSSH. تأكد من تسميح أي اتصالات داخلية أخرى تحتاجها خوادمك وفي الوقت نفسه يتم قياس أي اتصالات غير ضرورية لكي تكون خوادمك فعالة وآمنة.
لمعرفة مزيد من تكوينات UFW عامة ، تفقد الدرس التعليمي أساسيات UFW: قوالب القوانين العامة والأوامر الشائعة في الجدارالتعليمي.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04