fwbuilder
هي إحدى أفضل هذه الأدوات بلا شك.
iptables
و ip6tables
. الفرق بين هذين الأمرين هو أن الأول يعمل مع شبكات IPv4، بينما يعمل الثاني مع شبكات IPv6. بما أن كلاً من هذين البروتوكولين سيبقى لعديد من السنوات القادمة على الأغلب، فيجب استخدام الأداتين على التوازي.
filter
بقواعد الترشيح (قبول أو رفض أو تجاهل رزمة)؛
nat
بترجمة عنوان المصدر أو الوجهة وأرقام المنافذ الخاصة بالرزمة؛
mangle
بالتعديلات الأخرى التي تجرى على رزم IP (بما فيها حقل ToS — نوع الخدمة Type of Service — وخياراته)؛
raw
بإجراء تعديلات يدوية أخرى على الرزم قبل وصولها لنظام تتبع الاتصال.
security
is used for Mandatory Access Control networking rules, implemented by Linux Security Modules such as SELinux.
filter
ثلاث سلاسل قياسية:
INPUT
: تختص بالرزم التي وجهتها هي الجدار الناري نفسه؛
OUTPUT
: تختص بالرزم التي يَبثُّها الجداري الناري؛
FORWARD
: تختص بالرزم التي تنتقل عبر الجدار الناري (حيث لا يكون الجدار الناري مصدرها ولا وجهتها).
nat
أيضاً ثلاث سلاسل قياسية:
PREROUTING
: لتعديل الرزم فور وصولها؛
POSTROUTING
: لتعديل الرزم عندما تجهز للانطلاق في طريقها؛
INPUT
: to modify packets destined for local sockets;
OUTPUT
: لتعديل الرزم التي يولدها الجدار الناري نفسه.
-j
في الأوامر) إلى الإجراء المحدد لمتابعة المعالجة. أكثر التصرفات شيوعاً مُقيَّسَة، وهناك إجراءات خاصة لها. يقاطع تنفيذ إحدى هذه الإجراءات معالجة السلسلة، لأن مصير الرزمة قد حسم أصلاً (إلا في حالة استثنائية مذكورة أدناه):
ACCEPT
: يسمح للرزمة بالذهاب في سبيلها؛
REJECT
: يرفض الرزمة مع الرد برزمة ICMP تبيّن الخطأ (يمكن تحديد نوع الخطأ باستخدام الخيار --reject-with type
التابع للأمر iptables
)؛
DROP
: حذف (تجاهل) الرزمة؛
LOG
: تسجيل رسالة (عبر syslogd
) فيها وصف الرزمة، لاحظ أن هذا الإجراء لا يقاطع المعالجة، ويستمر تنفيذ السلسلة عند القاعدة التالية، لذلك تحتاج عملية تسجيل الرزم المرفوضة قاعدة LOG وقاعدة REJECT/DROP؛
NFLOG
: log a message via the loaded logging backend (usually nfnetlink_log), which can be better adapted and more efficient than syslogd
for handling large numbers of messages; note that this action, like LOG, also returns processing to the next rule in the calling chain;
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
option creates a new chain. The -X chain
deletes an empty and unused chain. The -A chain rule
adds a rule at the end of the given chain. The -I chain rule_num rule
option inserts a rule before the rule number rule_num. The -D chain rule_num
(or -D chain rule
) option deletes a rule in a chain; the first syntax identifies the rule to be deleted by its number, while the latter identifies it by its contents. The -F chain
option flushes a chain (deletes all its rules); if no chain is mentioned, all the rules in the table are deleted. The -L chain
option lists the rules in the chain; if no chain is mentioned, all chains are listed. Finally, the -P chain action
option defines the default action, or “policy”, for a given chain; note that only standard chains can have such a policy.
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