fwbuilder
بدون شک یکی از بهترین آنها است.
iptables
و ip6tables
کنترل شود. تفاوت این دو دستور در نحوه عملکرد آنها روی شبکههای IPv4 و IPv6 است. از آنجا که این دو پروتکل شبکه برای سالیان طولانی کار خواهند کرد، نیاز است که از هر دو ابزار به صورت موازی استفاده کنیم.
nat
برای ترجمه نشانیهای مبدا، مقصد و درگاههای مرتبط با بسته بکار میرود؛
mangle
برای سایر تغییرات اعمال شده در بستههای IP بکار میرود (از جمله فیلد 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
): masquerading را اعمال میکند (یک مورد بخصوص از Source NAT)؛
REDIRECT
(فقط در جدول nat
): یک بسته را به درگاه داده شده از خود فایروال هدایت می کند؛ از این گزینه میتوان برای راهاندازی یک پروکسی وب بدون هیچ پیکربندی در سمت برنامه کاربردی استفاده کرد، چرا که برنامه فکر میکند به صورت مستقیم به گیرنده متصل شده در حالی که از طریق پروکسی این ارتباط برقرار شده است.
mangle
هستند، خارج از محدوده این متن میباشند. صفحات راهنمای iptables(8) و ip6tables(8) فهرستی از این اقدامات را شامل میشوند.
iptables
و ip6tables
امکان تغییر جدولها، زنجیرهها و قوانین را فراهم میسازند. گزینه -t table
مشخص میکند که عملیات روی کدام جدول انجام شود (به صورت پیشفرض، filter
).
-N chain
یک زنجیره جدید ایجاد میکند. گزینه -X chain
یک زنجیره خالی و بدون استفاده را حذف میکند. گزینه -A chain rule
یک قانون به انتهای زنجیره اشاره شده اضافه میکند. گزینه -I chain rule_num rule
یک قانون قبل از قانون شماره rule_num درج میکند. گزینه -D chain rule_num
یا -D chain rule
یک قانون را از زنجیره حذف میکند؛ عبارت اول قانون را بر اساس شماره، در حالی که عبارت دوم قانون را بر اساس محتوا شناسایی میکند. گزینه -F chain
یک زنجیره را پاکسازی (حذف تمام قوانین) میکند؛ اگر زنجیرهای مشخص نشود، تمام قوانین موجود در جدول حذف میشوند. گزینه -L chain
فهرستی از قوانین موجود در زنجیره را نمایش میدهد. در نهایت، گزینه -P chain action
اقدام یا “خط مشی” پیشفرض برای یک زنجیره را مشخص میکند؛ به یاد داشته باشید که تنها زنجیرههای استاندارد میتوانند چنین خط مشی داشته باشند.
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