fwbuilder هي إحدى أفضل هذه الأدوات بلا شك.
iptables and ip6tables commands. The difference between these two commands is that the former acts on the IPv4 network, whereas the latter acts on IPv6. Since both network protocol stacks will probably be around for many years, both tools will need to be used in parallel.
filter بقواعد الترشيح (قبول أو رفض أو تجاهل رزمة)؛
nat concerns translation of source or destination addresses and ports of packages;
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 (only in the nat table): apply Source NAT (extra options describe the exact changes to apply);
DNAT (only in the nat table): apply Destination NAT (extra options describe the exact changes to apply);
MASQUERADE (only in the nat table): apply masquerading (a special case of Source NAT);
REDIRECT (only in the nat table): redirect a packet to a given port of the firewall itself; this can be used to set up a transparent web proxy that works with no configuration on the client side, since the client thinks it connects to the recipient whereas the communications actually go through the proxy.
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, with default value warning, indicates the syslog severity level;
--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 action (only available if NAT is available) provides the --to-ports port(s) option to indicate the port, or port range, where the packets should be redirected.
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