مقدّمة عن التحكم في حركة البيانات على الشبكة باستخدام Iptables وFirewallD على Red Hat Enterprise Linux


محمد أحمد العيل

الجدران النارية Firewalls هي أنظمة حماية تتحكّم في حركة البيانات القادمة إلى شبكة أو الخارجة منها، اعتمادا على مجموعة من القواعد المعرَّفة مسبقا؛ على سبيل المثال وجهة الحزم Packets، مصدرها أو نوعية البيانات.

سنعرض في هذا الدرس لأساسيات FirewallD وهو البرنامج المبدئي لإدارة الجدار الناري في Red Hat Enterprise Linux 7، وIptables الذي هو الجدار الناري التقليدي في أنظمة لينكس، ويتوفّر أيضا في RHEL 7.

مقارنة بين FirewallD وIptables

يعمل الجداران الناريان FirewallD وIptables عن طريق التخاطب مع النواة عبر نفس الواجهة، أمر iptables؛ إلا أن الاختلاف بينهما يكمن في أن FirewallD يمكنه تعديل الإعدادات أثناء عمل النظام دون ضياع الاتّصالات الجارية. يجب أن يكون FirewallD مثبتا مبدئيا على RHEL 7، إلا أنه يمكن ألا يكون مفعلا. يمكن التحقّق منه بالأوامر التاليّة:

 
# yum info firewalld firewall-config

01_check_firewall.png

تُظهر نتيجة الأمر أعلاه أن الجدار الناري FirewallD مثبت فعلا، وكذلك حزمة firewall-config التي توفّر أداة في واجهة المستخدم لإدارة الجدار الناري. الجدار الناري مثبّت، يمكننا الآن التحقق من ما إذا كان مفعّلا أم لا:

 
# systemctl status -l firewalld.service

02_check_firewall_status.png

على الجانب الآخر، لا يُضمَّن جدار Iptables الناري مبدئيا في Red Hat Enterprise Linux 7؛ إلا أنه يمكن تثبيته بالأمر:

 
# yum update && yum install iptables-services

تُشغَّل الخدمتان وتُفعّلان مع الإقلاع عن طريق أوامر systemd الاعتيادية:

 
# systemctl start firewalld.service
# systemctl start iptables.service
# systemctl enable firewalld.service
# systemctl enable iptables.service

يوجد ملفّ إعداد iptables على المسار etc/sysconfig/iptables/ (يجب أن تكون الحزمة مثبتة حتى يوجد الملفّ)؛ بينما توجد ملفات إعداد FirewallD موزعة بين المجلدين usr/lib/firewalld/ وetc/firewalld/.

يمكن الحصول على معلومات أكثر عن هذه الأدوات بتنفيذ الأوامر:

# man firewalld.conf
# man firewall-cmd
# man iptables

راجع مقال أساسيات التعامل مع الصدفة Shell في Red Hat Enterprise Linux لطرق أخرى حول الحصول على المعلومات عن الأوامر في Red Hat Enterprise Linux 7.

استخدام Iptables للتحكم في حركة البيانات عبر الشبكة

سنذكُر في ما يلي أمثلة لإعداد Iptables على RHEL 7؛ تأكد من مراجعة مقال ما هو الجدار الناري وكيف يعمل؟ والمقالات المرتبطة به لفهم آلية عمل الجدار الناري بالتفصيل.

السماح لحركة البيانات المتجهة إلى خادوم الوِب والصّادرة منه

تستخدم خواديم الوِب المنفذين 80 و443 للإنصات للطلبات القادمة إلى الخادوم. المنفذ الأول 80 خاصّ بحركة البيانات العاديّة بينما يُستخدم المنفذ الثاني 443 للبيانات المؤمّنة. تطلُب الأوامر التالية من Iptables السماح بحركة البيانات الواردة والصّادرة عبر المنفذين 80 و443 في واجهة الشبكة enp0s3:

# iptables -A INPUT -i enp0s3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o enp0s3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
# iptables -A INPUT -i enp0s3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -o enp0s3 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

حجب بيانات قادمة من شبكة محدّدة

تحتاج أحيانا لمنع اتصالات واردة من شبكة تحدّدها، مثلا 192.168.1.0/24. يؤدّي Iptables هذه المهمة بتنفيذ الأمر التالي:

 
# iptables -I INPUT -s 192.168.1.0/24 -j DROP

يحجب الأمر السابق جميع الاتصالات القادمة من عنوان IP ضمن الشبكة الفرعية 192.168.1.0/24؛ يمكننا تخصيص الأمر بحجب الاتصالات القادمة من هذه الشبكة عبر المنفذ 22 دون غيره:

 
# iptables -A INPUT -s 192.168.1.0/24 --dport 22 -j ACCEPT

توجيه البيانات الواردة إلى وجهة أخرى

يمكن استخدام RHEL 7 فاصلا بين شبكتين بحيث يعيد توجيه البيانات بينهما؛ يجب في هذه الحالة تفعيل إعادة توجيه عناوين IP على النظام بتحرير الملف etc/sysctl.conf/ وتعيين القيمة 1 للتعليمة net.ipv4.ip_forward:

 
net.ipv4.ip_forward = 1

احفظ التعديلات ثم نفّذ الأمر لاعتمادها:

 
# sysctl -p /etc/sysctl.conf

سنفترض أن لدينا طابعة مربوطة بخادوم للطباعة يعمل على العنوان 192.168.0.10 ويُنصِت للطلبات القادمة عبر المنفذ 631. يمكن في هذه الحالة توجيه طلبات الطباعة القادمة إلى الجدار الناري على المنفذ 631 إلى خادوم الطباعة بالأمر التالي:

 
# iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 631 -j DNAT --to 192.168.0.10:631

ملحوظة: يجب تذكر أن Iptables يقرأ القواعد الأمنية بالتسلسل، لذا تأكد من القواعد المحدّدة بعد القواعد أعلاه لا تلغيها. نفس الشيء بالنسبة للسياسات المبدئية Default policies.

جدار FirewallD الناري

المناطق Zones هي أحد التغييرات التي أضافها جدار FirewallD؛ وهي درجات مختلفة من الموثوقيّة يمنحها مدير النظام للأجهزة والبيانات في الشبكة.

يُستخدم الأمر التالي لسرد لائحة بالمناطق النشطة في FirewallD:

 
# firewall-cmd --get-active-zones
public
        interfaces: enp0s3 enp0s9

يظهر في نتيجة الأمر أعلاه أن المنطقة public التي توجد بها الواجهتان enp0s3 وenp0s9، نشطة. نستخدم الأمر التالي للحصول على جميع المعلومات المتوفرة عن منطقة (public في المثال):

 
# firewall-cmd --zone=public --list-all

03_firewalld_zones.png

السماح للخدمات بالمرور عبر الجدار الناري

يتعرّف FirewallD تلقائيا على أسماء عدد من الخدمات، يمكن الحصول على لائحة بها بتنفيذ الأمر:

 
# firewall-cmd --get-services

تطلب الأوامر التالية من الجدار الناري السماح بمرور بيانات الخدمتين http (المنفذ 80) وhttps (المنفذ 443) وتفعيلها مع إقلاع النظام (permanent--):

# firewall-cmd --zone=MyZone --add-service=http
# firewall-cmd --zone=MyZone --permanent --add-service=http
# firewall-cmd --zone=MyZone --add-service=https
# firewall-cmd --zone=MyZone --permanent --add-service=https
# firewall-cmd --reload

إن لم تحدّد المنطقة عن طريق الخيار zone فستُسخدَم المنطقة المبدئيّة.

استخدم remove مكان add إن أردت حذف القاعدة.

توجيه البيانات

يجب التأكد أولا من أن إخفاء العناوين IP masquerading مفعَّل بالنسبة للمنطقة المطلوبة:

# firewall-cmd --zone=MyZone --query-masquerade
yes
# firewall-cmd --zone=public --query-masquerade
no

يظهر في نتيجة الأمر السابق أن إخفاء العناوين مفعَّل بالنسبة للمنطقة MyZone بينما هو معطَّل بالنسبة لـpublic.

ملحوظة: إخفاء العناوين IP masquerading هو آلية في لينكس تشبه ترجمة العناوين Network address translation, NAT في الموجّهات Routers. تمكّن هذه الآلية - مثلا - مجموعة من الأجهزة من الاتّصال بالإنترنت باستخدام نفس عنوان IP؛ حيث يتولى الجهاز الذي يُفعَّل عليه إخفاء العناوين التخاطب مع العالم الخارجي ثم يعيد توجيه الحزم في الشبكة الداخلية.

يمكن تفعيل إخفاء العناوين بالنسبة للمنطقة public على النحو التالي:

 
# firewall-cmd --zone=public --add-masquerade

يؤدي الأمر التالي نفس مهمة مثال التوجيه السابق باستخدام FirewallD بدلا من Iptables:

 
# firewall-cmd --zone=public --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10

لا تنس إعادة تحميل إعدادات الجدار الناري لاعتماد التعديلات:

 
# firewall-cmd --reload

يمكنك الحصول على أمثلة أخرى في درس إعداد خادوم وِب وخادوم FTP على Red Hat Enterprise Linux حيث شرحنا كيفية السماح للبيانات بالمرور عبر المنافذ التي يستخدمها عادة خادومُ الوِب وخادوم FTP وكيفية تغيير القاعدة في الجدار الناري عند تغيير المنفذ الذي تعمل عبره هذه الخدمات. تمكن أيضا الاستعانة بويكي FirewallD للمزيد من الأمثلة.

ترجمة - بتصرّف - لمقال RHCSA Series: Firewall Essentials and Network Traffic Control Using FirewallD and Iptables – Part 11 لصاحبه Gabriel Cánepa.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن