ProductDocumentation

فصل 1. Linux iptables – مرجع الجيب

1.1. مقدمة
1.1.1. أمر نموذجي
1.1.2. مفاهيم
1.1.3. التطبيقات
1.1.4. ضبط إعدادات iptables
1.1.5. تعقب الاتصال
1.1.6. التعداد
1.1.7. ترجمة عناوين الشبكة (NAT)
1.1.8. ترجمة عناوين المصدر والتنكر
1.1.9. ترجمة عناوين الوجهة
1.1.10. التوكيل الشفاف
1.1.11. توزيع وموازنة الحِمل
1.1.12. الجدران النارية عديمة الحالة والجدران النارية المحددة الحالة
1.1.13. أدوات مساعدة
1.2. المرجع الأساسي لأوامر iptables
1.2.1. الحصول على المساعدة
1.2.2. الأوامر الفرعية في iptables
1.2.3. تطابقات وأهداف iptables
1.3. مرجع الأوامر المساعدة
1.3.1. iptables-restore
1.3.2. iptables-save

مقدمة

يحمل النظام الفرعي لمعالجة الحزم الشبكية بنواة لينكس اسم Netfilter، فيما يطلق اسم iptables على الأمر المستخدَم لضبطه. يغطي هذا الكتاب الإصدار 1.2.7a من مجموعة أدوات iptables لمساحة المستخدِم، والتي تستعمل إطار Netfilter في الإصدار 2.4 من نواة لينكس، كما يغطي الإصدار 2.6 بشكل شبه كلي. نظراً للعلاقة الوطيدة التي تجمع بين Netfilter وiptables، فإننا سنستخدم مصطلح "iptables" للإشارة لكليهما أو لكل واحد منهما على حدة.
تجمع بنية iptables قواعد معالجة الحزم الشبكية في جداول حسب الوظيفة المؤداة (تصفية الحزم، ترجمة عناوين الشبكة وعمليات أخرى تجرى على الحزم)، حيث يتوفر كل جدول على سلاسل (متتاليات) من قواعد المعالجة. تتشكل القواعد من تطابقات (لتحديد الحزم التي ستطبق عليها القاعدة) وأهداف (لتحديد كيفية التعامل مع الحزمات المتطابقة).
يعمل iptables على مستوى الطبقة الثالثة في نموذج OSI (الشبكة). أما الطبقة الثانية من نموذج OSI (ربط البيانات)، فإنها تستخدم تقنيات أخرى مثل ‏ebtables (جداول جسر إيثرنت – Ethernet Bridge Tables)‏. للحصول على المزيد من المعلومات بهذا الشأن، يرجى الاطلاع على الرابط http://ebtables.sourceforge.net/.

أمر نموذجي

فيما يلي مثال لأمر من أوامر iptables:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.3:8080
الجدول 1.1, “تفسير مفصل لوسائط الأمر النموذجي في iptables” يوضح معنى هذا الأمر النموذجي في iptables.
الجدول 1.1. تفسير مفصل لوسائط الأمر النموذجي في iptables
المكوّن
الوصف
‎-t nat
اعمل في جدول nat...
‎-A PREROUTING
... مُلحِقاً القاعدة التالية بسلسلة التوجيه المسبق (PREROUTING) الخاصة بها.
‎-i eth1
عالج الحزم الوافدة على الواجهة الشبكية eth1...
‎-p tcp
... التي تستخدم بروتوكول tcp (‏TCP/IP)
‎--dport 80
... والمخصصة للمنفذ المحلي80.
‎-j DNAT
تخط إلى الهدف DNAT...
‎--to-destination
192.168.1.3:8080
... وغير عنوان الوجهة إلى 192.168.1.3 ومنفذ الوجهة إلى 8080.

مفاهيم

يحدد iptables خمس "نقاط إرساء" (Hooks) في نظام معالجة الحزم بالنواة: ‏PREROUTING، ‏INPUT، ‏FORWARD، ‏POSTROUTING و‏OUTPUT.‏ تُلحَق السلاسل المدمجة بنقاط الإرساء، حيث يمكنك إضافة مجموعة من القواعد لكل نقطة إرساء. بينما تسمح كل قاعدة بتعديل دفق الحزم أو مراقبته.

ملاحظة

غالباً ما تستعمل عبارة "سلسلة التوجيه المسبق (PREROUTING) لجدول NAT"، مما يولد الانطباع بأن السلاسل تنتمي للجداول. لكن السلاسل والجداول ليست مرتبطة ببعضها البعض إلا بشكل جزئي، ولا أحد منها "ينتمي" في الحقيقة للآخر. تشكل السلاسل نقاط الإرساء في دفق الحزم، بينما تمثل الجداول أنماط المعالجة التي يمكن تطبيقها. الشكل 1.1, “دفق الحزم الشبكية ونقاط الإرساء لترجمة عناوين الشبكة” إلى الشكل 1.3, “دفق الحزم الشبكية ونقاط الإرساء للتبديل” يوضح كافة التراكيب الجائزة، والترتيب الذي تتواجد فيه عند تدفق الحزم عبر النظام.
الشكل 1.1, “دفق الحزم الشبكية ونقاط الإرساء لترجمة عناوين الشبكة” يوضح كيفية عبور الحزم للنظام عند ترجمة عناوين الشبكة. هذه السلاسل هي السلاسل الخاصة بجدول nat.
دفق الحزم الشبكية ونقاط الإرساء لترجمة عناوين الشبكة
الشكل 1.1. دفق الحزم الشبكية ونقاط الإرساء لترجمة عناوين الشبكة

الشكل 1.2, “دفق الحزم الشبكية ونقاط الإرساء للتصفية” يوضح كيفية عبور الحزم للنظام عند تصفية الحزم. هذه السلاسل هي السلاسل الخاصة بجدول filter.
دفق الحزم الشبكية ونقاط الإرساء للتصفية
الشكل 1.2. دفق الحزم الشبكية ونقاط الإرساء للتصفية

الشكل 1.3, “دفق الحزم الشبكية ونقاط الإرساء للتبديل” يوضح كيفية عبور الحزم للنظام عند تبديل الحزم. هذه السلاسل هي السلاسل الخاصة بجدول mangle.
دفق الحزم الشبكية ونقاط الإرساء للتبديل
الشكل 1.3. دفق الحزم الشبكية ونقاط الإرساء للتبديل

الجدول 1.2, “نقاط الإرساء” يبين نقاط الإرساء الخمس ويصف النقاط التي يمكن عندها معالجة دفق الحزم.
الجدول 1.2. نقاط الإرساء
نقطة الإرساء
تسمح لك بمعالجة الحزم...
FORWARD
... التي تمر عبر بوابة، داخلةً في إحدى الواجهات وخارجةَ مباشرة عبر أخرى.
INPUT
... مباشرة قبل تسليمها للعملية المحلية.
OUTPUT
... مباشرة بعد توليدها من قِبَل عملية محلية.
POSTROUTING
... مباشرة قبل مغادرتها للواجهة الشبكية.
PREROUTING
... فور وصولها من واجهة شبكية (بعد حذف أي حزم ناتجة عن تواجد الواجهة في النمط المختلط [promiscuous mode]، وبعد التحقق من المجاميع الاختبارية).

ملاحظة

لإشباع فضولك، فإن نقاط الإرساء مُعرَّفَة في ملف رأس النواة ‎/usr/include/linux/netfilter_ipv4.h بأسماء مثل NF_IP_FORWARD، ‏{IN,OUT}‏NF_IP_LOCAL_‎‏‎‏ و‏NF_IP_{PRE,POST}_ROUTING.‏
اختيارك للسلسلة يعتمد على التوقيت الذي تريد فيه تطبيق القواعد خلال دورة حياة الحزمة. فمثلاً، إذا كنت تريد تصفية الحزم الخارجة، فمن الأفضل أن تقوم بذلك في سلسلة الخرج (OUTPUT) لأن سلسلة التوجيه اللاحق (POSTROUTING) غير مرتبطة بجدول التصفية filter.

الجداول

يتضمن iptables ثلاثة جداول: filter (تصفية)،mangle (تبديل)وnat (ترجمة العناوين). كل جدول مهيئ مسبقاً بسلاسل ملائمة لواحدة أو أكثر من نقاط الإرساء الموصوفة في الجدول 1.2, “نقاط الإرساء” والمعروضة في الشكل 1.1, “دفق الحزم الشبكية ونقاط الإرساء لترجمة عناوين الشبكة” إلى الشكل 1.3, “دفق الحزم الشبكية ونقاط الإرساء للتبديل”. الجداول الثلاثة المدمجة موصوفة في الجدول 1.3, “الجداول المُدمَجة”.
الجدول 1.3. الجداول المُدمَجة
الجدول
الوصف
nat
يُستَخدَمُ مع تعقب الاتصال لإعادة توجيه الاتصالات بغرض ترجمة عناوين الشبكة؛ يرتكز عادة على عناوين المصدر أو الهدف. سلاسله المدمجة هي كالتالي: OUTPUT، ‏POSTROUTING و‏PREROUTING.‏
filter (تصفية)
يستخدم لضبط السياسات المتعلقة بنوع الحركة المسموح لها بالدخول إلى الحاسوب والخروج منه أو المرور عبره. إذا لم تذكر أي جدول آخر بشكل صريح، فإن iptables سيستخدم السلاسل المتواجدة في هذا الجدول بشكل تلقائي. السلاسل المدمجة في هذا الجدول هي كالتالي: FORWARD، ‏INPUT و‏OUTPUT.‏
mangle (تبديل)
يُستَخدم للتعديل المتخصص للحزم، مثل حذف بعض خيارات بروتوكول الإنترنت (كما هو الشأن بالنسبة لامتداد الهدف IPV4OPTSSTRIP). السلاسل المدمجة في هذا الجدول هي كالتالي: FORWARD، ‏INPUT، ‏OUTPUT، ‏POSTROUTING و‏PREROUTING.‏

ملاحظة

في حالة عدم تحديد أي جدول خاص في أوامر iptables، فإن الجدول الافتراضي سيكون هو جدول filter.

السلاسل

يتوفر كل جدول افتراضياً على سلاسل خالية في البداية، لكافة نقاط الإرساء أو لبعضها فقط. انظر الجدول 1.2, “نقاط الإرساء” للاطلاع على قائمة نقاط الإرساء والجدول 1.3, “الجداول المُدمَجة” للاطلاع على السلاسل المدمجة في كل جدول.
بالإضافة إلى ذلك، فإنك تستطيع إنشاء سلاسلك الخاصة لتنظيم القواعد.
‎تُحدِّد سياسة كل سلسلة مصير الحزم التي تبلغ نهاية السلسلة دون قصدِ هدفٍ معيّن. وحدهما الهدفان المدمجان (انظر الجدول 1.8, “الأهداف المدمجة”) ACCEPT [اقبل] وDROP [احذف] قابلان للاستعمال كسياسة للسلاسل المدمجة، والهدف الافتراضي هو ACCEPT. تتوفر كل السلاسل المحددة من قبل المستخدم على سياسة ضمنية غير قابلة للتغيير من نوع RETURN [رجوع].
إذا كنت تريد وضع سياسة أكثر تعقيداً لسلسلة مُدمجة، أو استعمال سياسة أخرى غير سياسة RETURN لإحدى السلاسل المُحدَّدة من قبل المستخدم، يمكنك إضافة قاعدة تطبق على كافة الحزم لنهاية السلسلة مع الهدف الذي تريده. يمكنك استخدام سياسة الحذف (DROP) للحالات التي قد ترتكب فيها خطأ في قاعدتك "العامة"، أو لتصفية حركة المرور عند إجراء أي تعديلات على القاعدة المذكورة (من خلال إلغائها وإضافتها من جديد مع التغييرات الحديثة).

دفق الحزم

تعبر الحزم السلاسل وتُقدَّمُ لقواعد كل سلسلة حسب ترتيب وصولها. في حالة عدم توافق الحزمة مع معايير قاعدة معينة، فإنها تنتقل إلى القاعدة الموالية في السلسلة. إذا لم تتوافق الحزمة مع أي قاعدة رغم بلوغها لآخر قاعدة في السلسلة، فإنها ستعالج وفق السياسة المطبقة (أي الهدف الافتراضي للسلسلة بشكل عام؛ انظر الفقرة السابقة قسم 1.1.2.2, “السلاسل” للحصول على المزيد من المعلومات).
الجدول 1.4. انسياب الحزمة من واجهة شبكية إلى الأخرى (تمرير – forwarding)
الجدول
السلسلة
mangle
PREROUTING – توجيه مسبق
nat
PREROUTING – توجيه مسبق
mangle
FORWARD – تمرير
filter
FORWARD – تمرير
mangle
POSTROUTING – توجيه لاحق
nat
POSTROUTING – توجيه لاحق

الجدول 1.5. انسياب الحزمة من واجهة شبكية إلى عملية محلية (تمرير – forwarding)
الجدول
السلسلة
mangle
PREROUTING – توجيه مسبق
nat
PREROUTING – توجيه مسبق
mangle
INPUT – دخل
filter
INPUT – دخل

الجدول 1.6. انسياب الحزمة من عملية محلية إلى واجهة شبكية (خرج – output)
الجدول
السلسلة
mangle
OUTPUT – خرج
nat
OUTPUT – خرج
filter
OUTPUT – خرج
mangle
POSTROUTING – توجيه لاحق
nat
POSTROUTING – توجيه لاحق

الجدول 1.7. انسياب الحزمة من عملية محلية إلى عملية محلية أخرى (local)
الجدول
السلسلة
mangle
OUTPUT – خرج
nat
OUTPUT – خرج
filter
OUTPUT – خرج
filter
INPUT – دخل
mangle
INPUT – دخل

القواعد

تتضمن كل قاعدة من قواعد iptables واحداً أو أكثر من معايير التطابق التي تحدد الحزم الشبكية الخاضعة للمعالجة (لتطبيق قاعدة ما على الحزمة، يجب أن تتحقق كافة معايير التطابق)، كما تشمل مواصفات الهدف التي تنظم كيفية معالجة الحزم.
يتوفر النظام على عدادات حزم وبايتات لكل قاعدة. في كل مرة تصل فيها حزمة ما لقاعدة معينة وتتطابق مع معايير هذه القاعدة، ترتفع قيمة عداد الحزم بدرجة واحدة، بينما يرتفع عداد البايتات وفق حجم الحزمة.
يشكل الجزءان المخصصان للتطابق والهدف في القاعدة عنصرين اختياريين. في حالة غياب معايير التطابق، فإن المعالجة ستشمل كافة الحزم. إذا لم يُحدَّد أي هدف، فإن الحزم لن تخضع لأي معالجة (في هذه الحالة، ستعامل الحزم كما لو لم تكن هناك أي قاعدة – مع اسثناء وحيد يتمثل في تحديث عدادات الحزم والبايتات). يمكنك إضافة قاعدة عديمة المعايير إلى سلسلة التمرير (FORWARD) في جدول filter بواسطة الأمر الآتي:
iptables -t filter -A FORWARD

التطابقات

هناك العديد من التطابقات المتوفرة للاستخدام مع iptables، لكن بعضها لا يتوافق إلا مع الأنوية المجهزة ببعض الميزات الإضافية. يمكن تطبيق قواعد التطابق العامة لبروتوكول الإنترنت (مثل البروتوكول وعناوين المصدر والوجهة) على أي حزمة IP (رغم أن تطابقات IP متوفرة دون الإحالة على أي امتداد تطابقي، انظر الفقرة قسم 1.2.3.17, “تطابقات بروتوكول الإنترنت (بروتوكول الإنترنت Ipv4)”).
بالإضافة إلى التطابقات العامة، فإن iptables يتضمن العديد من التطابقات المتخصصة المتوفرة عبر الامتدادات المُحملة ديناميكياً (استخدم الخيار ‎‎‏‎-m أو --match لإبلاغ ‏iptables بأنك تريد استخدام إحدى هذه الامتدادات).
هناك امتداد تطابقي يسمح بإدارة الطبقات الشبكية المتواجدة أسفل طبقة بروتوكول الإنترنت. ترتكز معايير تطابق امتداد mac على عناوين MAC إيثرنت.

الأهداف

تُستَخدَمُ الأهداف لتحديد الإجراء الذي يجب اتخاذه عندما تنطبق قاعدة معينة على الحزمة، كما تستخدم لتحديد سياسات السلاسل. يتوفر iptables على أربعة أهداف مدمجة، بينما توفر الوحدات الامتدادية أهدافاً أخرى. الجدول 1.8, “الأهداف المدمجة” يقدم وصفاً للأهداف المدمجة.
الجدول 1.8. الأهداف المدمجة
الهدف
الوصف
ACCEPT
DROP
أوقف معالجة الحزمة بشكل كامل. لا تطبق أي قواعد ولا سلاسل أو جداول أخرى. استخدم امتداد الهدف REJECT إذا كنت تريد توجيه رد للمُرسِل.
QUEUE
أرسل الحزمة إلى مساحة المستخدم (أي الكود الذي لا يتواجد في النواة). للحصول على المزيد من المعلومات بهذا الشأن، راجع صفحة دليل libipq.
RETURN
انطلاقاً من القاعدة المتواجدة في سلسلةٍ مُحدَّدة من قبل المستخدم، أوقف معالجة هذه السلسلة، ثم استأنف اجتياز السلسلة المُنادِيَة عند القاعدة الموالية لتلك التي كانت هذه السلسلة هدفاً لها. انطلاقاً من القاعدة المتواجدة في سلسلة مُحدَّدة من قبل المستخدم، أوقف معالجة الحزمة وطبق سياسة السلسلة عليها. انظر الفقرة السابقة قسم 1.1.2.2, “السلاسل” للحصول على المزيد من المعلومات حول سياسات السلاسل.

التطبيقات

توفر القائمة التالية نظرة عامة عن تقنيات معالجة الحزم وبعض تطبيقاتها:
تصفية الحزم
تشكل تصفية الحزم أبسط أنماط معالجة الحزم الشبكية. تقوم التصفية على فحص الحزم بعدة نقاط خلال عبورها للكود الشبكي للنواة واتخاذ قرارات بشأن كيفية معالجتها (قبول الحزم وتمريرها لمرحلة المعالجة الموالية، حذفها كلياً بدون أي رد، رفضها مع ردّ معين، وما إلى ذلك من العمليات الأخرى).
التعداد
يقوم التعداد على استخدام عدادات بايتات و/أو حزم مع معايير تطابق الحزم لمراقبة حركة الشبكة.
تعقب الاتصال
يسمح تعقب الاتصال بالحصول على معلومات إضافية تتطابق مع الحزم بشكل يستحيل تحقيقه بالطرق الأخرى. فعلى سبيل المثال، فإن جلسات بروتوكول نقل الملفات (FTP) تتضمن اتصالين منفصلين عن بعضهما البعض: أحدهما للتحكم والآخر لنقل البيانات. يسمح تعقب اتصالات بروتوكول FTP بمراقبة اتصال التحكم واستخدام المعارف المتوفرة عن البروتوكول لاستخلاص المعلومات اللازمة من تفاعلات التحكم، حتى يتم التعرف على اتصالات البيانات عند إنشائها. تُستخدَمُ معلوماتُ التعقب هذه فيما بعد من قبل قواعد معالجة الحزم.
تبديل الحزم
يقوم تبديل الحزم على إدخال تغييرات على حقول رؤوس الحزم (مثل عناوين الشبكة وأرقام المنافذ) أو الحمولات النافعة.
NAT (ترجمة عناوين الشبكة)
تشكل ترجمة عناوين الشبكة نوعاً من أنواع تبديل الحزم، حيث تتم كتابة بيانات جديدة فوق عناوين الوجهة و/أو المصدر و/أو أرقام المنافذ. وتُستَخدم معلومات التعقب لتبديل الحزم ذات الصلة بطرق خاصة. يحيل مصطلح ترجمة عناوين المصدر (Source NAT،‏ S-NAT أو SNAT) على عمليات ترجمة عناوين الشبكة التي يتم خلالها تعديل عنوان و/أو منفذ المصدر، بينما يحيل مصطلح ترجمة عناوين الوجهة (Destination NAT،‏ D-NAT أو DNAT) على عمليات ترجمة عناوين الشبكة التي يتم خلالها تعديل عنوان و/أو منفذ الوجهة.
التنكر
يشكل التنكر نوعاً خاصاً من أنواع ترجمة عناوين المصدر، حيث يقوم الحاسوب بإعادة كتابة الحزم ليعطي الانطباع بأنها قادمة منه. يُحدَّد عنوان بروتوكول الإنترنت (IP) الخاص بالحاسوب بشكل تلقائي. وفي حالة تغيره، فإن الاتصالات السابقة تحذف بشكل ملائم. يستخدم التنكر عادة لتقاسم الاتصال بالإنترنت بين عدة حواسيب بواسطة عنوان IP ديناميكي.
تمرير المنافذ
يعد تمرير المنافذ نوعاً من أنواع ترجمة عناوين الوجهة. في هذه التقنية، يلعب حاسوب معين (كالجدار الناري مثلاً) دور الوكيل لحاسوب واحد أو لحواسيب متعددة. يقبل الجدار الناري الحزم الموجهة إليه من قبل الشبكة الخارجية، لكنه يعدلها لتظهر كما لو كانت موجهة لحواسيب أخرى في الشبكة الداخلية قبل إرسالها للوجهة الجديدة. ومن جهة أخرى، فإن حزم الرد الوافدة من الحواسيب الداخلية تعدل لتظهر كما لو كانت آتية من الجدار الناري، وذلك قبل إرسالها للحاسوب الخارجي الملائم.
يُستخدم تمرير المنافذ عادة لتوفير خدمات شبكية عامة (مثل خوادم الويب أو البريد الإلكتروني) من قبل حواسيب أخرى غير الجدار الناري، دون الحاجة لأكثر من عنوان IP عمومي واحد. وبذلك، فإن العالم الخارجي يعتقد بأن الخدمات مُقدَّمة من قبل الخادم الوكيل، بينما تبدو الطلبات للخادم الحقيقي كما لو كانت صادرة عن الخادم الوكيل.
موازنة الحِمل
تقوم موازنة الحِمل على توزيع الاتصالات على مجموعة من الخوادم لتحقيق أداء كلي أفضل. يمكنك موازنة الحمل ببساطة من خلال ضبط تمرير المنافذ ليتم بذلك اختيار عنوان الوجهة ضمن قائمة من الوجهات الممكنة وفق خوارزمية راوند روبن.

ضبط إعدادات iptables

تختلف إجراءات ضبط iptables باختلاف التوزيعة المستعملة. تقدم هذه الفقرة معلومات عامة، كما توفر معلومات خاصة بتوزيعة ريدهات (Red Hat).

القواعد المستديمة

في الإصدارات الحديثة من أنظمة ريدهات، سوف تجد قواعد iptables في ‎/etc/sysconfig/iptables. يمكنك تحديد مستويات التشغيل (Run Levels) التي تم فيها تفعيل iptables بواسطة الأمر:
chkconfig --list iptables
لتفعيل iptables بمستويات التشغيل 3، 4 و5، استخدم الأمر:
chkconfig --levels 345 iptables on
يمكنك تشغيل iptables يدوياً بواسطة الأمر:
service iptables start
كما يمكنك إيقافه بواسطة:
service iptables stop

ملفات أخرى لضبط الإعدادات

من الممكن مراقبة السلوك الشبكي للنواة وiptables والتحكم به من خلال عدد من الملفات المستعارة (pseudofiles) في نظام الملفات‎/proc. الجدول 1.9, “ضبط إعدادات iptables وملفات المعلومات” يتضمن سرداً لأبرز هذه الملفات.
جدول 1.9. ضبط إعدادات iptables وملفات المعلومات
المسار
الغرض
‎/etc/sysctl.conf
يتضمن إعدادات التهيئة التي تُطبق خلال الإقلاع بدليل ‎/proc/sys. فعلى سبيل المثال، يمكنك ضبط ‎/proc/sys/net/ipv4/ip_forward على القيمة 1 خلال الإقلاع عبر إضافة الإدخال net.ipv4.ip_forward = 1 إلى هذا الملف.
‎/proc/net/ip_conntrack
ينسخ محتوى بِنَى تعقب الاتصال عند قراءتك لها.
‎/proc/sys/net/ipv4/ip_conntrack_max
يتحكم في حجم جدول تعقب الاتصال بالنواة. تحسب القيمة الافتراضية بالارتكاز على كمية ذاكرة الوصول العشوائي في حاسوبك. قد تحتاج للرفع من قدر هذه الذاكرة في حالة توصلك بأخطاء من نوع "ip_conntrack: table full, dropping packet" في ملفات السجلات. انظر أيضاً الإدخال ‎/etc/sysctl.conf في هذا الجدول.
‎/proc/sys/net/ipv4/ip_forward
يجب عليك ضبط هذه القيمة على 1 إذا أردت أن يتصرف المضيف كبوابة (لتمرير الحزم عبر الشبكات المتصلة بواجهاته البينية). انظر أيضاً الإدخال ‎/etc/sysctl.conf في هذا الجدول.

تصريف نواتك الخاصة

في أنظمة "ريدهات"، يمكنك تحديد النواة المستخدمة من خلال الاطلاع على خرج الأمر uname -r، والذي سيصدر رسالة كهذه:
‎2.4.20–20.9
يمكنك الحصول على المعلومات المتعلقة بإصدار النواة ونوع الحاسوب من خلال الاطلاع على خرج الأمر uname -a (انظر صفحة دليل uname لمعرفة المزيد عن هذا الأمر). استخدام هذه المعلومات سيمكنك من تحديد ملف الإعدادات الأكثر ملاءمة لإنشاء النواة الجديدة في ملف كالآتي (سوف نستخدم i636 في هذا المثال): ‎/usr/src/linux-2.4.20-20.9/configs/kernel-2.4.20-i686.config.
تتواجد إعدادات ضبط iptables في إدخالات تحمل تسميات مثل *_‏‎CONFIG‎_IP_‎NF‎‏‏‎.
يجب اختيار خيارات الضبط التالية على الأقل:
  • CONFIG_PACKET (اتصال مباشر مع الواجهات الشبكية)
  • CONFIG_NETFILTER (دعم النواة الأساسي المشترط من قبل iptables)
  • CONFIG_IP_NF_CONNTRACK (ضروري لترجمة عناوين الشبكة والتنكر)
  • CONFIG_IP_NF_FILTER (لإضافة جدول filter)
  • CONFIG_IP_NF_IPTABLES (الدعم الأساسي لأداة iptables الخاصة بمساحة المستخدم)
  • CONFIG_IP_NF_MANGLE (لإضافة جدول mangle)
  • CONFIG_IP_NF_NAT (لإضافة جدول nat)

تنبيه

قد تغريك فكرة تفعيل الإعداد CONFIG_NET_FASTROUTE، ما دام التوجيه السريع يبدو خياراً جذاباً للجدران النارية. لا تقم بذلك، لأن التوجيه السريع يتخطى نقاط إرساء Netfilter.
توفر خيارات الضبط التالية طبقات تَوافُقٍ ملائمة لتقنيات الجدران النارية القديمة:
  • CONFIG_IP_NF_COMPAT_IPCHAINS
  • CONFIG_IP_NF_COMPAT_IPFWADM

ملاحظة

يتضمن مستودع "patch-o-matic" إصلاحات نواتية لدمج مزايا جديدة بنظام Netfilter. يمكنك الحصول على المزيد من المعلومات عن هذا المستودع من خلال زيارة الموقع الرسمي لنظام Netfilter على الرابط http://www.netfilter.org/، ومن خلال قراءة دليل Netfilter Extensions HOWTO على الرابط الآتي http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO.html. يوزع patch-o-matic بشكل مستقل عن iptables، حيث يمكنك تحميله من الموقع التالي: ftp://ftp.netfilter.org/pub/patch-o-matic/‎.
يتعين عليك توخي الحذر الشديد عند تصحيح نواتك، خاصة إذا كنت ستستخدم امتدادات Netfilter تجريبية. أحياناً، لن يتسنى لك تصريف بعض التركيبات، فيما سيستحيل تشغيل التركيبات المُصرَّفة في أحيان أخرى. لا تحاول أبداً تجريب الأنوية المنشأة حديثاً في الأنظمة الأساسية للعمل.

تعقب الاتصال

يربط iptables الحزم بالاتصالات المنطقية التي تنتمي لها (بل وقد يعتبر أن بعض أنماط تَواصُل UDP تنطوي على اتصالاتٍ بشكل ضمني، رغم كون UDP بروتوكولاً بدون اتصال). لإنشاء هذه الروابط، يتعقب iptables سيرورة الاتصالات خلال دورة حياتها، وذلك بالارتكاز على معلومات التعقب التي يوفرها الامتداد التطابقي conntrack.
رغم كون النموذج الأساسي لاتصال TCP أكثر تعقيداً، فإن النظام المنطقي لتعقب الاتصال يخصص إحدى الحالات المذكورة في الجدول 1.10, “حالات تعقب الاتصال” لكل اتصال عند أي لحظة من الزمن.
جدول 1.10. حالات تعقب الاتصال
الحالة
الوصف
ESTABLISHED
الاتصال رأى سلفاً حُزماً تمر بالاتجاهين. انظر أيضاً الحالة SEEN_REPLY.
INVALID
الحزمة لا تنتمي لأي اتصال من الاتصالات المتعقبة.
NEW
الحزمة بصدد إطلاق اتصال جديد أو تنتمي لاتصال لم ير بعد أي حزم تمر بالاتجاهين.
RELATED
الحزمة بصدد إطلاق اتصال جديد، لكن الاتصال الجديد مرتبط باتصال قائم (مثل اتصال نقل البيانات ببروتوكول FTP).

يخزن النظام المنطقي لتعقب الاتصال ثلاثة بتّات للمعلومات المرتبطة بحالة كل اتصال. الجدول 1.11, “حالات تعقب الاتصال” يتضمن قائمة رموز الحالة وفق تسميتها في امتداد conntrack التطابقي (الخيار ‎--ctstatus).
الجدول 1.11. حالات تعقب الاتصال
الحالة
الوصف
ASSURED
بالنسبة لاتصالات TCP، فإن هذه الحالة تشير إلى اكتمال ضبط إعدادات اتصال TCP. أما بالنسبة لاتصالات UDP، فإنها تشير إلى وجود تشابه مع دفق UDP بالنسبة للنواة.
EXPECTED
للإشارة إلى أن الاتصال كان متوقعاً.
SEEN_REPLY
للإشارة إلى تنقل الحزم عبر الاتجاهين. انظر أيضاً الحالة ESTABLISHED

يسمح النظام المنطقي لتعقب الاتصال في iptables باستخدام وحدات إضافية لتحديد الاتصالات الجديدة المرتبطة بالاتصالات السابقة. عليك باستخدام هذه الوحدات إذا كنت تريد تشغيل بروتوكولات الاتصال المتعدد عبر بوابتك/جدارك الناري. الجدول 1.12, “الوحدات المساعدة لتعقب الاتصال” يبين الوحدات المساعدة الرئيسية لتعقب الاتصال.
لاستخدام هذه الوحدات المساعدة، يجب عليك أن تنفذ الأمر modprobe لتثبيت وحدة النواة الملائمة. انظر أيضاً امتداد المساعدة التطابقي helper.
الجدول 1.12. الوحدات المساعدة لتعقب الاتصال
Helper
البروتوكول
ip_conntrack_amanda
بروتوكول Amanda للنسخ الاحتياطي (يتطلب خيار إعداد النواة CONFIG_IP_NF_AMANDA)
ip_conntrack_ftp
بروتوكول FTP لنقل الملفات (يتطلب خيار إعداد النواة CONFIG_IP_NF_FTP)
ip_conntrack_irc
المحادثة المنقولة بالإنترنت (تتطلب خيار إعداد النواة CONFIG_IP_NF_IRC)
ip_conntrack_tftp
بروتوكول نقل الملفات المبسط (يتطلب خيار إعداد النواة CONFIG_IP_NF_TFTP).

التعداد

تقوم النواة بتعداد الحزم والبايتات لكل قاعدة بشكل تلقائي. من الممكن استخدام هذه المعلومات لإنجاز الإحصاءات الخاصة باستخدام الشبكة.
إذا قمت مثلاً بإضافة القواعد الأربع الآتية لحاسوب يعمل كبوابة لشبكة الإنترنت (مع افتراض توفر واجهتين شبكيتين: eth0 للشبكة الداخلية وeth1 للاتصال بالإنترنت)، فإن النواة ستراقب عدد الحزم والبايتات المتبادلة مع العالم الخارجي.
iptables -A FORWARD -i eth1 iptables -A FORWARD -o eth1 iptables -A INPUT -i eth1 iptables -A OUTPUT -o eth1
بعد تنفيذ هذه الأوامر، يعرض iptables -L -v المعلومات الآتية (لاحظ التعدادات المرتبطة بكل من INPUT وOUTPUT؛ تشير القيم المخالفة للصفر إلى مرور حزم عبر السلاسل خلال عرض الإحصاءات):
Chain INPUT (policy ACCEPT 27 packets, 1728 bytes) pkts bytes target prot opt in out source destination 3 192 all -- eth1 any anywhere anywhere Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 all -- eth1 any anywhere anywhere 0 0 all -- any eth1 anywhere anywhere Chain OUTPUT (policy ACCEPT 21 packets, 2744 bytes) pkts bytes target prot opt in out source destination 3 192 all -- any eth1 anywhere anywhere
انظر المعلومات الخاصة بالخيارات ‏‎-c، ‏‎-n، ‏‎-t و‏‎-x في الجدول 1.14, “أدوات مساعدة”، وتلك المتعلقة بالخيارات ‎-L و‏‏‎-Z في الجدول 1.15, “خيارات متنوعة في iptables” لمعرفة المزيد عن الخيارات الصالحة لتطبيقات التعداد في iptables.‏

ترجمة عناوين الشبكة (NAT)

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

تنبيه

تتطلب ترجمة عناوين الشبكة تعقب الاتصال، لكن هذا التعقب لا يعمل إلا عندما يرى الحاسوب كافة الحزم. إذا كانت إعدادات جدارك الناري تشمل أكثر من حاسوب واحد، فعليك أن تتوخى الحذر لتفادي إبطال تعقب الاتصال.
من الممكن استخدام ترجمة عناوين الشبكة لإنجاز العديد من الوظائف المفيدة التي يمكن تصنيفها حسب العناوين المُعدَّلة (عناوين المصدر أو الوجهة).
وفي هذا الإطار، فإن جدول nat المدمج قد صمم خصيصاً للاستخدام في التطبيقات الخاصة بترجمة عناوين الشبكة.
يسمح النظام المنطقي لترجمة عناوين الشبكة في iptables باستخدام وحدات إضافية لمعالجة الحزم بالبروتوكولات التي تدمج العناوين في البيانات المتبادلة. في حالة عدم استخدام الوحدات المساعدة، فإن الحزم قد تُعدَّل للتوجه نحو المضيفات الصالحة، لكن البيانات المُتبادَلة ستواصل استخدام عناوين pre-NAT، مما سيحول دون اشتغال التطبيقات.
لاستخدام الوحدات المساعدة، يجب عليك أن تنفذ الأمر modprobe لتثبيت وحدة النواة الملائمة. الجدول 1.13, “الوحدات المساعدة لترجمة عناوين الشبكة” يتضمن سرداً للوحدات المساعدة لترجمة عناوين الشبكة.
جدول 1.13. الوحدات المساعدة لترجمة عناوين الشبكة
الوحدة المساعدة
البروتوكول
ip_nat_amanda
بروتوكول Amanda للنسخ الاحتياطي (يتطلب خيار إعداد النواة CONFIG_IP_NF_NAT_AMANDA)
ip_nat_ftp
بروتوكول FTP لنقل الملفات (يتطلب خيار إعداد النواة CONFIG_IP_NF_NAT_FTP)
ip_nat_irc
المحادثة المنقولة بالإنترنت (تتطلب خيار إعداد النواة CONFIG_IP_NF_NAT_IRC)
ip_nat_snmp_basic
بروتوكول إدارة الشبكات البسيط (يتطلب خيار إعداد النواة CONFIG_IP_NF_NAT_SNMP_BASIC)
ip_nat_tftp
بروتوكول نقل الملفات المبسط (يتطلب خيار إعداد النواة CONFIG_IP_NF_NAT_TFTP).

إذا أردت أن تتخطى بعضُ الحزمِ ترجمةَ عناوينِ الشبكة (NAT)، فعليك بكتابة قواعد تتطابق مع هذه الحزم للانتقال إلى الهدف الخاص ACCEPT. احرص على وضع هذه القواعد قبل كافة قواعد NAT الأخرى.
iptables -t nat -i eth1 ... -j ACCEPT

ترجمة عناوين المصدر والتنكر

تُستخدَم ترجمة عناوين المصدر (SNAT) لتقاسم الاتصال بالإنترنت بين الحواسيب الموجودة في شبكة معينة. تتصرف الحواسيب المتصلة بالإنترنت كبوابة وتَستخدِمُ ترجمةَ عناوين المصدر (مع تعقب الاتصال) لإعادة كتابة الحزم لكافة الاتصالات المُنشأة بين الإنترنت والشبكة الداخلية. ويُعوَّض عنوان مصدر الحزم الخارجة بعنوان IP الثابت الخاص بالبوابة. عند استجابة حاسوب خارجي، فإنه يضبط عنوان الوجهة على عنوان IP المُخصَّص لاتصالِ البوابة بالإنترنت. بمجرد اعتراض البوابة لهذه الحزم، فإنها تغير عنوان الوجهة إلى عنوان الحاسوب الداخلي المقصود، قبل تسليمها للشبكة الداخلية.
بما أن ترجمة عناوين المصدر (SNAT) تستلزم تعديل العناوين و/أو منافذ الحزم مباشرة قبل مغادرة هذه الأخيرة للنواة، فإن هذا التعديل يتم عبر سلسلة التوجيه اللاحق POSTROUTING بجدول nat.
يوفر iptables طريقتين مختلفتين لترجمة عناوين المصدر. يُخصَّص امتداد الهدف SNAT للحالات التي تملك فيها البوابة عنوان IP ثابت، بينما يخصص امتداد الهدف MASQUERADE للحالات التي تتوفر فيها البوابة على عنوان IP ديناميكي. ويوفر امتداد الهدف MASQUERADE تقنيات إضافية لمعالجة الحالات التي قد تخرج فيها الواجهة الشبكية عن الخط قبل عودتها بعنوان مختلف. تقتضي هذه التقنيات إجراء عمليات إضافية، مما ينعكس على أداء المُعالِج. إذا كنت تملك عنوان IP ثابت، فعليك باستخدام امتداد الهدف SNAT.
يمكنك تفعيل ترجمة عناوين المصدر (SNAT) على الواجهة eth1 من خلال إضافة قاعدة بسيطة لسلسلة التوجيه اللاحق (POSTROUTING) بجدول nat:
iptables -t nat -A POSTROUTING -o eth1 -j SNAT
الأمر المناسب للتنكر هو كالتالي:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

ترجمة عناوين الوجهة

تسمح ترجمة عناوين الوجهة (DNAT) بالكشف عن خدمات معينة في الشبكة الداخلية للعالم الخارجي بدون ربط الحواسيب الداخلية مباشرة بالإنترنت. ولا يتطلب ذلك إلا اتصالاً واحداً بالإنترنت (عنوان IP عمومي)، طالما لم يتم الكشف عن أكثر من خدمة واحدة بكل مَنْفَذ. تعيد البوابة توجيه الاتصالات إلى العناوين و/أو المنافذ الخاصة بالحواسيب الداخلية وتتولى عودة البيانات المنقولة إلى العنوان الأصلي خارج الشبكة.
بما أن ترجمة عناوين المصدر (DNAT) تستلزم تعديل عناوين الوجهة و/أو منافذ الحزم مباشرة قبل توجيه هذه الأخيرة إلى العمليات المحلية أو إلى حواسيب أخرى، فإن هذا التعديل يتم عبر سلسلة التوجيه المسبق PREROUTING بجدول nat.
فمثلاً، لتحويل الاتصالات الوافدة عبر المنفذ رقم 80 للبوابة (HTTP) إلى خادم داخلي ينصت للمنفذ 8080 على العنوان 192.168.1.3، يمكنك استخدام قاعدة كهذه:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.3:8080

التوكيل الشفاف

يسمح التوكيل الشفاف باعتراض اتصالات خارجة معينة وإعادة توجيهها لحاسوب يتولى إدارتها بدل الحاسوب الأصلي المقصود. بفضل هذه التقنية، يمكنك تهيئة وكلاء للخدمات دون الحاجة لضبط إعدادات كل حاسوب بالشبكة الداخلية. بما أن كافة البيانات الموجهة للعالم الخارجي تمر عبر البوابة، فإن كل الاتصالات المتجهة للخارج بالمنفذ المحدد ستخضع للتوكيل الشفاف.
إذا قمت بإعداد وكيل HTTP (مثل Squid) للعمل كوكيل شفاف على حاسوبك المهيئ كجدار ناري والإنصات على المنفذ 8888، فإنك تستطيع إعادة توجيه حركة بيانات HTTP الخارجة إلى وكيل HTTP بواسطة القاعدة الآتية:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8888
يتطلب التوكيل الشفاف إجراءات أكثر تعقيداً عندما يتعلق الأمر بتشغيل خدمة معينة على مضيف مغاير. للمزيد من التفاصيل عن كيفية تشغيل Squid في مثل هذه الحالات، يرجى الاطلاع على كتاب دانييل كيراكوف المعنون "Transparent Proxy with Linux and Squid mini-HOWTO"، والذي يمكنك الحصول عليه مباشرة على الموقع الإلكتروني المخصص لمشروع توثيق لينكس (http://www.tldp.org/HOWTO/TransparentProxy.html).

توزيع وموازنة الحِمل

يمكنك توزيع الحِمل على مجموعة من المضيفات من خلال استخدام الامتداد التطابقي nth وامتداد الهدف DNAT.
تشكل الموازنة تقنية مُحسَّنة لتوزيع الحمل. تستخدم هذه التقنية إحصاءات الحمل الخاصة بالمضيفات لاقتراح الأهداف المناسبة لنقل الحزم، وذلك حتى يُوزَّع الحِمل بشكل متساوٍ بقدر الإمكان على المضيفات المشاركة.

الجدران النارية عديمة الحالة والجدران النارية المحددة الحالة

يعد الجدار الناري بوابة تقيد انتقال البيانات بين الشبكات التي تربطها.
تستخدم الجدران النارية عديمة الحالة قواعد بسيطة لا تتطلب تعقب الاتصال أو الحالة، بما في ذلك التطابقات المبنية على تراكيب عناوين و/أو منافذ المصادر والأهداف ببعض البروتوكولات.
تسمح الجدران النارية المحددة الحالة بإنجاز عمليات أكثر تعقيداً لمعالجة الحزم. وترتكز هذه العمليات على تعقب الاتصالات والحالات، بما في ذلك تتبع الأنشطة الشبكية الحديثة للمضيفات أو الاتصالات المنشأة (‏iplimit، ‏limit و‏recent أو امتدادات تطابقية أخرى).
يدعم iptables النمطين الإثنين لقواعد الجدران النارية (مع ذلك، فإننا ننصحك بمراجعة التنبيه الوارد في الفقرة قسم 1.1.7, “ترجمة عناوين الشبكة (NAT)”).

أدوات مساعدة

هناك العديد من الأدوات الشبكية التي ستنفعك عند إصلاح الأعطال المتعلقة بجدارك الناري أو بالوظائف الشبكية الأخرى. الجدول 1.14, “أدوات مساعدة” يوفر مجموعة من الروابط للأدوات الأكثر شهرة.
الجدول 1.14. أدوات مساعدة
الأدوات
الوصف
ethereal
أداة لتحليل البروتوكولات الشبكية.
Nessus
ماسح أمني نائيّ.
nmap
مُخطِّط للشبكات.
ntop
فحص ومراقبة الحركة عبر الشبكة.
ping
إرسال حزم ICMP ECHO_REQUEST إلى مضيفات معينة.
tcpdump
التقاط ونسخ الحزم
traceroute
عرض المسار المتبع من قبل الحزم للوصول إلى مضيف معين.