fwbuilder هي إحدى أفضل هذه الأدوات بلا شك.
iptables و ip6tables. الفرق بين هذين الأمرين هو أن الأول يعمل مع شبكات IPv4، بينما يعمل الثاني مع شبكات IPv6. بما أن كلاً من هذين البروتوكولين سيبقى لعديد من السنوات القادمة على الأغلب، فيجب استخدام الأداتين على التوازي.
filter بقواعد الترشيح (قبول أو رفض أو تجاهل رزمة)؛
nat بترجمة عنوان المصدر أو الوجهة وأرقام المنافذ الخاصة بالرزمة؛
mangle بالتعديلات الأخرى التي تجرى على رزم IP (بما فيها حقل ToS — نوع الخدمة Type of Service — وخياراته)؛
raw بإجراء تعديلات يدوية أخرى على الرزم قبل وصولها لنظام تتبع الاتصال.
filter ثلاث سلاسل قياسية:
INPUT: تختص بالرزم التي وجهتها هي الجدار الناري نفسه؛
OUTPUT: تختص بالرزم التي يَبثُّها الجداري الناري؛
FORWARD: تختص بالرزم التي تنتقل عبر الجدار الناري (حيث لا يكون الجدار الناري مصدرها ولا وجهتها).
nat أيضاً ثلاث سلاسل قياسية:
PREROUTING: لتعديل الرزم فور وصولها؛
POSTROUTING: لتعديل الرزم عندما تجهز للانطلاق في طريقها؛
OUTPUT: لتعديل الرزم التي يولدها الجدار الناري نفسه.
-j في الأوامر) إلى الإجراء المحدد لمتابعة المعالجة. أكثر التصرفات شيوعاً مُقيَّسَة، وهناك إجراءات خاصة لها. يقاطع تنفيذ إحدى هذه الإجراءات معالجة السلسلة، لأن مصير الرزمة قد حسم أصلاً (إلا في حالة استثنائية مذكورة أدناه):
ACCEPT: يسمح للرزمة بالذهاب في سبيلها؛
REJECT: يرفض الرزمة مع الرد برزمة ICMP تبيّن الخطأ (يمكن تحديد نوع الخطأ باستخدام الخيار --reject-with type التابع للأمر iptables)؛
DROP: حذف (تجاهل) الرزمة؛
LOG: تسجيل رسالة (عبر syslogd) فيها وصف الرزمة، لاحظ أن هذا الإجراء لا يقاطع المعالجة، ويستمر تنفيذ السلسلة عند القاعدة التالية، لذلك تحتاج عملية تسجيل الرزم المرفوضة قاعدة LOG وقاعدة REJECT/DROP؛
ULOG: تسجيل رسالة عبر ulogd، الذي قد يكون أكثر تكيفاً وفعالية من syslogd عند معالجة أعداد كبيرة من الرسائل؛ لاحظ أن هذا الإجراء، مثله مثل LOG، يعيد المعالجة للمتابعة عند القاعدة التالية من السلسلة؛
RETURN: يقاطع معالجة السلسلة الحالية، ويعود إلى السلسلة التي استدعتها؛ وفي حال كانت السلسلة الحالية قياسية، فلا توجد سلسلة مستدعية، وبالتالي يتم اتخاذ الإجراء الافتراضي (المعرّف بالخيار -P الخاص بالأمر iptables) بدلاً من ذلك؛
SNAT (في جدول nat): تطبيق Source NAT (تحدد الخيارات الأخرى التعديلات الفعلية التي ستُطبَّق)؛
DNAT (في جدول nat): تطبيق Destination NAT (تحدد الخيارات الأخرى التعديلات الفعلية التي ستُطبَّق)؛
MASQUERADE (في جدول nat): تطبيق التنكر (حالة خاصة من Source NAT)؛
REDIRECT (في جدول nat): إعادة توجيه رزمة إلى منفذ معين من الجدار الناري نفسه؛ يمكن استخدام هذا لإعداد بروكسي وب شفاف يعمل دون إعداد عند العميل، بما أن العميل يظن أنه يتصل مع المتلقي بينما تمر الاتصالات في الحقيقة عبر البروكسي.
mangle، تقع خارج مدى هذا النص. هناك قائمة شاملة فيiptables(8) و ip6tables(8).
iptables و ip6tables بتعديل الجداول والسلاسل والقواعد. يشير الخيار -t table التابع لهما إلى الجدول الذي ستجرى التعديلات عليه (filter افتراضياً).
-N chain سلسلة جديدة. ويحذف -X chain سلسلة فارغة وغير مستخدمة. يضيف الخيار -A chainrule قاعدة إلى نهاية السلسلة المحددة. يُدخِل الخيار -I chain rule_num rule قاعدة قبل القاعدة ذات الرقم rule_num. يحذف الخيار -D chainrule_num أو (-D chain rule) قاعدة من السلسلة؛ تحدد الصيغة الأولى القاعدة المحذوفة برقمها، أما الصيغة الثانية فتحددها بمحتوياتها. الخيار -F chain يُفرّغ السلسلة (يحذف جميع قواعدها)؛ وإذا لم تذكر له أي سلسلة، سيحذف جميع القواعد في الجدول. يسرد الخيار -L chain القواعد في السلسلة. وأخيراً، يعرّف الخيار -P chain action الإجراء الافتراضي، أو ”السياسة“، للسلسلة المعطاة؛ لاحظ أن السلاسل القياسية فقط هي التي تملك سياسات كهذه.
conditions -j action action_options. إذا كان هناك شروط في القاعدة نفسها، فالمعيار عندئذ هو جمع (and منطقية) هذه الشروط، وسيكون تقييد الناتج الشرط الناتج بنفس تقييد كل واحد من الشروط المستقلة على الأقل.
-p protocol حقل البروتوكول لرزمة IP. أكثر القيم شيوعاً هي tcp، وudp، وicmp، وicmp6. يمكن نفي الشرط إذا سبق بعلامة التعجب (وعندها سيطابق أي رزمة يختلف بروتوكولها عن البروتوكول المحدد). لا ينحصر استخدام آلية النفي هذه مع الخيار -p فقط، بل يمكن تطبيقه على جميع الشروط الأخرى أيضاً.
-s address أو -s network/mask عنوان مصدر الرزمة. في المقابل، يطابق -d address أو -d network/mask عنوان الوجهة.
-i interface الرزم الواردة من الواجهة الشبكية المحددة. أما -o interface فينتخب الرزم التي ستخرج على واجهة معينة.
-p tcp بشروط عن منافذ TCP، باستخدام تعبير مثل --source-port port و --destination-port port.
--state state حالة الرزمة في الاتصال (هذا يحتاج وحدة النواة ipt_conntrack، لتتبع الاتصال). تُبيّن الحالة NEW أن الرزمة تبدأ اتصالاً جديداً؛ وتدل ESTABLISHED على الرزم التي تنتمي لاتصال منشئ مسبقاً، وتطابق الحالة RELATED الرزم التي تبدأ اتصالاً جديداً متعلقٌ باتصال موجود من قبل (يفيد هذا في اتصالات ftp-data في الوضع ”النشط active“ لبروتوكول FTP).
LOG، على سبيل المثال، له الخيارات التالية:
--log-level على درجة خطورة رسائل syslog، وقيمته الافتراضية warning.
--log-prefix بتحديد سابقة نصية للتمييز بين رسائل السجل؛
--log-tcp-sequence و --log-tcp-options و --log-ip-options على بيانات إضافية لتضمينها في الرسالة: وهي، على التوالي، رقم تسلسل TCP، خيارات TCP، وخيارات IP.
DNAT الخيار --to-destination address:port للدلالة على عنوان IP الجديد للوجهة و (أو) رقم المنفذ. كما يوفر SNAT خيار --to-source address:port للدلالة على عنوان IP الجديد للمصدر والمنفذ.
REDIRECT (المتاح فقط إذا كان NAT متوفراً) الخيار --to-ports port(s) للدلالة على المنفذ، أو مجال المنافذ، الذي يجب إعادة توجيه الرزم إليه.
iptables/ip6tables. طباعة هذه الأوامر يدوياً قد تكون مملة، لذلك تُخزَّن الاستدعاءات عادة في سكربت بحيث تُضبَط نفس الإعدادات تلقائياً في كل مرة يقلع فيها الجهاز. يمكن كتابة هذا السكربت يدوياً، لكن قد ترغب باستخدام أداة عالية المستوى لتجهيزه مثل fwbuilder.
#apt install fwbuilder
fwbuilder يتولى ترجمة القواعد حسب العناوين المسندة للكائنات.
fwbuilder سكربتاً يضبط الجدار الناري وفق القواعد المُعرّفة. تسمح بنية هذا البرنامج التجزيئية بتوليد سكربتات تستهدف نظماً مختلفة (iptables على لينكس، ipf على FreeBSD، و pf على OpenBSD).
up توجيهية في الملف /etc/network/interfaces. لقد حفظنا السكربت في المثال التالي في ملف اسمه /usr/local/etc/arrakis.fw.
مثال 14.1. ملف interfaces يستدعي سكربت إعداد الجدار الناري
auto eth0
iface eth0 inet static
address 192.168.0.1
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
up /usr/local/etc/arrakis.fw