| FERM(1) | FIREWALL RULES MADE EASY | FERM(1) |
نام (NAME)
ferm - یک تحلیلگر قوانین فایروال برای لینوکس
خلاصه دستور (SYNOPSIS)
ferm گزینهها فایل_ورودی
توضیحات (DESCRIPTION)
ferm یک پیشانه (frontend) برای iptables است. این ابزار قوانین را از یک فایل پیکربندی ساختاریافته میخواند و iptables(8) را فراخوانی میکند تا آنها را در هستهٔ در حال اجرا درج نماید.
هدف ferm آسانسازی نوشتن و خواندن قوانین فایروال است. این ابزار تلاش میکند زحمت نوشتن خستهکنندهٔ قوانین را کاهش دهد، و در نتیجه به مدیر فایروال این امکان را میدهد تا به جای درگیر شدن با جزئیات پیادهسازی نحوی، زمان بیشتری را صرف توسعهٔ قوانین مناسب کند.
برای دستیابی به این هدف، ferm از یک زبان پیکربندی ساده اما قدرتمند استفاده میکند که متغیرها، توابع، آرایهها و بلوکها را پشتیبانی میکند. همچنین به شما اجازه میدهد فایلهای دیگر را ضمیمه (include) کنید، که امکان ایجاد کتابخانههایی از ساختارها و توابع پرکاربرد را فراهم میسازد.
ferm (که «فِرم» تلفظ میشود) مخفف عبارت «For Easy Rule Making» (برای ساخت آسان قوانین) است.
هشدار (CAUTION)
این صفحهٔ راهنما قصد ندارد نحوهٔ عملکرد فایروال و چگونگی نوشتن قوانین مناسب را به شما آموزش دهد. مستندات کافی در این زمینه از قبل وجود دارد.
مقدمه (INTRODUCTION)
بیایید با یک مثال ساده شروع کنیم:
chain INPUT {
proto tcp ACCEPT;
}
این دستور قاعدهای را به زنجیرهٔ از پیش تعریفشدهٔ input اضافه میکند که تمام بستههای TCP را تطبیق داده و میپذیرد (ACCEPT). بسیار خب، بیایید آن را کمی پیچیدهتر کنیم:
chain (INPUT OUTPUT) {
proto (udp tcp) ACCEPT;
}
این کار ۴ قانون درج خواهد کرد، یعنی ۲ تا در زنجیرهٔ input و ۲ تا در زنجیرهٔ output، که هر دو نوع بستهٔ UDP و TCP را تطبیق داده و میپذیرد. در حالت عادی باید دستورات زیر را مینوشتید:
iptables -A INPUT -p tcp -j ACCEPT iptables -A OUTPUT -p tcp -j ACCEPT iptables -A INPUT -p udp -j ACCEPT iptables -A OUTPUT -p udp -j ACCEPT
توجه کنید چقدر حجم تایپ کردن ما کاهش مییابد! :-)
در اصل، تمام سازوکار در همین خلاصه میشود، هرچند میتوانید آن را بسیار پیچیدهتر کنید. نگاهی به این مورد بیندازید:
chain INPUT {
policy ACCEPT;
daddr 10.0.0.0/8 proto tcp dport ! ftp jump mychain sport :1023 TOS 4 settos 8 mark 2;
daddr 10.0.0.0/8 proto tcp dport ftp REJECT;
}
نکتهٔ من در اینجا این است که *شما* باید قوانین مرتبی بنویسید، آنها را برای خود و دیگران خوانا نگه دارید و تبدیل به یک آشفتگی نکنید.
قرار دادن قوانین فایروال حاصل در اینجا جهت ارجاع به خواننده کمک خواهد کرد. همچنین میتوانید نسخهٔ تودرتو را برای خوانایی بهتر استفاده کنید.
تلاش کنید از کامنتها برای مشخص کردن کارهایی که انجام میدهید استفاده کنید:
# this line enables transparent http-proxying for the internal network:
proto tcp if eth0 daddr ! 192.168.0.0/255.255.255.0
dport http REDIRECT to-ports 3128;
بعداً از این کار سپاسگزار خواهید بود!
chain INPUT {
policy ACCEPT;
interface (eth0 ppp0) {
# deny access to notorious hackers, return here if no match
# was found to resume normal firewalling
jump badguys;
protocol tcp jump fw_tcp;
protocol udp jump fw_udp;
}
}
هرچه ساختار تودرتوتری داشته باشید، تمیزتر به نظر میرسد. مطمئن شوید ترتیبی که مشخص میکنید درست است؛ قطعاً نمیخواهید چنین کاری انجام دهید:
chain FORWARD {
proto ! udp DROP;
proto tcp dport ftp ACCEPT;
}
زیرا قاعدهٔ دوم هرگز تطبیق داده نخواهد شد. بهترین شیوه این است که ابتدا هر آنچه مجاز است مشخص شود، و سپس هر چیز دیگری رد (deny) گردد. برای مشاهدهٔ نمونههای مناسب بیشتر به مثالها نگاهی بیندازید. اغلب افراد کاری شبیه به این انجام میدهند:
proto tcp {
dport (
ssh http ftp
) ACCEPT;
dport 1024:65535 ! syn ACCEPT;
DROP;
}
ساختار یک فایل فایروال مناسب شبیه به یک کد سادهشده C به نظر میرسد. تنها تعداد اندکی از نویسههای نحوی در فایلهای پیکربندی ferm استفاده میشوند. در کنار این نویسههای ویژه، ferm از «کلیدها» ('keys') و «مقادیر» ('values') استفاده میکند؛ میتوانید آنها را به عنوان گزینهها و پارامترها، یا متغیرها و مقادیر در نظر بگیرید.
با این کلمات، شما ویژگیهای فایروال خود را تعریف میکنید. هر فایروال شامل دو بخش است: نخست، بررسی اینکه آیا ترافیک شبکه با شرایط خاصی مطابقت دارد یا خیر، و دوم، انجام چه کاری با آن ترافیک.
شما میتوانید شرایطی را مشخص کنید که برای برنامه رابط هسته مورد استفاده شما، احتمالاً iptables(8)، معتبر باشند. برای نمونه، در iptables، هنگامی که تلاش میکنید بستههای TCP را تطبیق دهید، مینویسید:
iptables --protocol tcp
در ferm، این به صورت زیر درمیآید:
protocol tcp;
تنها نوشتن این در ferm کاری انجام نمیدهد؛ باید به ferm بگویید (در واقع، باید به iptables(8) و هسته بگویید) با ترافیکی که با این شرایط مطابقت دارد چه کار کند:
iptables --protocol tcp -j ACCEPT
یا، ترجمهشده به ferm:
protocol tcp ACCEPT;
نویسه ; در پایان هر قاعده ferm قرار دارد. Ferm شکستگیهای خط را نادیده میگیرد، به این معنی که مثال بالا با مورد زیر یکسان است:
protocol tcp ACCEPT;
در اینجا فهرستی از نویسههای ویژه آمده است:
- ;
- این نویسه
یک قاعده را
پایان
میدهد.
با جدا کردن از طریق نقطهویرگول، میتوانید چندین قاعده را در یک خط بنویسید، هرچند که این کار خوانایی را کاهش میدهد:
protocol tcp ACCEPT; protocol udp DROP;
- {}
- نماد
تودرتویی
یک «بلاک»
('block') از قواعد
را تعریف
میکند.
آکولادها شامل هر تعداد قاعده تودرتو هستند. تمام تطابقهای پیش از بلاک، به این قواعد منتقل میشوند.
آکولاد بسته مجموعه قواعد را نهایی میکند. نباید پس از آن یک ';' بنویسید زیرا در آن صورت یک قاعده خالی خواهد بود.
مثال:
chain INPUT proto icmp { icmp-type echo-request ACCEPT; DROP; }این بلاک دو قاعده را در داخل یک بلاک نشان میدهد، که هر دوی آنها با هر آنچه پیش از آن قرار دارد ادغام خواهند شد؛ بنابراین دو قاعده به دست خواهید آورد:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp -j DROP
سطوح تودرتویی چندگانه نیز میتواند وجود داشته باشد:
chain INPUT { proto icmp { icmp-type echo-request ACCEPT; DROP; } daddr 172.16.0.0/12 REJECT; }توجه داشته باشید که قاعده 'REJECT' تحت تأثیر 'proto icmp' قرار نمیگیرد، هرچند بعد از آکولاد بسته هیچ ';' وجود ندارد. ترجمهشده به iptables:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp -j DROP iptables -A INPUT -d 172.16.0.0/12 -j REJECT
- $
- گسترش متغیر. '$FOO' را با مقدار متغیر جایگزین میکند. برای جزئیات بخش VARIABLES را ببینید.
- &
- فراخوانی تابع. برای جزئیات به بخش FUNCTIONS مراجعه کنید.
- ()
- نماد آرایه.
با استفاده
از
پرانتزها،
میتوانید
یک «فهرست»
('list') از مقادیر
را تعریف
کنید که
باید برای
کلید سمت چپ
آن اعمال
شوند.
مثال:
protocol ( tcp udp icmp )
این به سه قاعده منجر خواهد شد:
... -p tcp ... ... -p udp ... ... -p icmp ...
تنها مقادیر میتوانند در «فهرست» قرار گیرند، بنابراین نمیتوانید کاری مانند این انجام دهید:
proto tcp ( ACCEPT LOG );
اما میتوانید این کار را انجام دهید:
chain (INPUT OUTPUT FORWARD) proto (icmp udp tcp) DROP;
(که به ۹ قاعده منجر خواهد شد!)
مقادیر با فاصله از یکدیگر جدا میشوند. نماد آرایه هم شرکتپذیر از چپ و هم از راست است، بر خلاف بلاک تودرتو که تنها شرکتپذیر از چپ است.
- " # "
- نماد توضیح (کامنت). هر چیزی که پس از این نماد تا پایان خط بیاید نادیده گرفته میشود.
- `command`
- دستور را در یک شل (shell) اجرا کرده و خروجی فرایند را درج میکند. برای جزئیات بخش backticks را ببینید.
- 'string'
- کوتیشنگذاری
یک رشته که
ممکن است
حاوی
فاصلهها،
علامت دلار
و غیره
باشد.
LOG log-prefix ' hey, this is my log prefix!';
- "string"
- کوتیشنگذاری
یک رشته
(بالا را
ببینید)،
اما
ارجاعات
متغیر حاوی
علامت دلار
ارزیابی
میشوند:
DNAT to "$myhost:$myport"; در بخش پیشین، برخی از کلیدواژههای پایه مانند «chain»، «protocol» و «ACCEPT» را معرفی کردیم. بیایید ماهیت آنها را بررسی کنیم.
سه نوع کلیدواژه وجود دارد:
-
کلیدواژههای location مشخص میکنند که یک قاعده (rule) در کجا ایجاد خواهد شد. مثال: «table»، «chain».
-
کلیدواژههای match آزمایشی را روی تمام بستههای عبوری انجام میدهند. اگر یک (یا چند) مورد از تطابقها موفق نباشد، قاعدهٔ جاری بیاثر خواهد بود. مثال: «proto»، «daddr». بیشتر تطابقها با یک پارامتر دنبال میشوند: «proto tcp»، «daddr 172.16.0.0/12».
-
کلیدواژههای target تعیین میکنند که با یک بسته چه باید کرد. مثال: «ACCEPT»، «REJECT»، «jump». برخی از هدفها کلیدواژههای بیشتری را برای تعیین جزئیات تعریف میکنند: «REJECT reject-with icmp-net-unreachable».
هر قاعده از یک location و یک target بههمراه هر تعداد از matches تشکیل میشود:
table filter # location proto tcp dport (http https) # match ACCEPT; # target
دقیقتر که بگوییم، نوع چهارمی نیز وجود دارد: کلیدواژههای ferm (که رفتار درونی ferm را کنترل میکنند)، اما آنها بعداً توضیح داده خواهند شد.
پارامترها (Parameters)
بسیاری از کلیدواژهها پارامتر میپذیرند. این پارامترها را میتوان بهصورت لیترالها، ارجاع به متغیرها یا فهرستها (آرایهها) مشخص کرد:
proto udp saddr $TRUSTED_HOSTS; proto tcp dport (http https ssh); LOG log-prefix "funky wardriver alert: ";
برخی از آنها را میتوان نفی (negate) کرد (فهرستها را نمیتوان نفی کرد):
proto !esp; proto udp dport !domain;
کلیدواژههایی که هیچ پارامتری نمیپذیرند، با افزودن پیشوند “!” نفی میشوند:
proto tcp !syn;
برای مشاهدهٔ جاهایی که میتوان از ! استفاده کرد، iptables(8) را بخوانید.
کلیدواژههای پایه (BASIC KEYWORDS)
کلیدواژههای مکان (Location keywords)
- domain [ip|ip6]
- دامنه را تنظیم میکند. «ip» به معنای «IPv4» (مربوط به iptables) و «ip6» برای پشتیبانی از IPv6 با استفاده از «ip6tables» است. مقدار پیشفرض همان مقداری است که با --domain مشخص شده، یا در صورتی که این گزینه مشخص نشده باشد، «ip» است.
- table [filter|nat|mangle]
- مشخص میکند که این قاعده در کدام جدول netfilter درج خواهد شد: «filter» (پیشفرض)، «nat» یا «mangle».
- chain [chain-name]
- زنجیرهٔ netfilter
(درون جدول
جاری) را که
این قاعده
در آن درج
میشود
مشخص
میکند.
نامهای
معمول
زنجیرههای
از پیش
تعریفشده
بسته به
جدول
عبارتند از
«INPUT»، «OUTPUT»،
«FORWARD»، «PREROUTING» و
«POSTROUTING». برای
جزئیات به
مستندات netfilter
مراجعه
کنید.
اگر در اینجا یک زنجیرهٔ ناموجود را مشخص کنید، ferm قاعده را به یک زنجیرهٔ سفارشی با آن نام اضافه خواهد کرد.
- policy [ACCEPT|DROP|..]
- سیاست (policy)
پیشفرض را
برای
زنجیرهٔ
جاری مشخص
میکند
(تنها برای
زنجیرههای
توکار).
میتواند
یکی از
هدفهای
توکار (ACCEPT، DROP،
REJECT، ...) باشد. با
بستهای که
با هیچ
قاعدهای
در یک
زنجیره
تطابق
نداشته
باشد، طبق
آنچه در
سیاست مشخص
شده رفتار
خواهد شد.
برای جلوگیری از ابهام، همواره سیاستهای تمام زنجیرههای از پیش تعریفشده را بهطور صریح مشخص کنید.
- @subchain ["CHAIN-NAME"] { ... }
- مانند
عملگرهای
بلوک
معمولی کار
میکند
(یعنی بدون
کلیدواژهٔ
@subchain)، با
این تفاوت
که ferm قواعد
درون
آکولادها
را به یک
زنجیرهٔ
سفارشی
جدید منتقل
میکند. نام
این زنجیره
بهطور
خودکار
توسط ferm
انتخاب
میشود.
در بسیاری از موارد، این روش سریعتر از یک بلوک ساده است، زیرا هنگامی که یک پیششرط نادرست باشد، هسته (kernel) میتواند از یک بلوک بزرگ از قواعد صرفنظر کند. مثال زیر را در نظر بگیرید:
table filter chain INPUT { saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) { proto tcp dport (http https ssh) ACCEPT; proto udp dport domain ACCEPT; } }این ۲۰ قاعده تولید میکند. هنگامی که بستهای میرسد که تطابق saddr را برآورده نمیکند، با این حال تمام ۲۰ قاعده بررسی میشوند. با @subchain، این بررسی یک بار انجام میشود که منجر به پالایش سریعتر شبکه و بار پردازشی کمتر میگردد:
table filter chain INPUT { saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) @subchain { proto tcp dport (http https ssh) ACCEPT; proto udp dport domain ACCEPT; } }بهصورت اختیاری، میتوانید نام زیرزنجیره (sub chain) را تعیین کنید:
saddr (1.2.3.4 2.3.4.5 3.4.5.6) @subchain "foobar" { proto tcp dport (http https ssh) ACCEPT; proto udp dport domain ACCEPT; }نام میتواند یک رشتهٔ متنی درون گیومه یا یک عبارت بسطیافتهٔ ferm مانند @cat("interface_", $iface) یا @substr($var,0,20) باشد.
میتوانید با تعریف صریح یک زنجیرهٔ سفارشی نیز به همین نتیجه دست یابید، اما ممکن است احساس کنید که استفاده از @subchain به تایپ کمتری نیاز دارد.
- @gotosubchain ["CHAIN-NAME"] { ... }
- مانند @subchain عمل میکند به جز اینکه بهجای استفاده از هدف jump، از هدف goto استفاده میکند. برای مشاهدهٔ تفاوت میان این دو هدف، به بحث زیر مراجعه کنید.
- @preserve
- قواعد
موجود
زنجیرهٔ
جاری را حفظ
میکند:
chain (foo bar) @preserve;
با این گزینه، ferm مجموعه قواعد پیشین را با استفاده از iptables-save بارگذاری کرده، تمام زنجیرههای «حفظشده» را استخراج میکند و دادههای آنها را در خروجی قرار میدهد.
زنجیرههای «حفظشده» نباید توسط ferm تغییر یابند: نه هیچ قاعده و نه هیچ سیاستی.
اگر نام زنجیره با یک اسلش آغاز و پایان یابد، ferm آن را بهعنوان یک عبارت منظم Perl تفسیر میکند و تمام زنجیرههای منطبق را حفظ مینماید. برای نمونه، دستور زیر تمام زنجیرههای دارای پیشوند KUBE-SEP- را حفظ میکند:
chain "/^KUBE-SEP-.*/" @preserve;
- interface [interface-name]
-
تعریف نام رابط شبکه؛ کارت شبکه خارجی شما مانند eth0، یا اتصال dialup مانند ppp1، یا هر دستگاه دیگری که میخواهید بستههای عبوری را با آن تطبیق دهید. این گزینه معادل سوییچ "-i" در iptables(8) است.
- outerface [interface-name]
-
مشابه interface، تنها برای تطبیق رابط شبکه خروجی یک بسته، همانطور که در iptables(8) وجود دارد.
- protocol [protocol-name|protocol-number]
-
پروتکلهایی که در حال حاضر توسط هسته پشتیبانی میشوند شامل TCP، UDP و ICMP، یا شمارههای متناظر آنها هستند. به جای protocol، میتوانید از نام کوتاه proto نیز استفاده کنید.
- saddr|daddr [address-spec]
-
بستههایی که از نشانی مشخصشده سرچشمه میگیرند (saddr) یا به مقصد نشانی مشخصشده هستند (daddr) را تطبیق میدهد. مثالها: saddr 192.168.0.0/24 ACCEPT; # (identical to the next one:) saddr 192.168.0.0/255.255.255.0 ACCEPT; daddr my.domain.com ACCEPT; - fragment
- مشخص
میکند که
فقط
بستههای
تکهتکهشده
(fragmented) IP باید
تطبیق داده
شوند.
هنگامی که
بستهها از
حداکثر
اندازه
بستهای که
سیستم شما
میتواند
مدیریت کند
(به نام Maximum Transmission Unit
یا MTU)
بزرگتر
باشند، به
قطعات
کوچکتر
خرد شده و
یکییکی به
عنوان
بستههای
مجزا ارسال
میشوند.
اگر
میخواهید
مقدار MTU را
برای سیستم
خود پیدا
کنید به ifconfig(8)
مراجعه
کنید (مقدار
پیشفرض
معمولاً
۱۵۰۰ بایت
است).
تکهبستهها (Fragments) مکرراً در حملات DOS استفاده میشوند، زیرا هیچ راهی برای پی بردن به مبدأ واقعی یک بسته تکهتکهشده وجود ندارد.
- sport|dport [port-spec]
- بستهها را
روی پورت
مشخصشدهی
TCP یا UDP مطابقت
میدهد. «sport»
پورت مبدأ
را تطبیق
میدهد و dport
پورت مقصد
را تطبیق
میدهد.
این تطبیق فقط پس از مشخص کردن «protocol tcp» یا «protocol udp» قابل استفاده است، زیرا تنها این دو پروتکل در واقع دارای پورت هستند.
و چند مثال از پورتها/محدودههای معتبر:
dport 80 ACCEPT; dport http ACCEPT; dport ssh:http ACCEPT; dport 0:1023 ACCEPT; # equivalent to :1023 dport 1023:65535 ACCEPT;
- syn
- مشخص میکند که پرچم SYN در یک بسته TCP باید تطبیق داده شود؛ پرچمهایی که برای برقراری اتصالهای جدید TCP به کار میروند. شما میتوانید با استفاده از این، اتصالهای ورودی را شناسایی کرده و تصمیم بگیرید که آیا میخواهید به آنها اجازه دهید یا خیر. بستههایی که این پرچم را ندارند احتمالاً متعلق به اتصالی هستند که قبلاً برقرار شده است، بنابراین عبور دادن آنها تا حد معقولی امن تلقی میشود.
- module [module-name]
- بارگذاری
یک ماژول iptables.
بیشتر
ماژولها
کلیدواژههای
تطبیق
بیشتری
ارائه
میدهند. در
ادامه به
این موضوع
خواهیم
پرداخت.
به جای module، میتوانید از نام کوتاه mod نیز استفاده کنید.
کلیدواژههای هدف پایه (Basic target keywords)
- jump [custom-chain-name]
- پرش به یک زنجیره سفارشی. اگر هیچ قانونی در زنجیره سفارشی مطابقت نیافت، netfilter به قانون بعدی در زنجیره قبلی بازمیگردد.
- goto [custom-chain-name]
- رفتن به یک زنجیره سفارشی. برخلاف گزینه jump، مقدار RETURN پردازش را در این زنجیره ادامه نمیدهد، بلکه در زنجیرهای ادامه خواهد یافت که ما را از طریق jump فراخوانی کرده بود.
- ACCEPT
- بستههای منطبق را میپذیرد.
- DROP
- بستههای منطبق را بدون هیچ اعلانی دور میاندازد.
- REJECT
- بستههای
منطبق را رد
میکند،
یعنی یک
بسته ICMP برای
فرستنده
ارسال
میکند که
به طور
پیشفرض port-unreachable
است.
میتوانید
نوع دیگری
از ICMP را مشخص
کنید.
REJECT; # default to icmp-port-unreachable REJECT reject-with icmp-net-unreachable;
برای جزئیات بیشتر عبارت «iptables -j REJECT -h» را تایپ کنید.
- RETURN
- خاتمه دادن به زنجیره فعلی و بازگشت به زنجیره فراخواننده (در صورتی که از «jump [custom-chain-name]» استفاده شده باشد).
- NOP
- هیچ عملی انجام نمیدهد.
کلیدواژههای تکمیلی (ADDITIONAL KEYWORDS)
سامانه Netfilter به صورت ماژولار است. ماژولها ممکن است اهداف و کلیدواژههای تطبیق بیشتری ارائه دهند. فهرست ماژولهای netfilter مدام در حال رشد است و ferm تلاش میکند پشتیبانی از همه آنها را بهروز نگه دارد. این بخش ماژولهایی را که در حال حاضر پشتیبانی میشوند شرح میدهد.
ماژولهای تطبیق iptables (iptables match modules)
- account
- محاسبه
ترافیک
برای تمام
میزبانها
در
شبکه/ماسکشبکه
تعریفشده.
این یکی از
ماژولهای
تطبیق است
که مانند یک
هدف رفتار
میکند،
یعنی
عمدتاً
باید از هدف
NOP استفاده
کنید.
mod account aname mynetwork aaddr 192.168.1.0/24 ashort NOP;
- addrtype
- بررسی نوع
نشانی؛ یا
نشانی مبدأ
یا نشانی
مقصد.
mod addrtype src-type BROADCAST; mod addrtype dst-type LOCAL;
برای جزئیات بیشتر عبارت «iptables -m addrtype -h» را تایپ کنید.
- ah
- سرایند SPI را
در یک بسته AH
بررسی
میکند.
mod ah ahspi 0x101; mod ah ahspi ! 0x200:0x2ff;
آرگومانهای اضافی برای IPv6:
mod ah ahlen 32 ACCEPT; mod ah ahlen !32 ACCEPT; mod ah ahres ACCEPT;
- bpf
- تطبیق با
استفاده از
Linux Socket Filter.
mod bpf bytecode "4,48 0 0 9,21 0 1 6,6 0 0 1,6 0 0 0";
- cgroup
- تطبیق با
استفاده از
سلسلهمراتب
cgroupsv2 یا cgroup
موروثی net_cls.
mod cgroup path ! example/path ACCEPT;
مسیر نسبت به ریشه سلسلهمراتب cgroupsv2 سنجیده شده و با بخش ابتدایی مسیر یک فرایند در سلسلهمراتب مقایسه میشود.
mod cgroup cgroup 10:10 DROP; mod cgroup cgroup 1048592 DROP;
با مقدار "net_cls.classid" تنظیمشده بر روی cgroup موروثی net_cls فرایند مطابقت داده میشود. کلاس ممکن است به صورت یک جفت هگزادسیمال major:minor (به tc(8) مراجعه کنید) یا به صورت دهدهی مشخص شود، بنابراین این دو قانون معادل یکدیگرند.
- comment
- یک کامنت تا
حداکثر ۲۵۶
نویسه به یک
قانون
اضافه
میکند،
بدون
اینکه
اثری
بگذارد.
توجه داشته
باشید که
برخلاف
کامنتهای
ferm ('#')، این
کامنت در
خروجی «iptables -L»
نمایش داده
خواهد شد.
mod comment comment "This is my comment." ACCEPT;
عبارت «mod comment» میتواند حذف شود، زیرا ferm آن را به طور خودکار درج میکند.
- condition
- در صورتی
تطبیق
مییابد که
مقدار درون
/proc/net/ipt_condition/NAME برابر
با 1 باشد
(این مسیر
برای دامنه
ip6 برابر با
/proc/net/ip6t_condition/NAME است).
mod condition condition (abc def) ACCEPT; mod condition condition !foo ACCEPT;
- connbytes
- تطبیق بر
اساس
اینکه یک
اتصال (یا
یکی از دو
جریان
تشکیلدهنده
اتصال)
تاکنون چه
مقدار بایت
یا بسته
انتقال
داده است،
یا بر اساس
میانگین
بایت بر هر
بسته.
mod connbytes connbytes 65536: connbytes-dir both connbytes-mode bytes ACCEPT; mod connbytes connbytes !1024:2048 connbytes-dir reply connbytes-mode packets ACCEPT;
مقادیر معتبر برای connbytes-dir عبارتند از: original، reply، both؛ و برای connbytes-mode عبارتند از: packets، bytes، avgpkt..IP connlabel 8 این ماژول connlabelها را با یک اتصال تطبیق داده یا به آن اضافه میکند.
mod connlabel label "name"; mod connlabel label "name" set;
- connlimit
- به شما
امکان
میدهد
تعداد
اتصالات
همزمان TCP
به یک
کارگزار را
به ازای هر
نشانی IP
کلاینت (یا
بلوک نشانی)
محدود کنید.
mod connlimit connlimit-above 4 REJECT; mod connlimit connlimit-above !4 ACCEPT; mod connlimit connlimit-above 4 connlimit-mask 24 REJECT; mod connlimit connlimit-upto 4 connlimit-saddr REJECT; mod connlimit connlimit-above 4 connlimit-daddr REJECT;
- connmark
- فیلد نشان (mark)
مرتبط با
اتصال را که
توسط هدف CONNMARK
تنظیم شده
است، بررسی
میکند.
mod connmark mark 64; mod connmark mark 6/7;
- conntrack
- اطلاعات
ردیابی
اتصال را
بررسی
میکند.
mod conntrack ctstate (ESTABLISHED RELATED); mod conntrack ctproto tcp; mod conntrack ctorigsrc 192.168.0.2; mod conntrack ctorigdst 1.2.3.0/24; mod conntrack ctorigsrcport 67; mod conntrack ctorigdstport 22; mod conntrack ctreplsrc 2.3.4.5; mod conntrack ctrepldst ! 3.4.5.6; mod conntrack ctstatus ASSURED; mod conntrack ctexpire 60; mod conntrack ctexpire 180:240;
دستور "iptables -m conntrack -h" را برای جزئیات تایپ کنید.
- cpu
- پردازندهای
(CPU) که در حال
پردازش این
بسته است را
تطبیق
میدهد.
mod cpu cpu 0;
- dccp
- ویژگیهای
ویژه DCCP
(پروتکل
کنترل
ازدحام
دیتاگرام)
را بررسی
میکند. این
ماژول
هنگام
استفاده از
"protocol dccp" به
صورت
خودکار
بارگذاری
میشود.
proto dccp sport 1234 dport 2345 ACCEPT; proto dccp dccp-types (SYNCACK ACK) ACCEPT; proto dccp dccp-types !REQUEST DROP; proto dccp dccp-option 2 ACCEPT;
- dscp
- فیلد ۶ بیتی
DSCP را در فیلد
TOS تطبیق
میدهد.
mod dscp dscp 11; mod dscp dscp-class AF41;
- dst
- پارامترها
را در
سرآیند Destination Options
(در IPv6) تطبیق
میدهد.
mod dst dst-len 10; mod dst dst-opts (type1 type2 ...);
- ecn
- بیتهای ECN
در یک
سرآیند TCP
برای IPv4 را
تطبیق
میدهد.
mod ecn ecn-tcp-cwr; mod ecn ecn-tcp-ece; mod ecn ecn-ip-ect 2;
دستور "iptables -m ecn -h" را برای جزئیات تایپ کنید.
- esp
- سرآیند SPI را
در یک بسته ESP
بررسی
میکند.
mod esp espspi 0x101; mod esp espspi ! 0x200:0x2ff;
- eui64
- "این ماژول
بخش EUI-64 یک
نشانی IPv6 با
پیکربندی
خودکار
بدونحالت
را تطبیق
میدهد. این
ماژول EUI-64
بهدستآمده
از نشانی MAC
مبدأ در
فریم اترنت
را با ۶۴
بیت پایینی
نشانی مبدأ
IPv6 مقایسه
میکند. اما
بیت "Universal/Local"
مقایسه
نمیشود.
این ماژول
سایر
فریمهای
لایه پیوند
را تطبیق
نمیدهد، و
تنها در
زنجیرههای
PREROUTING، INPUT و FORWARD
معتبر است."
mod eui64 ACCEPT;
- fuzzy
- "این ماژول
یک محدودیت
نرخ بر پایه
کنترلکننده
منطق فازی [FLC]
را تطبیق
میدهد."
mod fuzzy lower-limit 10 upper-limit 20 ACCEPT;
- geoip
- بستهها را
بر اساس
موقعیت
جغرافیایی
آنها
تطبیق
میدهد. (به
یک GeoDB
نصبشده
نیاز دارد.)
mod geoip src-cc "CN,VN,KR,BH,BR,AR,TR,IN,HK" REJECT; mod geoip dst-cc "DE,FR,CH,AT" ACCEPT;
- hbh
- سرآیند Hop-by-Hop Options
را تطبیق
میدهد (ip6).
mod hbh hbh-len 8 ACCEPT; mod hbh hbh-len !8 ACCEPT; mod hbh hbh-opts (1:4 2:8) ACCEPT;
- hl
- فیلد Hop Limit را
تطبیق
میدهد (ip6).
mod hl hl-eq (8 10) ACCEPT; mod hl hl-eq !5 ACCEPT; mod hl hl-gt 15 ACCEPT; mod hl hl-lt 2 ACCEPT;
- helper
- بررسی
میکند
کدام ماژول
کمکی conntrack این
اتصال را
ردیابی
میکند.
درگاه ممکن
است با "-portnr"
مشخص شود.
mod helper helper irc ACCEPT; mod helper helper ftp-21 ACCEPT;
- icmp
- ویژگیهای
ویژه ICMP را
بررسی
میکند. این
ماژول
هنگام
استفاده از
"protocol icmp" به
صورت
خودکار
بارگذاری
میشود.
proto icmp icmp-type echo-request ACCEPT;
این گزینه همچنین میتواند در دامنه ip6 استفاده شود، هرچند که در ip6tables با نام icmpv6 شناخته میشود.
از "iptables -p icmp "-h"" برای دریافت فهرستی از انواع معتبر ICMP استفاده کنید.
- iprange
- محدودهای
از
نشانیهای
IPv4 را تطبیق
میدهد.
mod iprange src-range 192.168.2.0-192.168.3.255; mod iprange dst-range ! 192.168.6.0-192.168.6.255;
- ipv4options
- بر اساس
گزینههای
سرآیند IPv4
مانند
مسیریابی
مبدأ (source routing)،
ثبت مسیر (record
route)، برچسب
زمانی (timestamp) و
هشدار روتر
(router-alert) تطبیق
میدهد.
mod ipv4options ssrr ACCEPT; mod ipv4options lsrr ACCEPT; mod ipv4options no-srr ACCEPT; mod ipv4options !rr ACCEPT; mod ipv4options !ts ACCEPT; mod ipv4options !ra ACCEPT; mod ipv4options !any-opt ACCEPT;
- ipv6header
- سرآیند
الحاقی IPv6 را
تطبیق
میدهد (ip6).
mod ipv6header header !(hop frag) ACCEPT; mod ipv6header header (auth dst) ACCEPT; مشابه 'mod limit'، اما قابلیت تعیین محدودیت به ازای مقصد یا پورت را که در یک جدول هش (hash table) مدیریت میشود، اضافه میکند. mod hashlimit hashlimit 10/minute hashlimit-burst 30/minute hashlimit-mode dstip hashlimit-name foobar ACCEPT;مقادیر ممکن برای hashlimit-mode عبارتند از: dstip dstport srcip srcport (یا فهرستی شامل بیش از یکی از این موارد).
تنظیمات بیشتری نیز در دسترس است؛ برای مشاهده مستندات، دستور «iptables -m hashlimit -h» را تایپ کنید.
- ipvs
- تطبیق
ویژگیهای
اتصالات IPVS.
mod ipvs ipvs ACCEPT; # packet belongs to an IPVS connection mod ipvs vproto tcp ACCEPT; # VIP protocol to match; by number or name, e.g. "tcp mod ipvs vaddr 1.2.3.4/24 ACCEPT; # VIP address to match mod ipvs vport http ACCEPT; # VIP port to match mod ipvs vdir ORIGINAL ACCEPT; # flow direction of packet mod ipvs vmethod GATE ACCEPT; # IPVS forwarding method used mod ipvs vportctl 80; # VIP port of the controlling connection to match
- length
- بررسی طول
بسته.
mod length length 128; # exactly 128 bytes mod length length 512:768; # range mod length length ! 256; # negated
- limit
- محدود کردن
نرخ
بستهها.
mod limit limit 1/second; mod limit limit 15/minute limit-burst 10;
برای جزئیات بیشتر عبارت «iptables -m limit -h» را تایپ کنید.
- mac
- تطبیق
نشانی MAC
مبدأ.
mod mac mac-source 01:23:45:67:89;
- mark
- بستهها را
بر اساس
فیلد mark
آنها در netfilter
تطبیق
میدهد. این
مقدار
میتواند
یک عدد صحیح
۳۲ بیتی بین
0 تا 4294967295 باشد.
mod mark mark 42;
- mh
- سرایند
پویایی (mobility header)
را تطبیق
میدهد
(دامنهٔ ip6).
proto mh mh-type binding-update ACCEPT;
- multiport
- تطبیق
مجموعهای
از
پورتهای
مبدأ یا
مقصد (تنها UDP
و TCP).
mod multiport source-ports (https ftp); mod multiport destination-ports (mysql domain);
این قاعده مزیت بزرگی نسبت به «dport» و «sport» دارد: بهجای ایجاد یک قاعده برای هر پورت، تنها یک قاعده برای حداکثر ۱۵ پورت تولید میکند.
به عنوان میانبُر، میتوانید از «sports» و «dports» (بدون «mod multiport») استفاده کنید:
sports (https ftp); dports (mysql domain);
- nfacct
- افزودن
حسابداری
بستهها
(بایتها +
بستهها).
همچنین
ابزار فضای
کاربری «nfacct»
را ببینید.
mod nfacct nfacct-name my-nfacct-object;
- nth
- تطبیق هر
n-اُمین
بسته.
mod nth every 3; mod nth counter 5 every 2; mod nth start 2 every 3; mod nth start 5 packet 2 every 6;
برای جزئیات بیشتر عبارت «iptables -m nth -h» را تایپ کنید.
- osf
- تطبیق
بستهها بر
اساس
سیستمعامل
فرستنده.
mod osf genre Linux; mod osf ! genre FreeBSD ttl 1 log 1;
برای جزئیات بیشتر عبارت «iptables -m osf -h» را تایپ کنید.
- owner
- بررسی
اطلاعات
دربارهٔ
ایجادکنندهٔ
بسته، از
جمله شناسه
کاربر (user id)،
شناسه گروه
(group id)، شناسه
فرایند (process id)،
شناسه نشست
(session id) و نام
دستور.
mod owner uid-owner 0; mod owner gid-owner 1000; mod owner pid-owner 5432; mod owner sid-owner 6543; mod owner cmd-owner "sendmail";
(گزینههای «cmd-owner»، «pid-owner» و «sid-owner» نیازمند وصلههای خاص هسته هستند که در هستهٔ اصلی (vanilla) لینوکس گنجانده نشدهاند)
- physdev
- دستگاه
فیزیکیای
را که بسته
از آن وارد
ماشین شده
یا در شرف
خروج از آن
است، تطبیق
میدهد. این
ویژگی برای
رابطهای
پلشده (bridged)
مفید است.
mod physdev physdev-in ppp1; mod physdev physdev-out eth2; mod physdev physdev-is-in; mod physdev physdev-is-out; mod physdev physdev-is-bridged;
- pkttype
- بررسی نوع
بسته در
لایه پیوند
داده (link-layer).
mod pkttype pkt-type unicast; mod pkttype pkt-type broadcast; mod pkttype pkt-type multicast;
- policy
- سیاست IPsec
اعمالشده
روی این
بسته را
تطبیق
میدهد.
mod policy dir out pol ipsec ACCEPT; mod policy strict reqid 23 spi 0x10 proto ah ACCEPT; mod policy mode tunnel tunnel-src 192.168.1.2 ACCEPT; mod policy mode tunnel tunnel-dst 192.168.2.1 ACCEPT; mod policy strict next reqid 24 spi 0x11 ACCEPT;
توجه داشته باشید که کلیدواژهٔ proto به عنوان حالت خلاصهٔ protocol (ماژول تطبیق داخلی) نیز استفاده میشود. میتوانید این تداخل را با استفادهٔ همیشگی از کلیدواژهٔ کامل protocol برطرف کنید.
- psd
- تشخیص پویش
پورتهای TCP/UDP.
mod psd psd-weight-threshold 21 psd-delay-threshold 300 psd-lo-ports-weight 3 psd-hi-ports-weight 1 DROP;
- quota
- سهمیههای
شبکه را با
کاهش یک
شمارندهٔ
بایت به
ازای هر
بسته
پیادهسازی
میکند.
mod quota quota 65536 ACCEPT;
- random
- تطبیق
درصدی
تصادفی از
تمامی
بستهها.
mod random average 70;
- realm
- تطبیق
قلمرو
مسیریابی (routing
realm). در
محیطهایی
که از BGP
استفاده
میکنند
مفید است.
mod realm realm 3;
- recent
- علامتگذاری
موقت
نشانیهای
IP مبدأ.
mod recent set; mod recent rcheck seconds 60; mod recent set rsource name "badguy"; mod recent set rdest; mod recent rcheck rsource name "badguy" seconds 60; mod recent update seconds 120 hitcount 3 rttl; mod recent mask 255.255.255.0 reap;
این ماژول netfilter یک نقص طراحی دارد: هرچند به عنوان یک ماژول تطبیق (match) پیادهسازی شده است، اما هنگام استفاده از کلیدواژهٔ «set» رفتاری شبیه به هدف (target) از خود نشان میدهد.
http://snowman.net/projects/ipt_recent.IP rpfilter 8 بررسی میکند که آیا پاسخ به بسته از همان رابطی ارسال میشود که بسته از آن دریافت شده است یا خیر. بستههای دریافتی از رابط loopback همواره مجاز هستند.
mod rpfilter proto tcp loose RETURN; mod rpfilter validmark accept-local RETURN; mod rpfilter invert DROP;
این ماژول netfilter روش ارجح برای انجام فیلترسازی مسیر معکوس (reverse path filtering) برای IPv6 و یک جایگزین قدرتمند برای بررسیهای کنترلشده توسط sysctl net.ipv4.conf.*.rp_filter است.
- rt
- سرآیند
مسیریابی IPv6
را تطبیق
میدهد (فقط
ip6).
mod rt rt-type 2 rt-len 20 ACCEPT; mod rt rt-type !2 rt-len !20 ACCEPT; mod rt rt-segsleft 2:3 ACCEPT; mod rt rt-segsleft !4:5 ACCEPT; mod rt rt-0-res rt-0-addrs (::1 ::2) rt-0-not-strict ACCEPT;
- sctp
- ویژگیهای
خاص SCTP (Stream Control Transmission Protocol)
را بررسی
میکند. این
ماژول
هنگام
استفاده از
"protocol sctp" بهطور
خودکار
بارگیری
میشود.
proto sctp sport 1234 dport 2345 ACCEPT; proto sctp chunk-types only DATA:Be ACCEPT; proto sctp chunk-types any (INIT INIT_ACK) ACCEPT; proto sctp chunk-types !all (HEARTBEAT) ACCEPT;
برای دریافت فهرستی از انواع معتبر chunk، از دستور "iptables -p sctp "-h"" استفاده کنید.
- set
- آدرس IP،
پورت یا
آدرس MAC مبدأ
یا مقصد را
در برابر یک
مجموعه (set)
بررسی
میکند.
mod set set badguys src DROP;
برای اطلاعات بیشتر http://ipset.netfilter.org را ببینید.
- state
- وضعیت
ردگیری
اتصال (connection tracking)
را بررسی
میکند.
mod state state INVALID DROP; mod state state (ESTABLISHED RELATED) ACCEPT;
برای مشاهدهٔ جزئیات، دستور "iptables -m state -h" را وارد کنید.
- statistic
- جانشین nth و
random که در حال
حاضر در
صفحه مان
iptables(8) مستند
نشده است.
mod statistic mode random probability 0.8 ACCEPT; mod statistic mode nth every 5 packet 0 DROP;
- string
- یک رشته را
تطبیق
میدهد.
mod string string "foo bar" ACCEPT; mod string algo kmp from 64 to 128 hex-string "deadbeef" ACCEPT;
- tcp
- ویژگیهای
خاص TCP را
بررسی
میکند. این
ماژول
هنگام
استفاده از
"protocol tcp" بهطور
خودکار
بارگیری
میشود.
proto tcp sport 1234; proto tcp dport 2345; proto tcp tcp-flags (SYN ACK) SYN; proto tcp tcp-flags ! (SYN ACK) SYN; proto tcp tcp-flags ALL (RST ACK); proto tcp syn; proto tcp tcp-option 2; proto tcp mss 512;
برای مشاهدهٔ جزئیات، دستور "iptables -p tcp -h" را وارد کنید.
- tcpmss
- فیلد TCP MSS
مربوط به یک
بستهٔ SYN یا SYN/ACK
را بررسی
میکند.
mod tcpmss mss 123 ACCEPT; mod tcpmss mss 234:567 ACCEPT;
- time
- بررسی
میکند که
آیا زمان
رسیدن یک
بسته در
محدودهٔ
ارائهشده
قرار دارد
یا خیر.
mod time timestart 12:00; mod time timestop 13:30; mod time timestart 22:00 timestop 07:00 contiguous; mod time days (Mon Wed Fri); mod time datestart 2005:01:01; mod time datestart 2005:01:01:23:59:59; mod time datestop 2005:04:01; mod time monthday (30 31); mod time weekdays (Wed Thu); mod time timestart 12:00; mod time timestart 12:00 kerneltz;
برای مشاهدهٔ جزئیات، دستور "iptables -m time -h" را وارد کنید.
- tos
- یک بسته را
بر اساس
مقدار
مشخصشده TOS
تطبیق
میدهد.
mod tos tos Minimize-Cost ACCEPT; mod tos tos !Normal-Service ACCEPT;
برای مشاهدهٔ جزئیات، دستور "iptables -m tos -h" را وارد کنید.
- ttl
- فیلد TTL (طول
عمر / time to live) را در
سرآیند IP
تطبیق
میدهد.
mod ttl ttl-eq 12; # ttl equals mod ttl ttl-gt 10; # ttl greater than mod ttl ttl-lt 16; # ttl less than
- u32
- دادههای
خام بسته را
مقایسه
میکند.
میتوانید
بیش از یک
فیلتر را در
یک فهرست ferm
مشخص کنید؛
این
فیلترها به
چندین
قانون
گسترش
نمییابند.
mod u32 u32 '6&0xFF=1' ACCEPT; mod u32 u32 ('27&0x8f=7' '31=0x527c4833') DROP; - unclean
- بستههایی را که ناقص، مخدوش یا غیرعادی به نظر میرسند تطبیق میدهد. این تطبیق هیچ پارامتر دیگری ندارد..SS "پیمانههای هدف iptables (iptables target modules)" هدفهای اضافی زیر در ferm در دسترس هستند، به شرطی که آنها را در هسته (کرنل) خود فعال کرده باشید:
- CHECKSUM
- محاسبه
مجموع
مقابلهای
(checksum) بسته.
CHECKSUM checksum-fill;
- CLASSIFY
- تنظیم کلاس
CBQ.
CLASSIFY set-class 3:50;
- CLUSTERIP
- پیکربندی
یک کلاستر
ساده از
گرهها که
آدرس IP و MAC
مشخصی را به
اشتراک
میگذارند.
اتصالها
بهصورت
ایستا میان
گرهها
توزیع
میشوند.
CLUSTERIP new hashmode sourceip clustermac 00:12:34:45:67:89 total-nodes 4 local-node 2 hash-init 12345;
- CONNMARK
- مقدار
نشانهگذاری
(mark) netfilter مرتبط با
یک اتصال را
تنظیم
میکند.
CONNMARK set-xmark 42/0xff; CONNMARK set-mark 42; CONNMARK save-mark; CONNMARK restore-mark; CONNMARK save-mark nfmask 0xff ctmask 0xff; CONNMARK save-mark mask 0x7fff; CONNMARK restore-mark mask 0x8000; CONNMARK and-mark 0x7; CONNMARK or-mark 0x4; CONNMARK xor-mark 0x7; CONNMARK and-mark 0x7;
- CONNSECMARK
- این پیمانه
نشانههای
امنیتی را
از بستهها
به
اتصالها
(در صورت
بدون برچسب
بودن)، و از
اتصالها
باز به
بستهها
(باز هم
تنها در
صورت بدون
برچسب بودن)
کپی میکند.
بهطور
معمول در
ترکیب با SECMARK
استفاده
میشود و
تنها در
جدول mangle
معتبر است.
CONNSECMARK save; CONNSECMARK restore;
- CT
- تنظیم
پارامترهای
ردیابی
اتصال (connection tracking).
CT notrack; CT helper ftp; CT ctevents new,related; CT expevents new; CT zone 1; CT zone mark; CT zone-orig mark; CT zone-reply mark; CT timeout 180;
- DNAT to [ip-address|ip-range|ip-port-range]
- تغییر آدرس
مقصد بسته.
DNAT to 10.0.0.4; DNAT to 10.0.0.4:80; DNAT to 10.0.0.4:1024-2048; DNAT to 10.0.1.1-10.0.1.20;
- DNPT
- ترجمه
بدونحالت
پیشوند
شبکه IPv6 به IPv6
در مقصد (Network Prefix
Translation) را فراهم
میکند.
DNPT src-pfx 2001:42::/16 dst-pfx 2002:42::/16;
- ECN
- این هدف
امکان دور
زدن
انتخابی
سیاهچالههای
شناختهشده
ECN را فراهم
میکند. این
هدف تنها در
جدول mangle قابل
استفاده
است.
ECN ecn-tcp-remove;
- HL
- تغییر فیلد
Hop Limit در IPv6 (فقط در
ip6/mangle).
HL hl-set 5; HL hl-dec 2; HL hl-inc 1;
- HMARK
- مانند MARK،
یعنی fwmark را
تنظیم
میکند،
اما نشان از
درهمسازی
(هش کردن)
گزینشگر
بسته
انتخابی
محاسبه
میشود.
HMARK hmark-tuple "src" hmark-mod "1" hmark-offset "1" hmark-src-prefix 192.168.1.0/24 hmark-dst-prefix 192.168.2.0/24 hmark-sport-mask 0x1234 hmark-dport-mask 0x2345 hmark-spi-mask 0xdeadbeef hmark-proto-mask 0x42 hmark-rnd 0xcoffee;
- IDLETIMER
- این هدف
میتواند
برای تشخیص
اینکه چه
زمانی
رابطها
برای مدت
معینی
بیکار
بودهاند،
استفاده
شود.
IDLETIMER timeout 60 label "foo";
- IPV4OPTSSTRIP
- حذف تمام
گزینههای
IP از یک بسته.
این پیمانه
هیچ
گزینهای
نمیپذیرد.
IPV4OPTSSTRIP;
- JOOL
- بستهها را
برای ترجمه
باحالت (stateful) NAT64
از طریق JOOL
تحویل
میدهد. این
هدف
نیازمند
نصب بودن JOOL
روی سیستم و
بارگذاری
پیمانه
هسته jool است.
JOOL instance "foo";
- JOOL_SIIT
- بستهها را
برای ترجمه
بدونحالت
IP/ICMP (یا SIIT) از
طریق JOOL
تحویل
میدهد. این
هدف
نیازمند
نصب بودن JOOL
روی سیستم و
بارگذاری
پیمانه
هسته jool_siit است.
JOOL_SIIT instance "foo";
- LED
- یک محرک LED (یا
LED-trigger) ایجاد
میکند که
میتواند
به
چراغهای
نشانگر
سیستم متصل
شود، تا
هنگام عبور
بستههایی
مشخص از
سیستم،
چشمک بزنند
یا روشن
شوند.
LED led-trigger-id "foo" led-delay 100 led-always-blink;
- LOG
- ثبت تمام
بستههای
منطبق با
این قاعده
در
وقایعنگار
هسته (kernel log).
مراقب
طغیان
لاگها (log flooding)
باشید. توجه
داشته
باشید که
این یک «هدف
غیرپایاندهنده»
(non-terminating target) است،
یعنی
پیمایش
قواعد در
قاعده بعدی
ادامه
مییابد.
LOG log-level warning log-prefix "Look at this: "; LOG log-tcp-sequence log-tcp-options; LOG log-ip-options;
- MARK
- فیلد
نشانهگذاری
(mark) مربوط به netfilter
را برای
بسته تنظیم
میکند (یک
عدد صحیح ۳۲
بیتی بین 0 و
4294967295):
MARK set-mark 42; MARK set-xmark 7/3; MARK and-mark 31; MARK or-mark 1; MARK xor-mark 12;
- MASQUERADE
- بستههای
منطبق را
ماسک (Masquerade)
میکند.
میتواند
بهصورت
اختیاری با
یک درگاه یا
بازه درگاه
برای iptables
همراه شود.
آن را
بهصورت
"123"، "123-456" یا
"123:456" مشخص
کنید.
پارامتر
بازه درگاه
تعیین
میکند که
اتصالات
ماسکشده
باید از
کدام
درگاههای
محلی مبدا
بگیرند.
MASQUERADE; MASQUERADE to-ports 1234:2345; MASQUERADE to-ports 1234:2345 random; MASQUERADE to-ports 1234:2345 random-fully;
- MIRROR
- هدف نمایشی
و آزمایشی
که فیلدهای
مبدا و مقصد
را در
سرآیند IP
معکوس
میکند.
MIRROR; نگاشت یک شبکه کامل بر روی شبکهای دیگر در جدول nat. NETMAP to 192.168.2.0/24; - NOTRACK
- غیرفعال
کردن
ردگیری
اتصال برای
تمام
بستههای
منطبق با آن
قاعده.
proto tcp dport (135:139 445) NOTRACK;
- RATEEST
-
RATEEST rateest-name "foo" rateest-interval 60s rateest-ewmalog 100; proto tcp dport (135:139 445) NOTRACK;
- NFLOG
- ثبت گزارش
(لاگ)
بستهها از
طریق netlink؛ این
هدف جانشین
ULOG است.
NFLOG nflog-group 5 nflog-prefix "Look at this: "; NFLOG nflog-range 256; NFLOG nflog-threshold 10;
- NFQUEUE
- صفبندی در
فضای
کاربر،
نیازمند
پشتیبانی
هسته از nfnetlink_queue
است.
proto tcp dport ftp NFQUEUE queue-num 20;
- QUEUE
- صفبندی در
فضای
کاربر،
نسخه پیشین
NFQUEUE. تمام
بستهها به
صف 0 ارسال
میشوند.
proto tcp dport ftp QUEUE;
- REDIRECT to-ports [ports]
- پروکسی
شفاف: تغییر
IP مقصد بسته
به خود
ماشین.
proto tcp dport http REDIRECT to-ports 3128; proto tcp dport http REDIRECT to-ports 3128 random;
- SAME
- مشابه SNAT،
اما یک
کلاینت
برای تمام
اتصالات
خود به همان
IP مبدأ
نگاشت
میشود.
SAME to 1.2.3.4-1.2.3.7; SAME to 1.2.3.8-1.2.3.15 nodst; SAME to 1.2.3.16-1.2.3.31 random;
- SECMARK
- برای تنظیم
مقدار نشان
امنیتی (security mark)
مرتبط با
بسته جهت
استفاده
توسط
زیرسیستمهای
امنیتی
مانند SELinux به
کار میرود.
این هدف
تنها در
جدول mangle
معتبر است.
SECMARK selctx "system_u:object_r:httpd_packet_t:s0";
- SET [add-set|del-set] [setname] [flag(s)]
- افزودن IP به
مجموعه (set)
مشخصشده.
http://ipset.netfilter.org را
ببینید.
proto icmp icmp-type echo-request SET add-set badguys src; SET add-set "foo" timeout 60 exist;
- SNAT to [ip-address|ip-range|ip-port-range]
- تغییر
نشانی مبدأ
بسته.
SNAT to 1.2.3.4; SNAT to 1.2.3.4:20000-30000; SNAT to 1.2.3.4 random;
- SNPT
- ترجمه
بدونحالت
پیشوند
شبکه مبدأ
از IPv6 به IPv6 را
فراهم
میکند.
SNPT src-pfx 2001:42::/16 dst-pfx 2002:42::/16;
- SYNPROXY
- پروکسی
دستتکانی
سهمرحلهای
TCP: فایروال
دستتکانی
سهمرحلهای
TCP را مدیریت
کرده و تنها
پس از پایان
دستتکانی
با کلاینت،
اتصالی را
با سوکت
کارساز
برقرار
میکند.
SYNPROXY wscale 7 mss 1460 timestamp sack-perm
- TCPMSS
- تغییر
مقدار MSS
بستههای TCP SYN.
TCPMSS set-mss 1400; TCPMSS clamp-mss-to-pmtu;
- TCPOPTSTRIP
- این هدف
گزینههای
TCP را از بسته TCP
حذف میکند.
TCPOPTSTRIP strip-options (option1 option2 ...);
- TOS set-tos [value]
- تنظیم بیت
نوع خدمت (Type Of
Service) بسته TCP به
این مقدار.
این مقدار
توسط هر
زمانبند
ترافیکی که
مایل به
استفاده
باشد
(عمدتاً
ماشین
لینوکسی
خودتان، و
شاید فراتر
از آن)
استفاده
خواهد شد.
بیتهای
اصلی TOS پاک
شده و این
مقدار روی
آنها
بازنویسی
میشود.
TOS set-tos Maximize-Throughput; TOS and-tos 7; TOS or-tos 1; TOS xor-tos 4;
برای جزئیات، عبارت “iptables -j TOS -h” را وارد کنید.
- TTL
- تغییر فیلد
سرایند TTL.
TTL ttl-set 16; TTL ttl-dec 1; # decrease by 1 TTL ttl-inc 4; # increase by 4
- ULOG
- ثبت گزارش
بستهها به
یک برنامه
در فضای
کاربر.
ULOG ulog-nlgroup 5 ulog-prefix "Look at this: "; ULOG ulog-cprange 256; ULOG ulog-qthreshold 10; از نسخهٔ 2.0، ferm نه تنها از ip و ip6، بلکه از arp (جدولهای ARP) و eb (جدولهای ethernet bridging) نیز پشتیبانی میکند. مفاهیم مشابه iptables هستند.
کلیدواژههای arptables
- source-ip, destination-ip
- آدرس IPv4 مبدأ یا مقصد را تطبیق میدهد. همانند saddr و daddr در دامنهٔ ip است.
- source-mac, destination-mac
- آدرس MAC مبدأ یا مقصد را تطبیق میدهد.
- interface, outerface
- رابط ورودی و خروجی.
- h-length
- طول
سختافزاری
بسته.
chain INPUT h-length 64 ACCEPT;
- opcode
- کد عملیات
(operation code)؛ برای
جزئیات به
iptables(8) مراجعه
کنید.
opcode 9 ACCEPT;
- h-type
- نوع
سختافزار.
h-type 1 ACCEPT;
- proto-type
- نوع پروتکل.
proto-type 0x800 ACCEPT;
- Mangling
- کلیدواژههای mangle-ip-s، mangle-ip-d، mangle-mac-s، mangle-mac-d و mangle-target ممکن است برای دستکاری ARP (ARP mangling) به کار روند. برای جزئیات به iptables(8) مراجعه کنید.
کلیدواژههای ebtables
- proto
- پروتکلی را که فریم را ایجاد کرده است تطبیق میدهد، مانند IPv4 یا PPP. برای مشاهدهٔ یک فهرست، /etc/ethertypes را ببینید.
- interface, outerface
- رابط ورودی و خروجی فیزیکی.
- logical-in, logical-out
- رابط پل (bridge) منطقی.
- saddr, daddr
- آدرس MAC مبدأ یا مقصد را تطبیق میدهد.
- Match modules
- ماژولهای تطبیق زیر پشتیبانی میشوند: 802.3، arp، ip، mark_m، pkttype، stp، vlan، log.
- Target extensions
- افزونههای
هدف زیر
پشتیبانی
میشوند: arpreply،
dnat، mark، redirect، snat.
لطفاً توجه داشته باشید که بین --mark از ماژول تطبیق mark_m و -j mark تداخل وجود دارد. از آنجا که هر دو با کلیدواژهٔ mark در ferm پیادهسازی میشوند، تصمیم گرفتیم این مشکل را با نوشتن نام هدف با حروف بزرگ، مانند سایر دامنهها، حل کنیم. مثال زیر mark 1 را به 2 بازنویسی میکند:
mark 1 MARK 2;
قابلیتهای پیشرفته (ADVANCED FEATURES)
متغیرها (Variables)
در فایلهای پیچیدهٔ دیوار آتش، استفاده از متغیرها سودمند است، برای مثال برای دادن یک نام معنادار به یک رابط شبکه.
برای مقداردهی متغیرها بنویسید:
@def $DEV_INTERNET = eth0; @def $PORTS = (http ftp); @def $MORE_PORTS = ($PORTS 8080);
در کد واقعی ferm، متغیرها مانند هر پارامتر کلیدواژهٔ دیگری استفاده میشوند:
chain INPUT interface $DEV_INTERNET proto tcp dport $MORE_PORTS ACCEPT;
توجه داشته باشید که متغیرها تنها در پارامترهای کلیدواژهها ("192.168.1.1"، "http") قابل استفاده هستند؛ آنها نمیتوانند شامل کلیدواژههای ferm مانند "proto" یا "interface" باشند.
متغیرها فقط در بلوک جاری معتبر هستند:
@def $DEV_INTERNET = eth1;
chain INPUT {
proto tcp {
@def $DEV_INTERNET = ppp0;
interface $DEV_INTERNET dport http ACCEPT;
}
interface $DEV_INTERNET DROP;
}
به صورت زیر بسط داده خواهد شد:
chain INPUT {
proto tcp {
interface ppp0 dport http ACCEPT;
}
interface eth1 DROP;
}
عبارت "def $DEV_INTERNET = ppp0" فقط در بلوک "proto tcp" معتبر است؛ بلوک والد همچنان "set $DEV_INTERNET = eth1" را میشناسد.
فایلهای ضمیمهشده (Include files) وضعیت ویژهای دارند - متغیرهای اعلانشده در یک فایل ضمیمهشده، همچنان در بلوک فراخواننده در دسترس هستند. این قابلیت زمانی مفید است که فایلی را ضمیمه میکنید که تنها متغیرها را اعلان میکند..SS "متغیرهای خودکار (Automatic variables)" برخی از متغیرها به صورت داخلی توسط ferm مقداردهی میشوند. اسکریپتهای ferm میتوانند دقیقاً مانند هر متغیر دیگری از آنها استفاده کنند.
- $FILENAME
- نام فایل پیکربندی به صورت نسبی نسبت به دایرکتوریای که ferm در آن اجرا شده است.
- $FILEBNAME
- نام پایه (base name) فایل پیکربندی.
- $DIRNAME
- دایرکتوری فایل پیکربندی.
- $DOMAIN
- دامنه فعلی. یکی از موارد ip، ip6، arp، eb.
- $TABLE
- جدول netfilter فعلی.
- $CHAIN
- زنجیره (chain) فعلی netfilter.
- $LINE
- شماره خط
فعلی
اسکریپت.
میتوان از
آن به این
صورت
استفاده
کرد:
@def &log($msg) = { LOG log-prefix "rule=$msg:$LINE "; } . . . &log("log message");
توابع (Functions)
توابع مشابه متغیرها هستند، با این تفاوت که میتوانند پارامتر بپذیرند و به جای مقادیر، دستورهای ferm را فراهم میکنند.
@def &FOO() = proto (tcp udp) dport domain;
&FOO() ACCEPT;
@def &TCP_TUNNEL($port, $dest) = {
table filter chain FORWARD interface ppp0 proto tcp dport $port daddr $dest outerface eth0 ACCEPT;
table nat chain PREROUTING interface ppp0 proto tcp dport $port daddr 1.2.3.4 DNAT to $dest;
}
&TCP_TUNNEL(http, 192.168.1.33);
&TCP_TUNNEL(ftp, 192.168.1.30);
&TCP_TUNNEL((ssh smtp), 192.168.1.2);
فراخوانی تابعی که شامل یک بلوک است (مانند '{...}') باید آخرین دستور در یک قاعده ferm باشد؛ یعنی حتماً باید پس از آن ';' بیاید. مثال '&FOO()' شامل بلوک نیست، بنابراین میتوانید بعد از فراخوانی، 'ACCEPT' را بنویسید. برای دور زدن این محدودیت، میتوانید ترتیب کلیدواژهها را تغییر دهید:
@def &IPSEC() = { proto (esp ah); proto udp dport 500; }
chain INPUT ACCEPT &IPSEC();
بکتیکها (Backticks)
با استفاده از بکتیکها (`...`) میتوانید از خروجی یک دستور خارجی استفاده کنید:
@def $DNSSERVERS = `grep nameserver /etc/resolv.conf | awk '{print $2}'`;
chain INPUT proto tcp saddr $DNSSERVERS ACCEPT;
این دستور درست مانند بکتیکها در Perl، با شل (/bin/sh) اجرا میشود. ferm در اینجا هیچ بسط متغیری انجام نمیدهد.
سپس خروجی به توکنها تفکیک شده و به عنوان یک لیست (آرایه) در ferm ذخیره میشود. خطوطی که با '#' شروع میشوند نادیده گرفته خواهند شد؛ سایر خطوط میتوانند شامل هر تعداد مقدار باشند که با نویسههای فاصله (whitespace) از یکدیگر جدا شدهاند.
ضمیمهسازی (Includes)
کلیدواژه @include به شما امکان میدهد فایلهای خارجی را ضمیمه کنید:
@include 'vars.ferm';
نام فایل به صورت نسبی نسبت به فایل فراخواننده در نظر گرفته میشود؛ مثلاً هنگام ضمیمهسازی از /etc/ferm/ferm.conf، عبارت بالا فایل /etc/ferm/vars.ferm را ضمیمه میکند. متغیرها و توابع تعریفشده در فایل ضمیمهشده، همچنان در فایل فراخواننده در دسترس خواهند بود.
دستور include درون بلوکها نیز کار میکند:
chain INPUT {
@include 'input.ferm';
}
اگر یک دایرکتوری را مشخص کنید (با یک '/' در انتها)، تمام فایلهای موجود در این دایرکتوری به ترتیب الفبا ضمیمه میشوند:
@include 'ferm.d/';
از تابع @glob میتوان برای بسط کاراکترهای عام (wildcards) استفاده کرد:
@include @glob('*.include');
با قرار دادن نماد لوله (pipe) در انتها، ferm یک دستور شل را اجرا کرده و خروجی آن را پردازش میکند:
@include "/root/generate_ferm_rules.sh $HOSTNAME|"
در صورتی که کد خروج دستور مخالف 0 باشد، ferm عملیات را متوقف میکند..SS "عبارتهای شرطی (Conditionals)" کلیدواژهٔ @if یک عبارت شرطی را معرفی میکند:
@if $condition DROP;
یک مقدار دقیقاً همانند Perl ارزیابی میشود: صفر، فهرست خالی و رشتهٔ خالی نادرست (false) هستند، هر چیز دیگری درست (true) است. نمونههایی برای مقادیر درست:
(a b); 1; 'foo'; (0 0)
نمونههایی برای مقادیر نادرست:
(); 0; '0'; ''
همچنین @else نیز موجود است:
@if $condition DROP; @else REJECT;
به نقطه-ویرگول پیش از @else توجه کنید.
امکان استفاده از آکوالادها بعد از @if یا @else نیز وجود دارد:
@if $condition {
MARK set-mark 2;
RETURN;
} @else {
MARK set-mark 3;
}
از آنجا که آکوالاد بسته نیز دستور را پایان میدهد، نیازی به نقطه-ویرگول نیست.
دستوری تحت عنوان @elsif وجود ندارد، به جای آن از @else @if استفاده کنید.
مثال:
@def $have_ipv6 = `test -f /proc/net/ip6_tables_names && echo 1 || echo`;
@if $have_ipv6 {
domain ip6 {
# ....
}
}
قلابها (Hooks)
برای اجرای دستورهای سفارشی، میتوانید قلابها را تعریف کنید:
@hook pre "echo 0 >/proc/sys/net/ipv4/conf/eth0/forwarding"; @hook post "echo 1 >/proc/sys/net/ipv4/conf/eth0/forwarding"; @hook flush "echo 0 >/proc/sys/net/ipv4/conf/eth0/forwarding";
دستور مشخصشده با استفاده از پوسته اجرا میشود. مقدار «pre» به معنای اجرای دستور پیش از اعمال قوانین دیوار آتش، و «post» به معنای اجرای دستور پس از آن است. قلابهای «flush» پس از پاکسازی قوانین دیوار آتش توسط ferm (گزینهٔ --flush) اجرا میشوند. شما میتوانید به هر تعداد دلخواه قلاب تعریف کنید.
توابع توکار (BUILT-IN FUNCTIONS)
چندین تابع توکار وجود دارد که ممکن است برایتان مفید باشد.
@defined($name), @defined(&name)
بررسی میکند که آیا متغیر یا تابع تعریف شده است یا خیر.
@def $a = 'foo'; @if @defined($a) good; @if @not(@defined($a)) bad; @if @defined(&funcname) good;
@eq(a,b)
برابری دو مقدار را بررسی میکند. مثال:
@if @eq($DOMAIN, ip6) DROP;
@ne(a,b)
مشابه @eq، این تابع نابرابری را بررسی میکند.
@not(x)
یک مقدار بولی (boolean) را نقیض میکند.
@resolve((hostname1 hostname2 ...), [type])
بهطور معمول، نامهای میزبان توسط iptables تحلیل میشوند. برای واگذاری تحلیل نامهای میزبان به ferm، از تابع @resolve استفاده کنید:
saddr @resolve(my.host.foo) proto tcp dport ssh ACCEPT; saddr @resolve((another.host.foo third.host.foo)) proto tcp dport openvpn ACCEPT; daddr @resolve(ipv6.google.com, AAAA) proto tcp dport http ACCEPT;
به پرانتزهای دوتایی در خط دوم توجه کنید: جفت داخلی برای ایجاد یک فهرست ferm، و جفت خارجی به عنوان جداکنندهٔ پارامترهای تابع هستند.
پارامتر دوم اختیاری است و نوع رکورد DNS را تعیین میکند. مقدار پیشفرض برای دامنهٔ ip برابر «A» و برای دامنهٔ ip6 برابر «AAAA» است.
در استفاده از نامهای میزبان تحلیلشده در پیکربندی دیوار آتش احتیاط کنید. درخواستهای DNS ممکن است پیکربندی دیوار آتش را برای مدت طولانی مسدود کنند که این امر سیستم را آسیبپذیر میسازد، یا حتی ممکن است با شکست مواجه شوند.
@cat(a, b, ...)
تمام پارامترها را به یک رشته الحاق میکند.
@join(separator, a, b, ...)
تمام پارامترها را به یک رشته تبدیل کرده و آنها را با رشتهٔ جداکنندهٔ دادهشده پیوند میدهد.
@substr(expression, offset, length)
زیررشتهای را از عبارت (expression) استخراج کرده و آن را برمیگرداند. نخستین نویسه در آفست ۰ است. اگر OFFSET منفی باشد، شمارش به همان اندازه از انتهای رشته آغاز میشود.
@length(expression)
طول مقدار EXPR را بر حسب نویسهها برمیگرداند.
@basename(path)
نام پایهٔ فایل را برای مسیر دادهشده برمیگرداند (File::Spec::splitpath).
@dirname(path)
نام آخرین دایرکتوری را برای مسیر دادهشده برمیگرداند، با این فرض که مؤلفهٔ آخر نام یک فایل است (File::Spec::splitpath).
@glob(path)
نویسههای عام (wildcards) پوسته را در مسیرهای دادهشده بسط میدهد (با این فرض که نسبت به اسکریپت فعلی نسبی هستند). فهرستی از فایلهای منطبق را برمیگرداند. این تابع به عنوان پارامتر @include کاربردی است.
@ipfilter(list)
نشانیهای IP را که مشخصاً با دامنهٔ فعلی مطابقت ندارند فیلتر میکند. این قابلیت برای ایجاد متغیرها و قوانین مشترک برای IPv4 و IPv6 کاربردی است:
@def $TRUSTED_HOSTS = (192.168.0.40 2001:abcd:ef::40);
domain (ip ip6) chain INPUT {
saddr @ipfilter($TRUSTED_HOSTS) proto tcp dport ssh ACCEPT;
}
دایرکتوری ./examples/ شامل پیکربندیهای متعددی برای ferm است که میتوان از آنها برای شروع یک دیوار آتش جدید استفاده کرد. این بخش شامل نمونهها، دستورالعملها و ترفندهای بیشتری است.
هدایت آسان پورت (Easy port forwarding)
توابع ferm کارهای روتین را سریع و آسان میکنند:
@def &FORWARD_TCP($proto, $port, $dest) = {
table filter chain FORWARD interface $DEV_WORLD outerface $DEV_DMZ daddr $dest proto $proto dport $port ACCEPT;
table nat chain PREROUTING interface $DEV_WORLD daddr $HOST_STATIC proto $proto dport $port DNAT to $dest;
}
&FORWARD_TCP(tcp, http, 192.168.1.2);
&FORWARD_TCP(tcp, smtp, 192.168.1.3);
&FORWARD_TCP((tcp udp), domain, 192.168.1.4);
ferm از راه دور (Remote ferm)
اگر ماشین مقصد به هر دلیلی قادر به اجرای ferm نباشد (مثلاً یک دستگاه توکار بدون Perl)، میتوانید فایل پیکربندی ferm را روی رایانهای دیگر ویرایش کرده و اجازه دهید ferm در آنجا یک اسکریپت شل تولید کند.
مثالی برای OpenWRT:
ferm --remote --shell mywrt/ferm.conf >mywrt/firewall.user chmod +x mywrt/firewall.user scp mywrt/firewall.user mywrt.local.net:/etc/ ssh mywrt.local.net /etc/firewall.user
گزینهها (OPTIONS)
- --noexec
- دستورات iptables(8) را اجرا نمیکند و در عوض از آنها رد میشود. به این ترتیب میتوانید دادههای خود را تجزیه کنید؛ برای مشاهده خروجی از --lines استفاده کنید.
- --flush
- قوانین دیوار آتش را پاک کرده و خطمشی (policy) تمام زنجیرهها را روی ACCEPT قرار میدهد. ferm برای تعیین دامنهها و جدولهای متأثر از این کار، به یک فایل پیکربندی نیاز دارد.
- --lines
- خطوط دیوار آتش تولیدشده از روی قوانین را نمایش میدهد. این خطوط دقیقاً پیش از اجرا نمایش داده میشوند؛ بنابراین اگر پیام خطایی از iptables(8) و غیره دریافت کنید، میتوانید ببینید کدام قانون موجب خطا شده است.
- --interactive
- قوانین دیوار آتش را اعمال کرده و از کاربر تأییدیه میخواهد. چنانچه ظرف ۳۰ ثانیه پاسخی معتبر از سوی کاربر دریافت نشود (گزینه --timeout را ببینید)، به مجموعه قوانین قبلی بازمیگردد. این ویژگی برای مدیریت از راه دور دیوار آتش بسیار مفید است: میتوانید قوانین را بدون ترس از قفل شدن دسترسی خود آزمایش کنید.
- --timeout S
- در صورت استفاده از --interactive، اگر پس از این تعداد ثانیه پاسخی معتبر از کاربر دریافت نشود، تغییرات را به حالت قبل بازمیگرداند. مقدار پیشفرض ۳۰ است.
- --help
- فهرست کوتاهی از گزینههای خط فرمان موجود را نمایش میدهد.
- --version
- شماره نسخه برنامه را نشان میدهد.
- --fast
- فعال کردن
حالت سریع: ferm
یک فایل iptables-save(8)
تولید کرده
و آن را با
iptables-restore(8) نصب
میکند. این
روش بسیار
سریعتر
است زیرا ferm
بهطور
پیشفرض
برای هر
قانون یک
بار iptables(8) را
فراخوانی
میکند.
حالت سریع از نسخه ferm 2.0 به بعد بهطور پیشفرض فعال است و استفاده از این گزینه منسوخ شده است.
- --slow
- حالت سریع را غیرفعال میکند؛ یعنی برای هر قانون دستور iptables(8) را اجرا کرده و از iptables-restore(8) استفاده نمیکند.
- --shell
- یک اسکریپت شل تولید میکند که iptables-restore(8) را فراخوانی کرده و آن را چاپ میکند. مستلزم استفاده از --fast و --lines است.
- --remote
- تولید قوانین برای یک ماشین از راه دور. مستلزم استفاده از --noexec و --lines است. میتواند با --shell ترکیب شود.
- --domain {ip|ip6}
- تنها دامنه مشخصشده را مدیریت کرده و آن را به عنوان دامنه پیشفرض برای قوانینی که دامنهای در آنها تعیین نشده انتخاب میکند. اگر دامنه در فایل ورودی پیکربندی نشده باشد، خروجی ferm ممکن است خالی باشد.
- --def '$name=value'
- متغیری را که در فایل پیکربندی تعریف شده بازنویسی (override) میکند.
همچنین ببینید (SEE ALSO)
پیشنیازها (REQUIREMENTS)
سیستمعامل (Operating system)
لینوکس 2.4 یا جدیدتر، با پشتیبانی از netfilter و تمامی ماژولهای netfilter مورد استفاده در اسکریپت دیوار آتش شما
نرمافزار (Software)
نرمافزارهای iptables و perl 5.6
گزارش باگها (BUGS)
باگ؟ کدام باگ؟
اگر اشکالی پیدا کردید، لطفاً آن را در GitHub گزارش دهید: https://github.com/MaxKellermann/ferm/issues
کپیرایت و تکثیر (COPYRIGHT)
کپیرایت 2001-2021 متعلق به Max Kellermann <max.kellermann@gmail.com>، Auke Kok <sofar@foo-projects.org> و مشارکتکنندگان متعدد دیگر است.
این برنامه یک نرمافزار آزاد است؛ شما میتوانید آن را تحت شرایط «پروانه عمومی همگانی گنو» (GPL) که توسط بنیاد نرمافزارهای آزاد منتشر شده است، چه نسخهٔ ۲ پروانه و چه (به انتخاب خودتان) هر نسخهٔ بالاتر دیگری، بازتوزیع کرده یا تغییر دهید.
این برنامه با این امید توزیع شده است که مفید واقع شود، اما بدون هیچگونه ضمانتی؛ حتی بدون ضمانت ضمنی «قابل فروش بودن» یا «مناسب بودن برای یک هدف خاص». برای جزئیات بیشتر «پروانه عمومی همگانی گنو» را مطالعه کنید.
شما باید به همراه این برنامه یک نسخه از پروانه عمومی همگانی گنو را دریافت کرده باشید؛ در غیر این صورت، به آدرس زیر بنویسید: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA..SH "نویسنده (AUTHOR)" Max Kellermann <max.kellermann@gmail.com>, Auke Kok <sofar@foo-projects.org>
| 2025-07-17 | ferm 2.7 |