تحليق عميق في بنية Iptables و Netfilter

المقدمة

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

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

ما هي IPTables وNetfilter؟

لسنوات عديدة، كانت البرمجيات الجدار الناري الأكثر استخدامًا في نظام Linux تسمى iptables. في بعض التوزيعات، تم استبداله بأداة جديدة تسمى nftables، ولكن بناءً على iptables، لا يزال بشكل شائع استخدام بنية الأوامر. يعمل جدار الحماية iptables عن طريق التفاعل مع الخطافات لتصفية الحزم في نواة Linux. يُعرف هذه الخطافات في النواة بإطار netfilter.

سيؤدي كل حزمة تمر عبر طبقة الشبكة (الواردة أو الصادرة) إلى تنشيط هذه الخطافات، مما يسمح للبرامج بالتفاعل مع حركة المرور في نقاط رئيسية. تسجل وحدات النواة المرتبطة بـ iptables مع هذه الخطافات لضمان أن يتم تنظيم حركة المرور وفقًا لشروط قواعد جدار الحماية.

خطافات Netfilter

هناك خمسة خطافات netfilter يمكن للبرامج تسجيل الدخول بها. مع تقدم الحزم عبر الطبقة، ستقوم بتنشيط وحدات النواة التي قد سجلت مع هذه الخطافات. يعتمد تنشيط الخطافات التي قد تقوم بها الحزمة على ما إذا كانت الحزمة واردة أم صادرة، ووجهتها، وما إذا كانت الحزمة قد تم رفضها أو إسقاطها في نقطة سابقة.

تُمثل الخطافات التالية هذه النقاط المحددة جيدًا في طبقة الشبكة:

  • NF_IP_PRE_ROUTING: سيتم تشغيل هذا الخطاف بواسطة أي حركة مرور واردة قريبًا جدًا بعد دخولها إلى مكدس الشبكة. يتم معالجة هذا الخطاف قبل اتخاذ أي قرارات توجيهية بخصوص مكان إرسال الحزمة.
  • NF_IP_LOCAL_IN: يتم تشغيل هذا الخطاف بعد توجيه حزمة واردة إذا كانت الحزمة موجهة إلى النظام المحلي.
  • NF_IP_FORWARD: يتم تشغيل هذا الخطاف بعد توجيه حزمة واردة إذا كانت الحزمة معدة لإعادة توجيهها إلى مضيف آخر.
  • NF_IP_LOCAL_OUT: يتم تشغيل هذا الخطاف بواسطة أي حركة مرور صادرة تم إنشاؤها محليًا بمجرد وصولها إلى مكدس الشبكة.
  • NF_IP_POST_ROUTING: يتم تشغيل هذا الخطاف بواسطة أي حركة مرور صادرة أو معادة توجيه بعد توجيهها وقبل إرسالها عبر الأسلاك.

يجب على الوحدات النواة التي تحتاج إلى التسجيل في هذه الخطافات أيضًا توفير رقم الأولوية للمساعدة في تحديد ترتيب استدعائها عند تشغيل الخطاف. يوفر ذلك الوسيلة للوحدات المتعددة (أو النسخ المتعددة من نفس الوحدة) للاتصال بكل من الخطافات بترتيب محدد. سيتم استدعاء كل وحدة بدورها وستقوم بإرجاع قرار إلى إطار netfilter بعد معالجته يشير إلى ما يجب فعله بالحزمة.

جداول وسلاسل IPTables

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

Dentro de cada tabla iptables, las reglas se organizan aún más en “cadenas” separadas. Mientras que las tablas se definen por el objetivo general de las reglas que contienen, las cadenas incorporadas representan los ganchos de netfilter que las activan. Las cadenas determinan cuándo se evaluarán las reglas.

Los nombres de las cadenas incorporadas reflejan los nombres de los ganchos de netfilter con los que están asociadas:

  • PREROUTING: Activado por el gancho NF_IP_PRE_ROUTING.
  • INPUT: Activado por el gancho NF_IP_LOCAL_IN.
  • FORWARD: Activado por el gancho NF_IP_FORWARD.
  • OUTPUT: Activado por el gancho NF_IP_LOCAL_OUT.
  • POSTROUTING: Activado por el gancho NF_IP_POST_ROUTING.

Las cadenas permiten al administrador controlar dónde se evaluará una regla en la ruta de entrega de un paquete. Dado que cada tabla tiene varias cadenas, la influencia de una tabla puede ejercerse en varios puntos del procesamiento. Dado que ciertos tipos de decisiones solo tienen sentido en ciertos puntos en la pila de red, no todas las tablas tendrán una cadena registrada con cada gancho del kernel.

هناك فقط خمس خطافات لنواة netfilter، لذا يتم تسجيل الجداول من جداول متعددة في كل من الخطافات. على سبيل المثال، ثلاث جداول لديها خطافات PREROUTING. عندما تسجل هذه الخطافات في الخطاف المرتبط NF_IP_PRE_ROUTING، يحددون أولوية تحدد ترتيب استدعاء كل خطاف PREROUTING لكل جدول. يتم تقييم كل من القواعد داخل خطاف PREROUTING ذي الأولوية الأعلى تسلسليًا قبل التحرك إلى الخطاف PREROUTING التالي. سنلقي نظرة على الترتيب المحدد لكل خطاف في لحظة.

ما هي الجداول المتوفرة؟

لنلقي نظرة خلفية للحظة ونلقي نظرة على الجداول المختلفة التي يوفرها iptables. تمثل هذه مجموعات متميزة من القواعد، المنظمة حسب مجال الاهتمام، لتقييم الحزم.

جدول التصفية

جدول التصفية هو واحد من أكثر الجداول استخدامًا في iptables. يُستخدم جدول التصفية لاتخاذ قرارات حول ما إذا كان سيتم السماح للحزمة بالمتابعة إلى وجهتها المقصودة أم سيتم رفض طلبها. في لغة جدران الحماية، يُعرف هذا باسم “تصفية” الحزم. يوفر هذا الجدول معظم الوظائف التي يفكر فيها الناس عند مناقشة جدران الحماية.

جدول NAT

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

جدول Mangle

يُستخدم جدول mangle لتعديل رؤوس بروتوكول الإنترنت (IP) للحزمة بطرق مختلفة. على سبيل المثال، يمكنك ضبط قيمة TTL (الوقت للعيش) للحزمة، سواءً بتمديد أو تقصير عدد القفزات الشبكية الصالحة التي يمكن للحزمة أن تتحملها. يمكن تعديل رؤوس IP الأخرى بطرق مماثلة.

يمكن لهذا الجدول أيضًا وضع علامة “تحديد” داخل النواة على الحزمة للمعالجة اللاحقة في جداول أخرى وبواسطة أدوات شبكية أخرى. هذه العلامة لا تؤثر في الحزمة الفعلية، ولكنها تضيف العلامة إلى تمثيل النواة للحزمة.

جدول Raw

الجدار الناري iptables هو جدار ناري ذي حالة، مما يعني أن يتم تقييم الحزم بالنسبة إلى علاقتها بالحزم السابقة. تسمح ميزات تتبع الاتصال المبنية على إطار netfilter لـ iptables بعرض الحزم كجزء من اتصال متواصل أو جلسة بدلاً من تيار من الحزم المنفصلة غير المتصلة. عادةً ما يتم تطبيق منطق تتبع الاتصال قريبًا جدًا بعدما تصل الحزمة إلى واجهة الشبكة.

الجدول raw له وظيفة محددة للغاية. الغرض الوحيد منه هو توفير آلية لتحديد علامات الحزم للخروج من تتبع الاتصال.

جدول الأمان

يتم استخدام الجدول security لتعيين علامات السياق الأمني الداخلي لـ SELinux على الحزم، والتي ستؤثر على كيفية تعامل SELinux أو الأنظمة الأخرى التي يمكنها تفسير سياقات الأمان SELinux مع الحزم. يمكن تطبيق هذه العلامات على أساس لكل حزمة أو لكل اتصال.

العلاقات بين السلاسل والجداول

إذا كانت هناك ثلاثة جداول لها سلاسل PREROUTING، ففي أي ترتيب يتم تقييمها؟

الجدول التالي يشير إلى السلاسل المتاحة في كل جدول iptables عند القراءة من اليسار إلى اليمين. على سبيل المثال، يمكننا ملاحظة أن الجدول raw لديه كل من سلاسل PREROUTING و OUTPUT. عند القراءة من الأعلى إلى الأسفل، يعرض أيضًا ترتيب استدعاء كل سلسلة عندما يتم تنشيط الخطاف netfilter المرتبط بها.

A few things should be noted. In the representation below, the nat table has been split between DNAT operations (those that alter the destination address of a packet) and SNAT operations (those that alter the source address) in order to display their ordering more clearly. We have also include rows that represent points where routing decisions are made and where connection tracking is enabled in order to give a more holistic view of the processes taking place:

Tables↓/Chains→ PREROUTING INPUT FORWARD OUTPUT POSTROUTING
(routing decision)
raw
(connection tracking enabled)
mangle
nat (DNAT)
(routing decision)
filter
security
nat (SNAT)

عندما ينشط حزمة خطاف netfilter، سيتم معالجة السلاسل المرتبطة كما هو مدرج في الجدول أعلاه من الأعلى إلى الأسفل. الخطافات (الأعمدة) التي ستنشطها الحزمة تعتمد على ما إذا كانت الحزمة داخلية أم خارجية، وعلى القرارات التوجيهية التي تتخذ، وما إذا كانت الحزمة تمر بمعايير تصفية.

سيؤدي بعض الأحداث إلى تخطي سلسلة الجدول أثناء المعالجة. على سبيل المثال، سيتم تقييم الحزمة الأولى في اتصال فقط وفقًا لقواعد NAT. سيتم تطبيق أي قرارات nat متخذة للحزمة الأولى على جميع الحزم التالية في الاتصال دون تقييم إضافي. ستحصل الردود على الاتصالات التي تم تغييرها بشكل تلقائي على قواعد NAT العكسية المطبقة للتوجيه بشكل صحيح.

ترتيب عبور السلسلة

بافتراض أن الخادم يعرف كيفية توجيه حزمة وأن قواعد الجدار الناري تسمح بإرسالها، فإن التدفقات التالية تمثل المسارات التي ستتم مرورها في مواقف مختلفة:

  • الحزم الواردة المتجهة إلى النظام المحلي: PREROUTING -> INPUT
  • الحزم الواردة المتجهة إلى مضيف آخر: PREROUTING -> FORWARD -> POSTROUTING
  • الحزم التي تم إنشاؤها محليًا: OUTPUT -> POSTROUTING

إذا قمنا بدمج المعلومات أعلاه مع الترتيب الموضح في الجدول السابق، يمكننا أن نرى أن الحزمة الواردة المتجهة إلى النظام المحلي ستُقيم أولاً مقابل سلاسل PREROUTING في الجداول raw، mangle، و nat. بعد ذلك، ستعبر سلاسل INPUT في الجداول mangle، filter، security، و nat قبل أن يتم تسليمها أخيرًا إلى المأخذ المحلي.

قواعد IPTables

تُوضع القواعد ضمن سلسلة محددة من جدول محدد. وأثناء استدعاء كل سلسلة، سيتم التحقق من الحزمة المعنية مقابل كل قاعدة ضمن السلسلة بالترتيب. وتحتوي كل قاعدة على مكون مطابقة ومكون إجراء.

المطابقة

الجزء المطابق للقاعدة يحدد المعايير التي يجب أن تفي بها حزمة لتنفيذ الإجراء المرتبط به (أو “الهدف”).

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

الأهداف

A “target” refers to the actions that are triggered when a packet meets the matching criteria of a rule. Targets are generally divided into two categories:

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

تعتمد إمكانية كل هدف داخل القواعد على السياق. على سبيل المثال، قد يحدد نوع الجدول والسلسلة الأهداف المتاحة. يمكن أيضًا أن تؤثر الملحقات المُفعّلة في القاعدة والعبارات المطابقة على توافر الأهداف.

الانتقال إلى سلاسل المستخدم المعرفة

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

يمكن وضع القواعد في سلاسل المستخدم المعرفة بنفس الطريقة التي يمكن بها وضعها في السلاسل المدمجة. الفارق هو أنه يمكن الوصول إلى سلاسل المستخدم المعرفة فقط عند “القفز” إليها من قاعدة (لا يتم تسجيلها بخطاف netfilter بنفسها).

تعمل سلاسل المستخدم المعرفة كتمديدات للسلسلة التي استدعتها. على سبيل المثال، في سلسلة معرفة بالمستخدم، سيتم تمرير التقييم إلى السلسلة الداعية إليها إذا تم الوصول إلى نهاية قائمة القواعد أو إذا تم تنشيط هدف RETURN بواسطة قاعدة متطابقة. يمكن أيضًا أن يقفز التقييم إلى سلاسل مستخدمة إضافية.

تتيح هذه البنية تنظيمًا أفضل وتوفير الإطار الضروري لتفرع أكثر قوة.

IPTables وتتبع الاتصال

قدمنا ​​نظام تتبع الاتصال المنفذ على إطار الـ netfilter عندما نناقش الجدول raw ومعايير مطابقة حالة الاتصال. يسمح تتبع الاتصال لـ iptables باتخاذ قرارات حول الحزم المعروضة في سياق اتصال جارٍ. يوفر نظام تتبع الاتصال الوظائف التي يحتاجها iptables لأداء العمليات “ذات الحالة”.

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

يقوم النظام بفحص كل حزمة وفقًا لمجموعة من الاتصالات الموجودة. سيقوم بتحديث حالة الاتصال في متجره إذا لزم الأمر وسيضيف اتصالات جديدة إلى النظام عند الاقتضاء. تتجاوز الحزم التي تم وضع علامة عليها باستخدام الهدف NOTRACK في إحدى سلاسل raw روتينات تتبع الاتصال.

الحالات المتاحة

سيكون الاتصالات التي يتم تتبعها بواسطة نظام تتبع الاتصال في إحدى الحالات التالية:

  • NEW: عندما تصل حزمة ليست مرتبطة باتصال موجود بالفعل، ولكنها ليست غير صالحة كحزمة أولى، سيتم إضافة اتصال جديد إلى النظام بهذا التسمية. يحدث هذا على حدٍ سواء لبروتوكولات الاتصال المدركة مثل TCP وبروتوكولات بدون اتصال مثل UDP.
  • تأسست: يتم تغيير الاتصال من NEW إلى تأسست عندما يتلقى استجابة صالحة في الاتجاه المعاكس. بالنسبة لاتصالات TCP، يعني هذا SYN/ACK وبالنسبة لحركة مرور UDP و ICMP، يعني ذلك استجابة حيث يتم تبديل مصدر ووجهة الحزمة الأصلية.
  • متصلة: الحزم التي ليست جزءًا من اتصال موجود، ولكنها مرتبطة باتصال موجود بالفعل في النظام يتم وسمها متصلة. يمكن أن يعني هذا اتصالًا مساعدًا، كما هو الحال مع اتصالات نقل بيانات FTP، أو يمكن أن تكون استجابات ICMP لمحاولات الاتصال بواسطة بروتوكولات أخرى.
  • غير صالحة: يمكن تسمية الحزم بأنها غير صالحة إذا لم تكن مرتبطة باتصال موجود وليست مناسبة لفتح اتصال جديد، إذا لم يتمكن تحديد هويتها، أو إذا لم تكن قابلة للتوجيه بين أسباب أخرى.
  • UNTRACKED: يمكن تسمية الحزم بأنها UNTRACKED إذا تم استهدافها في سلسلة جدول raw لتجاوز التتبع.
  • SNAT: هذه حالة افتراضية يتم تعيينها عندما يتم تغيير عنوان المصدر بواسطة عمليات NAT. يستخدم نظام تتبع الاتصال هذا حتى يعرف كيفية تغيير عناوين المصدر مرة أخرى في حزم الرد.
  • DNAT: هذه حالة افتراضية يتم تعيينها عندما يتم تغيير عنوان الوجهة بواسطة عمليات NAT. يستخدم نظام تتبع الاتصال هذا حتى يعرف كيفية تغيير عنوان الوجهة مرة أخرى عند توجيه حزم الرد.

الولايات التي تُتبَع في نظام تتبع الاتصال تسمح للمسؤولين بصياغة قواعد تستهدف نقاطًا محددة في حياة الاتصال. يوفر هذا الوظيفية اللازمة لقواعد أكثر تفصيلًا وأمانًا.

الاستنتاج

الإطار الأساسي لتصفية حزم البيانات netfilter وجدار الحماية iptables هما أساس معظم حلول الجدار الناري على خوادم Linux. الخطافات النواة netfilter تكون قريبة بما يكفي من تكوين الشبكة لتوفير تحكمًا قويًا على الحزم أثناء معالجتها من قبل النظام. يستغل جدار الحماية iptables هذه القدرات لتوفير طريقة مرنة وقابلة للتوسيع للتواصل بمتطلبات السياسة إلى النواة. من خلال فهم كيفية تركيب هذه القطع معًا، يمكنك استخدامها بشكل أفضل للتحكم وتأمين بيئات الخادم الخاصة بك.

إذا كنت ترغب في معرفة المزيد حول كيفية اختيار سياسات iptables فعّالة، تحقق من هذا الدليل.

يمكن أن تساعدك هذه الأدلة في البدء في تنفيذ قواعد جدار الحماية iptables الخاصة بك:

Source:
https://www.digitalocean.com/community/tutorials/a-deep-dive-into-iptables-and-netfilter-architecture