يلعب جدار الحماية في لينكس دورًا حيويًا في تأمين نظام الحاسوب. فهو يعمل كحاجز، يتحكم في حركة مرور الشبكة ويُرشّحها لحماية النظام من الوصول غير المصرح به والهجمات والتهديدات الأخرى. بدون جدار حماية مُهيأ بشكل صحيح، قد يكون الخادم عرضة لأنواع مختلفة من الهجمات الإلكترونية، مما يؤدي إلى عواقب وخيمة على أمن البيانات وسريتها.
سنتناول في هذه المقالة أداتين رئيسيتين لتكوين جدار الحماية في نظام لينكس: firewalld و iptables. سنجري تحليلًا مقارنًا لميزاتهما ووظائفهما ومزاياهما. بالإضافة إلى ذلك، سنقدم تعليمات مفصلة لإعداد كل أداة واستخدامها، كما سنناقش أفضل الممارسات لتأمين نظامك باستخدام جدار الحماية على منصة لينكس. سيتم تطبيق جميع الخطوات عمليًا على خادم افتراضي بصلاحيات المستخدم الجذر.
تكوين جدار الحماية على لينكس
برنامج Firewalld (خادم جدار الحماية) هو برنامج لإدارة جدار الحماية في أنظمة تشغيل لينكس. يوفر واجهة مستخدم لضبط قواعد جدار الحماية، والسماح باتصالات تطبيقات الشبكة أو حظرها. وهو مُثبّت مسبقًا بشكل افتراضي في معظم توزيعات الخوادم. في حال عدم تثبيته مسبقًا، يمكن تثبيته بشكل مستقل من مستودعات التوزيعة الرسمية.
بالنسبة لأنظمة Red Hat (مثل RHEL وCentOS وFedora)، يتم إجراء التثبيت باستخدام الأمر:
yum install firewalld
بالنسبة لديبيان/أوبونتو:
apt-get install firewalld
بعد التثبيت، يمكن البدء في تشغيله وتنشيطه على الفور باستخدام الأمر:
systemctl start firewalld
بعد ذلك، عليك إضافة الخدمة إلى بدء التشغيل:
systemctl enable firewalld
في هذه المرحلة، نوصي بتعطيل ufw، إذ لا يُنصح باستخدام هذه الأداة مع firewalld أو iptables في نفس الوقت. تحقق من الحالة:
systemctl status ufw
لإيقافه، أدخل الأمر:
systemctl stop ufw
للإلغاء الكامل:
ufw disable
بعد هذه الإجراءات، يمكنك المتابعة لتكوين firewalld.
أولاً، من الضروري تحديد مناطق الثقة. يستخدم جدار الحماية مفهوم المناطق لتحديد مستوى ثقة واجهات الشبكة. تُخصص منطقة واحدة لكل واجهة، وتُطبق قواعد جدار الحماية بناءً عليها. تُفتح قائمة جميع المناطق المتاحة باستخدام الأمر:
firewall-cmd --get-zones
عادة، يتم استخدام 4 مناطق رئيسية:
- عام:هذه المنطقة مخصصة للشبكات التي تعتبرها غير آمنة؛
- خاص:ينطبق على الشبكات المنزلية أو اتصالات الشبكة الموثوقة الأخرى؛
- داخلي:تستخدم للشبكات الداخلية، مثل تلك الموجودة داخل شبكة منظمة أو شركة؛
- DMZ:هذه المنطقة هي المكان الذي يتم فيه عادةً وضع الخوادم التي يجب أن تكون قابلة للوصول إليها من الإنترنت.
هذا مجرد مثال واحد. يمكنك إضافة منطقتك الخاصة باستخدام الأمر:
firewall-cmd --permanent --new-zone=nameyourzone
بعد الإضافة، يلزم إعادة التحميل:
firewall-cmd --reload
لحذف منطقة، يتم استخدام طريقة مماثلة
firewall-cmd --permanent --delete-zone=nameyourzone
بعد تحديد المناطق، من الضروري السماح بحركة المرور للخدمات والمنافذ المطلوبة. للسماح بخدمة معينة، استخدم الأمر:
firewall-cmd --zone=public --add-service=name
حيث يمثل "name" اسم الخدمة. على سبيل المثال، للسماح بمرور البيانات إلى خادم Apache:
firewall-cmd --zone=public --add-service=http
لتحديد المنافذ المسموح بها، استخدم الأمر:
firewall-cmd --zone=public --add-port=number/protocol
على سبيل المثال، سيبدو المنفذ القياسي 22 لـ SSH على النحو التالي:
firewall-cmd --zone=public --add-port=22/tcp
في هذه المرحلة، تكون القواعد الرئيسية قد وُضعت بالفعل. بعد ذلك، حدد كيفية معالجة حركة البيانات بناءً على المصدر والوجهة والمنفذ ومعايير أخرى. لإضافة قاعدة (باستخدام المنطقة العامة كمثال):
firewall-cmd --zone=public rule
على سبيل المثال، للسماح بحركة المرور الواردة من أي مصدر إلى المنفذ 80 (HTTP):
firewall-cmd --zone=public --add-port=80/tcp --permanent
لإزالة القاعدة:
firewall-cmd --permanent --remove-rule=rule_specification
حيث يمثل rule نوع القاعدة (على سبيل المثال، المنفذ، الخدمة، القاعدة الغنية، إلخ)، و rule_specification هي مواصفات القاعدة نفسها.
بعد إجراء تغييرات على إعدادات جدار الحماية، يجب حفظها وتطبيقها. لحفظ التغييرات، استخدم الأمر:
firewall-cmd --runtime-to-permanent
لتطبيق التغييرات:
firewall-cmd --reload
بعد الانتهاء من عملية الإعداد، يمكنك التحقق من المعلمات المحددة عن طريق فتح قائمة جميع القواعد:
firewall-cmd --list-all
في حالة ظهور أي مشاكل، تحقق من سجلات Firewalld باستخدام الأمر:
journalctl -u firewalld
ملاحظة: لقد تناولنا فقط الخوارزمية العامة لإعداد الاتصال. الأداة تتمتع بوظائف واسعة. للحصول على معلومات كاملة حول جميع الخيارات المتاحة، يمكنك الرجوع إلى الوثائق الرسمية أو فتح قسم المساعدة.
firewall-cmd --help
تكوين iptables على Linux
بخلاف Firewalld، يُعد iptables أداةً أقدم، لكنها لا تزال شائعة الاستخدام في لينكس، لإدارة جدار الحماية. يوفر نهجًا أكثر مباشرة ومرونة لقواعد تصفية الحزم على مستوى نواة لينكس. مع ذلك، يتطلب iptables معرفةً وخبرةً أكثر تقدمًا مقارنةً بـ Firewalld، مما يجعله أصعب على المبتدئين. تحقق من الإصدار المُثبّت مسبقًا من الأداة باستخدام الأمر:
iptables -V
إذا لم تكن الأداة مُثبّتة، فستحتاج إلى تثبيتها. أمر التثبيت على أوبونتو وديبيان:
apt install iptables
بالنسبة لأنظمة Red Hat (على سبيل المثال، CentOS، Fedora):
yum install iptables
الأمر للتفعيل بعد التثبيت:
systemctl start iptables
لإضافة إلى بدء التشغيل، قم بتنفيذ:
systemctl enable iptables
قبل البدء بإعدادات iptables، من المهم فهم آلية عمله. ويساعد في ذلك بناء جملة البرنامج. يبدو البرنامج كما يلي:
iptables -t table action chain additional_parameters
دعونا نتعمق أكثر في كل عنصر.
يحتوي برنامج Iptables على أربعة جداول رئيسية: filter و nat و mangle و raw . كل جدول مصمم لمعالجة أنواع معينة من الحزم وله سلاسل قواعد خاصة به.
- تصفيةهذا هو الجدول الأكثر استخدامًا، ويحتوي على قواعد تصفية الحزم. يُستخدم لاتخاذ القرارات بشأن السماح بالحزم أو رفضها.
- ناتيُستخدم هذا الجدول لتعديل عناوين الشبكة والمنافذ في الحزم. ويُستخدم غالبًا لإعداد التمويه (NAT).
- مفقودفي هذا الجدول، يمكنك تعديل رؤوس الحزم. يُستخدم لعمليات حزم متخصصة، مثل وضع العلامات.
- الخاميُستخدم هذا الجدول لتكوين القواعد التي تُطبّق قبل مرورها عبر نظام تتبع الاتصالات. ويُستخدم عادةً لإعداد قواعد لا ينبغي لنظام التتبع تعديلها، مثل حذف الحزم من عناوين معينة.
يحتوي كل جدول على مجموعة من السلاسل. السلاسل هي سلسلة من القواعد التي يتم التحقق منها بالتتابع. هناك ثلاث سلاسل محددة مسبقًا:
- الإدخال (الوارد). تحدد القواعد الموجودة في هذه السلسلة ما يجب فعله بالحزم الواردة.
- الإخراج (الصادر)تنطبق هذه السلسلة على جميع الحزم التي يرسلها جهاز الكمبيوتر الخاص بك إلى أجهزة أو أجهزة كمبيوتر أخرى على الشبكة.
- إعادة توجيه (إعادة توجيه). تحدد القواعد الموجودة في هذه السلسلة ما يجب فعله بالحزم المعاد توجيهها.
أخيرًا، لكل سلسلة فعل (هدف). عمليًا، تُستخدم خمسة أفعال رئيسية:
- أقبل:السماح للحزمة بالمرور عبر جدار الحماية.
- إسقاط:رفض الحزمة والتخلص منها دون أي استجابة.
- رفض:رفض الحزمة وإرسال رسالة خطأ ICMP إلى المرسل.
- LOG:قم بتسجيل الحزمة في سجل النظام وقم بإجراء آخر (على سبيل المثال، قبول أو إسقاط).
- عودة:توقف عن التحقق من القواعد في السلسلة الحالية والعودة إلى سلسلة الاستدعاء (إذا أمكن).
لبدء الإعداد، افتح قائمة القواعد الموجودة باستخدام الأمر:
iptables -L
كدليل لتكوين Iptables، دعونا نلقي نظرة على أمثلة عملية لأكثر الأوامر استخدامًا. لتسهيل الأمر، سنقسم الأمثلة إلى ثلاث مجموعات، حسب السلسلة المحددة.
مدخلات السلسلة :
- السماح بحركة المرور الواردة عبر بروتوكول TCP على المنفذ 80:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
2. السماح بحركة المرور الواردة عبر بروتوكول UDP على المنفذ 22:
iptables -A INPUT -p udp --dport 22 -j ACCEPT
3. حظر حركة المرور الواردة من عنوان IP محدد:
iptables -A INPUT -s 192.168.1.100 -j DROP
مخرجات السلسلة :
- السماح بحركة المرور الصادرة عبر بروتوكول TCP على المنفذ 443:
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
2. السماح بحركة المرور الصادرة عبر بروتوكول UDP على المنفذ 80:
iptables -A OUTPUT -p udp --dport 80 -j ACCEPT
3. حظر حركة المرور الصادرة إلى منفذ معين (على سبيل المثال، 21):
iptables -A OUTPUT -p tcp --dport 21 -j DROP
سلسلة للأمام :
- حظر حركة المرور المعاد توجيهها من نطاق محدد من عناوين IP:
iptables -A FORWARD -s 172.16.0.0/24 -j DROP
2. حظر إعادة توجيه الحزم من واجهة شبكة محددة:
iptables -A FORWARD -i eth1 -j DROP
3. حدد عدد الاتصالات المتزامنة لمنفذ معين (في هذا المثال، 10 اتصالات في الدقيقة على المنفذ 80):
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute -j ACCEPT
كما ترى، في كل حالة على حدة، يُستخدم أمر إضافي. للحصول على قائمة كاملة بالوسائط الممكنة والدعم الشامل لوظائف الأداة، أدخل:
iptables -h
للتأكد من صحة الإعدادات، أعد إدخال الأمر لعرض قائمة القواعد:
iptables -L
لحذف قاعدة معينة، استخدم الأمر:
iptables -D chain rule_number
على سبيل المثال، إذا كنت تريد حذف القاعدة رقم 1 من سلسلة INPUT، فسوف يبدو الأمر كما يلي:
iptables -D INPUT 1
لحذف جميع القواعد بأمر واحد:
iptables -F
ملاحظة هامة : لا تُحفظ قواعد iptables تلقائيًا بعد إعادة تشغيل النظام أو الخدمة. لحفظ القواعد، يجب إضافتها إلى ملف تكوين واستعادتها بعد إعادة التشغيل. يمكن استخدام أداتي iptables-save و iptables-restore لهذا الغرض. لحفظ القواعد، أدخل الأمر التالي:
iptables-save > /etc/iptables/rules.v4
يحفظ هذا قواعد iptables الحالية في ملف rules.v4. لاستعادتها بعد إعادة التشغيل، أدخل:
iptables-restore < /etc/iptables/rules.v4
يقوم هذا الأمر باستعادة القواعد من ملف rules.v4.
خاتمة
يُعدّ تكوين جدار الحماية على نظام لينكس باستخدام firewalld أو iptables جانبًا مهمًا لضمان أمان الخادم. تُوفّر كلتا الأداتين وسائل موثوقة لإدارة حركة مرور الشبكة وحماية النظام من الوصول غير المصرّح به والهجمات الإلكترونية. يعتمد الاختيار بين firewalld وiptables على احتياجات المستخدم وتفضيلاته الخاصة، مع مراعاة اختلاف وظائفهما ونقاط قوتهما.