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