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