كيفية إدراج قواعد جدار الحماية الخاصة بـ Iptables وحذفها

0 الأسهم
0
0
0
0

مقدمة

يُعدّ Iptables جدار حماية أساسيًا في أمان الشبكات لمعظم أنظمة Linux. في حين أن العديد من دروس Iptables تُعلّمك كيفية إنشاء قواعد جدار الحماية لتأمين خادمك، يُركّز هذا الدرس على جانب مختلف من إدارة جدار الحماية: إدراج القواعد وحذفها.

في هذا البرنامج التعليمي، سنغطي كيفية تنفيذ مهام iptables التالية:

  • قائمة القواعد
  • مسح عدادات الحزم والبايتات
  • حذف القواعد
  • مسح السلسلة (حذف جميع القواعد في السلسلة)
  • مسح جميع السلاسل والجداول، وإزالة جميع السلاسل، وقبول جميع حركة المرور
المتطلبات الأساسية

يفترض هذا البرنامج التعليمي أنك تستخدم خادم لينكس مُثبّت عليه أمر iptables، وأن المستخدم لديه صلاحيات sudo. إذا كنت بحاجة إلى مساعدة في هذا الإعداد الأولي، يُرجى مراجعة دليل الإعداد الأولي للخادم مع أوبونتو 20.04.

قواعد الإدراج حسب المواصفات

لنلقِ نظرة أولًا على كيفية عرض القواعد. هناك طريقتان لعرض قواعد iptables النشطة: في جدول أو كقائمة مواصفات قواعد. توفر كلتا الطريقتين نفس المعلومات تقريبًا بتنسيقات مختلفة.

لإدراج جميع قواعد iptables النشطة حسب المواصفات، قم بتشغيل أمر iptables مع الخيار -S:

sudo iptables -S
Output
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N ICMP
-N TCP
-N UDP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
...

كما ترى، الناتج مطابق تمامًا للأوامر المستخدمة لإنشائها، بدون أمر iptables السابق. إذا سبق لك استخدام iptables-persistent أو iptables save، فسيكون مشابهًا أيضًا لملفات تكوين قواعد iptables.

إدراج سلسلة محددة

إذا كنت تريد تقييد الإخراج إلى سلسلة محددة (INPUT، OUTPUT، TCP، وما إلى ذلك)، فيمكنك تحديد اسم السلسلة مباشرة بعد الخيار. على سبيل المثال، لإظهار كافة القواعد في سلسلة TCP، قم بتشغيل هذا الأمر:

sudo iptables -S TCP
Output
-N TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT

الآن دعونا نلقي نظرة على طريقة بديلة لعرض قواعد iptables النشطة، كجدول قواعد.

قائمة القواعد في الجداول

يُمكن أن يكون إدراج قواعد iptables في عرض جدول مفيدًا لمقارنة القواعد المختلفة. لعرض جميع قواعد iptables النشطة في جدول، شغّل أمر iptables مع الخيار -L:

sudo iptables -L

سيؤدي هذا إلى إنشاء جميع القواعد الحالية مرتبة حسب السلسلة.

إذا كنت تريد تقييد الإخراج إلى سلسلة محددة (INPUT، OUTPUT، TCP، وما إلى ذلك)، فيمكنك تحديد اسم السلسلة مباشرة بعد الخيار -L.

دعونا نلقي نظرة على مثال لسلسلة الإدخال:

sudo iptables -L INPUT
Output
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
UDP udp -- anywhere anywhere ctstate NEW
TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
ICMP icmp -- anywhere anywhere ctstate NEW
REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere reject-with tcp-reset
REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable

يُظهر السطر الأول من المخرجات اسم السلسلة (INPUT في هذه الحالة) متبوعًا بسياستها الافتراضية (DROP). يحتوي السطر التالي على رؤوس كل عمود في الجدول، متبوعة بقواعد السلسلة. لنراجع ما يُمثله كل رأس:

  • الهدف: إذا تطابقت حزمة مع قاعدة، يُحدد الهدف ما يجب فعله بها. على سبيل المثال، يمكن قبول حزمة، أو حذفها، أو تسجيلها، أو إرسالها إلى سلسلة أخرى لمقارنتها بقواعد أخرى.
  • prot: بروتوكول، مثل tcp، أو udp، أو icmp، أو جميعها
  • opt: نادرًا ما يتم استخدامه، يعرض هذا العمود خيارات IP
  • المصدر: عنوان IP المصدر أو الشبكة الفرعية لحركة المرور أو في أي مكان
  • الوجهة: عنوان IP الوجهة أو الشبكة الفرعية لحركة المرور أو في أي مكان

العمود الأخير، غير المُسمّى، يُظهر خيارات القاعدة. هذا أي جزء من القاعدة غير مُبيّن في الأعمدة السابقة. يمكن أن يشمل أي شيء، بدءًا من منفذي المصدر والوجهة، وصولًا إلى حالة اتصال الحزمة.

عرض عدد الطرود والحجم الإجمالي

عند سرد قواعد iptables، يُمكن عرض عدد الحزم وحجمها الإجمالي بالبايتات التي تُطابق كل قاعدة. يُفيد هذا عادةً في الحصول على فكرة عامة عن القواعد المُطابقة للحزم. للقيام بذلك، استخدم الخيارين -L و-v معًا.

على سبيل المثال، دعنا نلقي نظرة مرة أخرى على سلسلة INPUT مع الخيار -v:

sudo iptables -L INPUT -v
Output
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 DROP all -- any any anywhere anywhere ctstate INVALID
396 63275 UDP udp -- any any anywhere anywhere ctstate NEW
17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW
396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable
2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED

لاحظ أن القائمة تحتوي الآن على عمودين إضافيين، حزم و بايتات إنها.

الآن بعد أن تعرفت على كيفية إدراج قواعد جدار الحماية النشطة بطرق مختلفة، دعنا نرى كيف يمكنك إعادة تعيين عدادات الحزم والبايتات.

إعادة تعيين عدد الحزم والحجم الإجمالي

إذا كنت ترغب في مسح أو إعادة ضبط عدادات الحزم والبايتات لقواعدك، فاستخدم الخيار -Z. ستُعاد ضبطها أيضًا عند إعادة التشغيل. هذا مفيد لمعرفة ما إذا كان خادمك يستقبل بيانات جديدة تتوافق مع قواعدك الحالية.

لمسح العدادات لجميع السلاسل والقواعد، استخدم الخيار استخدمه بمفرده:

sudo iptables -Z

لمسح العدادات لجميع القواعد في سلسلة معينة، استخدم الخيار استخدم السلسلة وحددها. على سبيل المثال، لمسح عدادات السلسلة مدخل قم بتشغيل هذا الأمر:

sudo iptables -Z INPUT

إذا كنت ترغب في مسح العدادات لقاعدة معينة، فحدد اسم السلسلة ورقم القاعدة. على سبيل المثال، لمسح العدادات لأول قاعدة في السلسلة، مدخلقم بتشغيل هذا:

sudo iptables -Z INPUT 1

الآن بعد أن تعرفت على كيفية إعادة تعيين عدادات الحزم والبايتات في iptables، دعنا نلقي نظرة على طريقتين يمكن استخدامهما لإزالتها.

حذف القواعد بناءً على المواصفات

إحدى طرق إزالة قواعد iptables هي تحديدها. للقيام بذلك، يمكنك تشغيل أمر iptables باستخدام الخيار -D متبوعًا بتحديد القاعدة. إذا كنت ترغب في إزالة القواعد باستخدام هذه الطريقة، يمكنك استخدام ناتج قائمة القواعد، iptables -S، للمساعدة.

على سبيل المثال، إذا كنت تريد إزالة قاعدة تقوم بإسقاط حزم الإدخال غير الصالحة (-A INPUT -m conntrack –ctstate INVALID -j DROP)، فيمكنك تشغيل هذا الأمر:

sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

لاحظ أنه يجب حذف الخيار -A، الذي يستخدم للإشارة إلى موضع القاعدة في وقت إنشائها، هنا.

حذف القواعد بناءً على السلسلة والرقم

هناك طريقة أخرى لإزالة قواعد iptables وهي استخدام السلسلة ورقم السطر. لتحديد رقم سطر قاعدة، اسرد القواعد بتنسيق جدول وأضف خيار --line-numbers:

sudo iptables -L --line-numbers
Output
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
2 ACCEPT all -- anywhere anywhere
3 DROP all -- anywhere anywhere ctstate INVALID
4 UDP udp -- anywhere anywhere ctstate NEW
5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
6 ICMP icmp -- anywhere anywhere ctstate NEW
7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
8 REJECT tcp -- anywhere anywhere reject-with tcp-reset
9 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
10 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED

يؤدي هذا إلى إضافة رقم سطر إلى كل سطر قاعدة مرتبط بالرأس. رقم لقد تم إظهاره.

بمجرد تحديد القاعدة التي تريد إزالتها، دوّن رقم السلسلة وسطر القاعدة. ثم شغّل الأمر iptables -D متبوعًا برقم السلسلة والقاعدة.

على سبيل المثال، إذا أردنا إزالة قاعدة الإدخال التي تستبعد الحزم غير الصالحة، فسنجد أن القاعدة 3 موجودة في سلسلة الإدخال. لذا، نحتاج إلى تنفيذ هذا الأمر:

sudo iptables -D INPUT 3

الآن بعد أن تعرفت على كيفية حذف قواعد جدار الحماية، دعنا نلقي نظرة على كيفية مسح سلاسل القواعد.

وميض السلاسل

يوفر Iptables طريقةً لإزالة جميع القواعد في سلسلة، أو مسحها. في هذا القسم، سنتناول طرقًا متنوعة للقيام بذلك.

غسل السلسلة

لتنظيف سلسلة معينة، مما يؤدي إلى إزالة جميع القواعد الموجودة في السلسلة، يمكنك استخدام الخيار -F أو الخيار المكافئ -flush واسم السلسلة لتنظيفها.

على سبيل المثال، لحذف جميع القواعد في السلسلة مدخلقم بتشغيل هذا الأمر:

sudo iptables -F INPUT

وميض جميع السلاسل

لتنظيف جميع السلاسل، مما يؤدي إلى إزالة جميع قواعد جدار الحماية، يمكنك استخدام الخيار -F أو ما يعادله -flush وحده:

sudo iptables -F

قم بمسح جميع القواعد، وإزالة جميع السلاسل، وقبول جميع

يوضح لك هذا القسم كيفية مسح جميع قواعد جدار الحماية والجداول والسلاسل والسماح بجميع حركة المرور على الشبكة.

أولاً، اضبط السياسات الافتراضية لكل سلسلة داخلية على "قبول". الهدف الرئيسي من ذلك هو ضمان عدم حظر وصولك إلى خادمك عبر SSH:

sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

ثم قم بمسح جداول nat وmangle، ومسح جميع السلاسل (-F)، وإزالة جميع السلاسل غير الافتراضية (-X):

sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X

سيسمح جدار الحماية لديك الآن بجميع حركات مرور الشبكة. إذا أدرجت قواعدك، فستجد أنه لا توجد أي قواعد، ولم يتبقَّ سوى السلاسل الافتراضية الثلاث (الإدخال، والتوجيه، والإخراج).

نتيجة

بعد قراءة هذا الدليل، ستعرف كيفية إدراج قواعد جدار الحماية iptables وحذفها. تذكر أن أي تغييرات تُجرى على iptables عبر أمر iptables مؤقتة، ويجب حفظها للاستمرار عند إعادة تشغيل الخادم. ستجد هذا في قسم حفظ القواعد ضمن دليل قواعد وأوامر جدار الحماية الشائعة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

قد يعجبك أيضاً