fwbuilder
بدون شک یکی از بهترین آنها است.
iptables
و ip6tables
کنترل شود. تفاوت این دو دستور در نحوه عملکرد آنها روی شبکههای IPv4 و IPv6 است. از آنجا که این دو پروتکل شبکه برای سالیان طولانی کار خواهند کرد، نیاز است که از هر دو ابزار به صورت موازی استفاده کنیم.
nat
برای ترجمه نشانیهای مبدا، مقصد و درگاههای مرتبط با بسته بکار میرود؛
mangle
برای سایر تغییرات اعمال شده در بستههای IP بکار میرود (از جمله فیلد 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
): masquerading را اعمال میکند (یک مورد بخصوص از 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
و icmpv6
. قرار دادن یک علامت تعجب قبل از شرط منجر به منفی شدن مفهوم آن میگردد، که به معنای “هر بستهای با پروتکل مختلف بجز گزینه اشاره شده” خواهد بود. این مکانیزم منفیسازی مختص به گزینه ... نیست و میتواند در مورد سایر شرایط نیز بکار رود.
-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
، با مقدار پیشفرض warning
، سطح شدت syslog
را مشخص میکند؛
--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