| IPTABLES-EXTENSIONS(8) | iptables 1.8.11 | IPTABLES-EXTENSIONS(8) |
نام (NAME)
iptables-extensions - فهرست افزونههای تطبیق و هدف در iptables
خلاصه دستور (SYNOPSIS)
ip6tables [-m name [module-options...]] [-j target-name [target-options...]
iptables [-m name [module-options...]] [-j target-name [target-options...]
افزونههای تطبیق (MATCH EXTENSIONS)
دستور iptables میتواند با استفاده از گزینههای -m یا --match به همراه نام ماژول تطبیق، از ماژولهای توسعهیافته تطبیق بسته استفاده کند؛ پس از این گزینهها، بسته به ماژول مشخصشده، گزینههای خط فرمان اضافی گوناگونی در دسترس قرار میگیرند. شما میتوانید چندین ماژول تطبیق توسعهیافته را در یک خط مشخص کنید، و میتوانید از گزینههای -h یا --help پس از مشخص شدن ماژول برای دریافت راهنمای اختصاصی آن ماژول استفاده کنید. ماژولهای تطبیق توسعهیافته به همان ترتیبی که در قاعده مشخص شدهاند ارزیابی میشوند.
اگر گزینه -p یا --protocol مشخص شده باشد و تنها در صورتی که با یک گزینه ناشناخته مواجه شود، iptables تلاش میکند یک ماژول تطبیق همنام با پروتکل را بارگذاری کند تا آن گزینه در دسترس قرار گیرد.
addrtype
این ماژول بستهها را بر اساس نوع آدرس آنها تطبیق میدهد. انواع آدرس در پشته شبکه هسته به کار میروند و آدرسها را به گروههای گوناگونی دستهبندی میکنند. تعریف دقیق هر گروه به پروتکل لایه ۳ خاص بستگی دارد.
انواع آدرسهای زیر ممکن هستند:
- UNSPEC
- یک آدرس نامشخص (مانند 0.0.0.0)
- UNICAST
- یک آدرس تکپخشی (unicast)
- LOCAL
- یک آدرس محلی (local)
- BROADCAST
- یک آدرس همگانی (broadcast)
- ANYCAST
- یک بسته هرپخشی (anycast)
- MULTICAST
- یک آدرس چندپخشی (multicast)
- BLACKHOLE
- یک آدرس سیاهچاله (blackhole)
- UNREACHABLE
- یک آدرس غیرقابل دسترس (unreachable)
- PROHIBIT
- یک آدرس ممنوعشده (prohibited)
- THROW
- FIXME
- NAT
- FIXME
- XRESOLVE
- [!] --src-type type
- در صورتی که آدرس مبدأ از نوع مشخصشده باشد تطبیق مییابد
- [!] --dst-type type
- در صورتی که آدرس مقصد از نوع مشخصشده باشد تطبیق مییابد
- --limit-iface-in
- بررسی نوع آدرس را میتوان به رابطی که بسته از آن وارد میشود محدود کرد. این گزینه تنها در زنجیرههای PREROUTING، INPUT و FORWARD معتبر است. این گزینه را نمیتوان همراه با گزینه --limit-iface-out مشخص کرد.
- --limit-iface-out
- بررسی نوع آدرس را میتوان به رابطی که بسته از آن خارج میشود محدود کرد. این گزینه تنها در زنجیرههای POSTROUTING، OUTPUT و FORWARD معتبر است. این گزینه را نمیتوان همراه با گزینه --limit-iface-in مشخص کرد.
ah (IPv6-specific)
این ماژول پارامترهای سرآیند احراز هویت (Authentication header) بستههای IPsec را تطبیق میدهد.
- [!] --ahspi spi[:spi]
- شناسه SPI را تطبیق میدهد.
- [!] --ahlen length
- طول کل این سرآیند بر حسب بایت (اکتت).
- --ahres
- در صورتی که فیلد رزروشده با صفر پر شده باشد تطبیق مییابد.
ah (IPv4-specific)
این ماژول شناسههای SPI در سرآیند احراز هویت (Authentication header) بستههای IPsec را تطبیق میدهد.
- [!] --ahspi spi[:spi]
bpf
تطبیق با استفاده از فیلتر سوکت لینوکس (Linux Socket Filter). این ماژول انتظار یک مسیر به شیء eBPF یا یک برنامه cBPF در قالب دهدهی (دسیمال) را دارد.
- --object-pinned path
- ارسال مسیر یک شیء پینشده eBPF.
برنامهها، برنامههای eBPF را با فراخوانی سیستمی bpf() و دستور BPF_PROG_LOAD در هسته بارگذاری میکنند و میتوانند آنها را با BPF_OBJ_PIN در یک سیستمفایل مجازی پین کنند. برای استفاده از یک شیء پینشده در iptables، سیستمفایل bpf را با دستور زیر سوار (mount) کنید:
- mount -t bpf bpf ${BPF_MOUNT}
سپس فیلتر را بر اساس مسیر در iptables درج کنید:
- iptables -A OUTPUT -m bpf --object-pinned ${BPF_MOUNT}/{PINNED_PATH} -j ACCEPT
- --bytecode code
- ارسال قالب بایتکد BPF به همان ترتیبی که توسط ابزار nfbpf_compile تولید میشود.
قالب کد مشابه خروجی دستور tcpdump -ddd است: یک خط که تعداد دستورالعملها را ذخیره میکند، و به دنبال آن برای هر دستورالعمل یک خط قرار میگیرد. خطوط دستورالعمل از الگوی 'u16 u8 u8 u32' در نماد دهدهی پیروی میکنند. فیلدها عملیات، آفست پرش در صورت درست بودن (true)، آفست پرش در صورت نادرست بودن (false) و فیلد چندمنظوره 'K' را کدگذاری میکنند. توضیحات (کامنتها) پشتیبانی نمیشوند.
به عنوان مثال، برای خواندن فقط بستههای منطبق با 'ip proto 6'، عبارت زیر را بدون توضیحات یا فاصلههای خالی انتهایی درج کنید:
- 4 # number of instructions
48 0 0 9 # load byte ip->proto
21 0 1 6 # jump equal IPPROTO_TCP
6 0 0 1 # return pass (non-zero)
6 0 0 0 # return fail (zero)
میتوانید این فیلتر را با دستور زیر به تطبیق bpf ارسال کنید:
- iptables -A OUTPUT -m bpf --bytecode '4,48 0 0 9,21 0 1 6,6 0 0 1,6 0 0 0' -j ACCEPT
یا در عوض، میتوانید ابزار nfbpf_compile را فراخوانی کنید:
- iptables -A OUTPUT -m bpf --bytecode "`nfbpf_compile RAW 'ip proto 6'`" -j ACCEPT
یا از tcpdump -ddd استفاده کنید. در این حالت، BPF را برای دستگاهی با همان نوع پیوند داده (data link type) تطبیق xtables تولید کنید. دستور iptables بستهها را از لایه شبکه به بالا و بدون لایه MAC عبور میدهد. دستگاهی با نوع پیوند داده RAW انتخاب کنید، مانند یک دستگاه tun:
- ip tuntap add tun0 mode tun
ip link set tun0 up
tcpdump -ddd -i tun0 ip proto 6
برای مشاهده فهرستی از انواع شناختهشده پیوند داده برای یک دستگاه مشخص، tcpdump -L -i $dev را بررسی کنید.
برای کسب اطلاعات بیشتر درباره BPF میتوانید به صفحه راهنمای bpf(4) در FreeBSD مراجعه کنید.
cgroup
- [!] --path path
- تطبیق
عضویت در cgroup2.
هر سوکت با cgroup نسخه ۲ فرایند سازنده خود مرتبط است. این گزینه بستههای ورودی یا خروجی از تمامی سوکتهای زیرسلسلهمراتب مسیر مشخصشده را تطبیق میدهد. مسیر باید نسبت به ریشه سلسلهمراتب cgroup2 باشد.
- [!] --cgroup classid
- تطبیق classid در
کنترولر net_cls
مربوط به cgroup.
شناسه classid نشانگری است که از طریق کنترلکننده net_cls مربوط به cgroup تنظیم میشود. این گزینه و --path نمیتوانند همزمان با هم استفاده شوند.
مثال:
- iptables -A OUTPUT -p tcp --sport 80 -m cgroup ! --path service/http-server -j DROP
- iptables -A OUTPUT -p tcp --sport 80 -m cgroup ! --cgroup 1 -j DROP
مهم: هنگامی که در زنجیره INPUT استفاده میشود، تطبیقدهنده cgroup در حال حاضر تنها دارای عملکرد محدودی است، به این معنی که فقط روی بستههایی تطبیق مییابد که برای سوکتهای محلی از طریق دیمالتیپلکسینگ زودهنگام سوکت (early socket demuxing) پردازش میشوند. بنابراین، استفاده عمومی در زنجیره INPUT توصیه نمیشود مگر اینکه پیامدهای آن به خوبی درک شده باشد.
در دسترس از لینوکس 3.14 به بعد.
cluster
امکان استقرار کلاسترهای توزیع بار (load-sharing) در سطح گیتوی و پسزمینه را بدون نیاز به متعادلکنندههای بار (load-balancers) فراهم میکند.
این تطبیق مستلزم این است که همه گرهها بستههای یکسانی را مشاهده کنند. بنابراین، تطبیق cluster با توجه به گزینههای زیر تصمیم میگیرد که آیا این گره باید بسته را پردازش کند یا خیر:
- --cluster-total-nodes num
- تنظیم تعداد کل گرهها در کلاستر.
- [!] --cluster-local-node num
- تنظیم شماره شناسه (ID) گره محلی.
- [!] --cluster-local-nodemask mask
- تنظیم ماسک شناسه گره محلی. میتوانید از این گزینه به جای --cluster-local-node استفاده کنید.
- --cluster-hash-seed value
- تنظیم مقدار سید (seed) برای درهمسازی جنکینز (Jenkins hash).
مثال:
- iptables -A PREROUTING -t mangle -i eth1 -m cluster --cluster-total-nodes 2 --cluster-local-node 1 --cluster-hash-seed 0xdeadbeef -j MARK --set-mark 0xffff
- iptables -A PREROUTING -t mangle -i eth2 -m cluster --cluster-total-nodes 2 --cluster-local-node 1 --cluster-hash-seed 0xdeadbeef -j MARK --set-mark 0xffff
- iptables -A PREROUTING -t mangle -i eth1 -m mark ! --mark 0xffff -j DROP
- iptables -A PREROUTING -t mangle -i eth2 -m mark ! --mark 0xffff -j DROP
و دستورات زیر برای اینکه همه گرهها بستههای یکسانی را مشاهده کنند:
- ip maddr add 01:00:5e:00:01:01 dev eth1
- ip maddr add 01:00:5e:00:01:02 dev eth2
- arptables -A OUTPUT -o eth1 --h-length 6 -j mangle --mangle-mac-s 01:00:5e:00:01:01
- arptables -A INPUT -i eth1 --h-length 6 --destination-mac 01:00:5e:00:01:01 -j mangle --mangle-mac-d 00:zz:yy:xx:5a:27
- arptables -A OUTPUT -o eth2 --h-length 6 -j mangle --mangle-mac-s 01:00:5e:00:01:02
- arptables -A INPUT -i eth2 --h-length 6 --destination-mac 01:00:5e:00:01:02 -j mangle --mangle-mac-d 00:zz:yy:xx:5a:27
نکته: دستورات arptables فوق از ساختار دستوری مرسوم استفاده میکنند. اگر از arptables-jf موجود در برخی نسخههای RedHat، CentOS و Fedora استفاده میکنید، با خطاهای ساختاری مواجه خواهید شد. بنابراین، باید آنها را با نحو arptables-jf سازگار کنید تا کار کنند.
در مورد اتصالات TCP، قابلیت pickup باید غیرفعال شود تا از معتبر علامتگذاری شدن بستههای TCP ACK که در جهت پاسخ میآیند جلوگیری گردد:
- echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose
comment
امکان افزودن توضیح (تا ۲۵۶ کاراکتر) به هر قاعده را فراهم میکند.
- --comment comment
- مثال:
- iptables -A INPUT -i eth1 -m comment --comment "my local LAN"
connbytes
تطبیق بر اساس اینکه یک اتصال (یا یکی از دو جریان تشکیلدهنده اتصال) تاکنون چه تعداد بایت یا بسته منتقل کرده است، یا بر اساس میانگین بایت در هر بسته.
شمارندهها ۶۴ بیتی هستند و بنابراین انتظار سرریز شدن آنها وجود ندارد ;)
کاربرد اصلی، تشخیص بارگیریهای طولانیمدت و نشانهگذاری آنها برای زمانبندی با استفاده از باند اولویت پایینتر در کنترل ترافیک است.
بایتهای منتقلشده در هر اتصال را میتوان از طریق دستور conntrack -L مشاهده کرد و از طریق ctnetlink به آن دسترسی داشت.
توجه داشته باشید که برای اتصالاتی که فاقد اطلاعات حسابرسی (accounting) هستند، این تطبیق همیشه مقدار false را برمیگرداند. فلگ سیسکنترل "net.netfilter.nf_conntrack_acct" مشخص میکند که آیا بستهها/بایتهای اتصالات جدید شمرده شوند یا خیر. جریانهای اتصال موجود با تغییر وضعیت این فلگ ساختار حسابرسی را دریافت نکرده یا از دست نمیدهند.
- [!] --connbytes from[:to]
- تطبیق بستههای اتصالی که بستهها/بایتها/اندازه میانگین بسته آن بیشتر از FROM و کمتر از TO بایت/بسته باشد. اگر TO حذف شود فقط بررسی FROM انجام میشود. از "!" برای تطبیق بستههایی که در این بازه قرار نمیگیرند استفاده میشود.
- --connbytes-dir {original|reply|both}
- کدام بستهها مد نظر قرار گیرند.
- --connbytes-mode {packets|bytes|avgpkt}
- بررسی تعداد بستهها، تعداد بایتهای منتقلشده یا اندازه میانگین (بر حسب بایت) همه بستههای دریافت شده تاکنون. توجه داشته باشید که وقتی "both" همراه با "avgpkt" استفاده میشود و دادهها (عمدتاً) تنها در یک جهت جریان دارند (به عنوان مثال HTTP)، اندازه میانگین بسته تقریباً نصف بستههای واقعی داده خواهد بود.
- مثال:
- iptables .. -m connbytes --connbytes 10000:100000 --connbytes-dir both --connbytes-mode bytes ...
connlabel
این ماژول برچسبهای connlabel را با یک اتصال تطبیق داده یا به آن اضافه میکند. برچسبهای connlabel مشابه connmark هستند، با این تفاوت که برچسبها مبتنی بر بیت هستند؛ یعنی همه برچسبها میتوانند همزمان به یک جریان متصل شوند. در حال حاضر تا ۱۲۸ برچسب یکتا پشتیبانی میشود.
- [!] --label name
- در صورتی که برچسب name روی یک اتصال تنظیم شده باشد تطبیق مییابد. به جای یک نام (که به یک عدد تبدیل میشود، مثال زیر را ببینید)، میتوان از یک عدد استفاده کرد. استفاده از عدد همیشه بر فایل connlabel.conf اولویت دارد.
- --set
- اگر برچسب روی اتصال تنظیم نشده باشد، آن را تنظیم میکند. توجه داشته باشید که تنظیم برچسب ممکن است ناموفق باشد؛ این امر بدان دلیل است که هسته فضای ذخیرهسازی برچسب conntrack را در زمان ایجاد اتصال تخصیص میدهد، و تنها به میزانی که مجموعه قواعد موجود در زمان ایجاد اتصال نیاز دارد حافظه رزرو میکند. در این حالت، تطبیق ناموفق خواهد بود (یا در صورتی که گزینه --label نفی شده باشد، موفق خواهد شد).
این تطبیق به libnetfilter_conntrack نسخه 1.0.4 یا بالاتر نیاز دارد. ترجمه نام برچسبها از طریق فایل پیکربندی /etc/xtables/connlabel.conf انجام میشود.
مثال:
-
0 eth0-in 1 eth0-out 2 ppp-in 3 ppp-out 4 bulk-traffic 5 interactive
connlimit
امکان محدود کردن تعداد اتصالات همزمان به یک کارساز را به ازای هر آدرس IP کلاینت (یا بلوک آدرس کلاینت) فراهم میکند.
- --connlimit-upto n
- در صورتی که تعداد اتصالات موجود کمتر یا برابر با n باشد تطبیق مییابد.
- --connlimit-above n
- در صورتی که تعداد اتصالات موجود بیشتر از n باشد تطبیق مییابد.
- --connlimit-mask prefix_length
- گروهبندی میزبانها با استفاده از طول پیشوند (prefix length). برای IPv4، این مقدار باید عددی بین (و شامل) ۰ و ۳۲ باشد. برای IPv6، عددی بین ۰ و ۱۲۸. در صورت مشخص نشدن، حداکثر طول پیشوند برای پروتکل مربوطه استفاده میشود.
- --connlimit-saddr
- اعمال محدودیت بر روی گروه مبدأ. در صورتی که --connlimit-daddr مشخص نشده باشد، این گزینه پیشفرض است.
- --connlimit-daddr
- اعمال محدودیت بر روی گروه مقصد.
مثالها:
- اجازه دادن
به ۲ اتصال telnet
به ازای هر
میزبان
کلاینت:
iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT - همچنین
میتوانید
حالت برعکس
را تطبیق
دهید:
iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT - محدود کردن
تعداد
درخواستهای
همزمان HTTP به
۱۶ مورد
برای هر
شبکه مبدأ
در اندازه
کلاس C (با
نتماسک ۲۴
بیتی):
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT - محدود کردن
تعداد
درخواستهای
همزمان HTTP به
۱۶ مورد
برای شبکه
محلی پیوند
(IPv6):
ip6tables -p tcp --syn --dport 80 -s fe80::/64 -m connlimit --connlimit-above 16 --connlimit-mask 64 -j REJECT - محدود کردن
تعداد
اتصالات به
یک میزبان
مشخص:
ip6tables -p tcp --syn --dport 49152:65535 -d 2001:db8::1 -m connlimit --connlimit-above 100 -j REJECT
connmark
این ماژول فیلد نشانه (mark) فیلتر شبکه (netfilter) مرتبط با یک اتصال را تطبیق میدهد (که میتوان آن را با استفاده از هدف CONNMARK در زیر تنظیم کرد).
- [!] --mark value[/mask]
- بستههای موجود در اتصالهایی با مقدار نشانه دادهشده را تطبیق میدهد (اگر ماسک مشخص شده باشد، پیش از مقایسه، با نشانه بهصورت منطقی AND میشود).
conntrack
این ماژول، در صورت ترکیب با سیستم رهگیری اتصال (connection tracking)، امکان دسترسی به وضعیت رهگیری اتصال را برای این بسته/اتصال فراهم میکند.
- [!] --ctstate statelist
- متغیر statelist فهرستی از وضعیتهای اتصال است که با کاما از هم جدا شدهاند تا تطبیق داده شوند. وضعیتهای ممکن در زیر فهرست شدهاند.
- [!] --ctproto l4proto
- پروتکل لایه ۴ برای تطبیق (از طریق شماره یا نام).
- [!] --ctorigsrc address[/mask]
- [!] --ctorigdst address[/mask]
- [!] --ctreplsrc address[/mask]
- [!] --ctrepldst address[/mask]
- تطبیق بر اساس نشانی مبدأ/مقصد اصلی (original) یا پاسخ (reply).
- [!] --ctorigsrcport port[:port]
- [!] --ctorigdstport port[:port]
- [!] --ctreplsrcport port[:port]
- [!] --ctrepldstport port[:port]
- تطبیق بر اساس درگاه مبدأ/مقصد اصلی یا پاسخ (TCP/UDP و غیره) یا کلید GRE. تطبیق بر اساس بازههای درگاه فقط در نگارشهای هسته بالاتر از 2.6.38 پشتیبانی میشود.
- [!] --ctstatus statelist
- متغیر statuslist فهرستی از وضعیتهای حالت اتصال است که با کاما از هم جدا شدهاند تا تطبیق داده شوند. وضعیتهای ممکن در زیر فهرست شدهاند.
- [!] --ctexpire time[:time]
- تطبیق طول عمر باقیمانده بر حسب ثانیه با مقدار یا بازهای از مقادیر مشخصشده (شامل هر دو سر بازه).
- --ctdir {ORIGINAL|REPLY}
- بستههایی که در جهت مشخصشده در حال جریان هستند را تطبیق میدهد. اگر این فلگ اصلاً مشخص نشود، بستهها در هر دو جهت تطبیق داده میشوند.
وضعیتها برای --ctstate:
- INVALID
- بسته با هیچ اتصال شناختهشدهای مرتبط نیست.
- NEW
- بسته یک اتصال جدید ایجاد کرده است یا به اتصالی مرتبط است که در هر دو جهت بستهای در آن دیده نشده است.
- ESTABLISHED
- بسته با اتصالی مرتبط است که در هر دو جهت بستههایی در آن مبادله شده است.
- RELATED
- بسته در حال آغاز یک اتصال جدید است، اما با یک اتصال موجود مرتبط است؛ مانند انتقال داده FTP یا یک خطای ICMP.
- UNTRACKED
- بسته اصلاً رهگیری نمیشود؛ این حالت زمانی رخ میدهد که شما با استفاده از -j CT --notrack در جدول raw صراحتاً آن را از رهگیری خارج کرده باشید.
- SNAT
- یک وضعیت مجازی؛ زمانی تطبیق مییابد که نشانی مبدأ اصلی با مقصد پاسخ متفاوت باشد.
- DNAT
- یک وضعیت مجازی؛ زمانی تطبیق مییابد که مقصد اصلی با مبدأ پاسخ متفاوت باشد.
وضعیتها برای --ctstatus:
- NONE
- هیچیک از موارد زیر.
- EXPECTED
- این یک اتصال مورد انتظار است (یعنی یک conntrack helper آن را برپا کرده است).
- SEEN_REPLY
- سیستم conntrack بستههایی را در هر دو جهت دیده است.
- ASSURED
- ورودی conntrack هرگز نباید پیش از موعد منقضی شود.
- CONFIRMED
- اتصال تایید شده است: بسته مبدأ سیستم را ترک کرده است.
cpu
- [!] --cpu number
- تطبیق پردازندهای که این بسته را مدیریت میکند. پردازندهها از 0 تا NR_CPUS-1 شمارهگذاری میشوند. میتواند در ترکیب با RPS (هدایت بسته از راه دور یا Remote Packet Steering) یا کارتهای شبکه چندصفی (multiqueue NICs) برای توزیع ترافیک شبکه روی صفهای مختلف استفاده شود.
مثال:
iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 0 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 1 -j REDIRECT --to-ports 8081
از لینوکس 2.6.36 به بعد در دسترس است.
dccp
- [!] --source-port,--sport port[:port]
- [!] --destination-port,--dport port[:port]
- [!] --dccp-types mask
- زمانی تطبیق مییابد که نوع بسته DCCP یکی از موارد موجود در 'mask' باشد. متغیر 'mask' فهرستی جداشده با کاما از انواع بستهها است. انواع بستهها عبارتند از: REQUEST RESPONSE DATA ACK DATAACK CLOSEREQ CLOSE RESET SYNC SYNCACK INVALID.
- [!] --dccp-option number
- در صورت تنظیم بودن گزینه DCCP تطبیق مییابد.
devgroup
تطبیق گروه دستگاه رابط ورودی/خروجی یک بسته.
- [!] --src-group name
- تطبیق گروه دستگاه ورودی
- [!] --dst-group name
- تطبیق گروه دستگاه خروجی
dscp
این ماژول فیلد ۶ بیتی DSCP را درون فیلد TOS در هدر IP تطبیق میدهد. DSCP در استاندارد IETF جایگزین TOS شده است.
- [!] --dscp value
- تطبیق با یک مقدار عددی (دهدهی یا هگزادسیمال) در بازه 0–63.
- [!] --dscp-class class
- تطبیق با کلاس DiffServ. این مقدار میتواند هر یک از کلاسهای BE، EF، AFxx یا CSx باشد. سپس به مقدار عددی مربوطه تبدیل خواهد شد.
dst (IPv6-specific)
این ماژول پارامترهای موجود در هدر گزینههای مقصد (Destination Options) را تطبیق میدهد.
- [!] --dst-len length
- طول کل این هدر بر حسب بایت (اوکتت).
- --dst-opts type[:length][,type[:length]...]
- نوع عددی گزینه و طول دادههای گزینه بر حسب بایت (اوکتت).
ecn
امکان تطبیق بیتهای ECN در هدر IPv4/IPv6 و TCP را فراهم میکند. ECN سازوکار اعلان صریح تراکم (Explicit Congestion Notification) است که در RFC3168 مشخص شده است.
- [!] --ecn-tcp-cwr
- در صورتی که بیت ECN CWR (پنجره تراکم دریافت شد / Congestion Window Received) پروتکل TCP تنظیم شده باشد، تطبیق مییابد.
- [!] --ecn-tcp-ece
- در صورتی که بیت ECN ECE (پژواک ECN / ECN Echo) پروتکل TCP تنظیم شده باشد، تطبیق مییابد.
- [!] --ecn-ip-ect num
- یک ECT (انتقال با قابلیت ECN / ECN-Capable Transport) خاص در IPv4/IPv6 را تطبیق میدهد. باید عددی بین `0` و `3` مشخص کنید.
esp
این ماژول مقادیر SPI را در هدر ESP بستههای IPsec تطبیق میدهد.
- [!] --espspi spi[:spi]
eui64 (IPv6-specific)
این ماژول بخش EUI-64 یک نشانی IPv6 پیکربندیشده خودکار بدون حالت (stateless autoconfigured) را تطبیق میدهد. این ماژول EUI-64 بهدستآمده از نشانی MAC مبدأ در فریم اترنت را با ۶۴ بیت پایینی نشانی مبدأ IPv6 مقایسه میکند. اما بیت "Universal/Local" مقایسه نمیشود. این ماژول فریمهای سایر لایههای پیوند را تطبیق نمیدهد و تنها در زنجیرههای PREROUTING، INPUT و FORWARD معتبر است.
frag (IPv6-specific)
این ماژول پارامترهای موجود در هدر قطعهبندی (Fragment header) را تطبیق میدهد.
- [!] --fragid id[:id]
- شناسه (Identification) دادهشده یا بازهای از آن را تطبیق میدهد.
- [!] --fraglen length
- این گزینه در نگارش هسته 2.6.10 یا بالاتر قابل استفاده نیست. طول هدر قطعهبندی ایستا است و این گزینه کاربردی ندارد.
- --fragres
- در صورتی که فیلدهای رزروشده با صفر پر شده باشند تطبیق مییابد.
- --fragfirst
- روی قطعه اول تطبیق مییابد.
- --fragmore
- در صورتی که قطعات بیشتری وجود داشته باشد تطبیق مییابد.
- --fraglast
- در صورتی که این آخرین قطعه باشد تطبیق مییابد.
hashlimit
ماژول hashlimit از باکتهای درهمسازی (hash buckets) برای بیان تطبیق محدودیت نرخ (مشابه تطبیق limit) برای گروهی از اتصالها با استفاده از یک قانون واحد iptables استفاده میکند. گروهبندی میتواند برای هر گروه میزبان (نشانی مبدأ و/یا مقصد) و/یا برای هر درگاه انجام شود. این ماژول به شما توانایی بیان "N بسته در هر واحد زمان به ازای هر گروه" یا "N بایت در ثانیه" را میدهد (برای چند مثال به زیر مراجعه کنید).
یکی از گزینههای محدودیت هش (--hashlimit-upto، --hashlimit-above) و گزینه --hashlimit-name الزامی هستند.
- --hashlimit-upto amount[/second|/minute|/hour|/day]
- در صورتی که نرخ کمتر یا مساوی با amount/quantum باشد تطبیق مییابد. این مقدار یا به صورت یک عدد با پسوند واحد زمان اختیاری (پیشفرض 3/hour است) مشخص میشود، یا به صورت amountb/second (تعداد بایت در ثانیه).
- --hashlimit-above amount[/second|/minute|/hour|/day]
- در صورتی که نرخ بیشتر از amount/quantum باشد تطبیق مییابد.
- --hashlimit-burst amount
- حداکثر تعداد اولیه بستهها برای تطبیق: این عدد هر بار که محدودیت مشخصشده در بالا به حد نصاب نرسد یکی شارژ میشود، تا سقف این عدد؛ پیشفرض 5 است. هنگامی که تطبیق نرخ مبتنی بر بایت درخواست شود، این گزینه مقدار بایتهایی را مشخص میکند که میتوانند از نرخ دادهشده فراتر روند. این گزینه باید با احتیاط استفاده شود — اگر ورودی منقضی شود، مقدار burst نیز بازنشانی میشود.
- --hashlimit-mode {srcip|srcport|dstip|dstport},...
- فهرستی جداشده با کاما از اشیایی که باید در نظر گرفته شوند. اگر هیچ گزینه --hashlimit-mode مشخص نشود، hashlimit شبیه به limit عمل میکند، اما با هزینه انجام نگهداریهای جدول درهمسازی همراه است.
- --hashlimit-srcmask prefix
- هنگامی که --hashlimit-mode srcip استفاده میشود، تمام نشانیهای مبدأ دریافتشده بر اساس طول پیشوند دادهشده گروهبندی میشوند و زیرشبکه ایجادشده مشمول hashlimit خواهد بود. متغیر prefix باید عددی بین 0 و 32 (شامل هر دو) باشد. توجه داشته باشید که --hashlimit-srcmask 0 اساساً همان کاری را انجام میدهد که عدم مشخص کردن srcip برای --hashlimit-mode انجام میدهد، اما از نظر فنی بار پردازشی بیشتری دارد.
- --hashlimit-dstmask prefix
- مانند --hashlimit-srcmask، اما برای نشانیهای مقصد.
- --hashlimit-name foo
- نام برای ورودی proc/net/ipt_hashlimit/foo/.
- --hashlimit-htable-size buckets
- تعداد باکتهای جدول درهمسازی.
- --hashlimit-htable-max entries
- حداکثر ورودیها در جدول درهمسازی.
- --hashlimit-htable-expire msec
- پس از چند میلیثانیه ورودیهای هش منقضی میشوند.
- --hashlimit-htable-gcinterval msec
- فاصله زمانی بر حسب میلیثانیه میان دورههای بازیافت حافظه (garbage collection).
- --hashlimit-rate-match
- جریان را به جای محدود کردن نرخ آن، طبقهبندی میکند. این گزینه مانند یک تطبیق درست/نادرست (true/false) عمل میکند که آیا نرخ بالاتر/پایینتر از یک مقدار مشخص است یا خیر.
- --hashlimit-rate-interval sec
- میتواند همراه با --hashlimit-rate-match برای تعیین بازهای که نرخ در آن باید نمونهبرداری شود، استفاده شود.
مثالها:
- تطبیق بر اساس میزبان مبدأ
- "1000 packets per second for every host in 192.168.0.0/16" => -s 192.168.0.0/16 --hashlimit-mode srcip --hashlimit-upto 1000/sec
- تطبیق بر اساس درگاه مبدأ
- "100 packets per second for every service of 192.168.1.1" => -s 192.168.1.1 --hashlimit-mode srcport --hashlimit-upto 100/sec
- تطبیق بر اساس زیرشبکه
- "10000 packets per minute for every /28 subnet (groups of 8 addresses) in 10.0.0.0/8" => -s 10.0.0.0/8 --hashlimit-mask 28 --hashlimit-upto 10000/min
- تطبیق بایت در ثانیه
- "flows exceeding 512kbyte/s" => --hashlimit-mode srcip,dstip,srcport,dstport --hashlimit-above 512kb/s
- تطبیق بایت در ثانیه
- "hosts that exceed 512kbyte/s, but permit up to 1Megabytes without matching" --hashlimit-mode dstip --hashlimit-above 512kb/s --hashlimit-burst 1mb
hbh (IPv6-specific)
این ماژول پارامترهای موجود در هدر گزینههای گامبهگام (Hop-by-Hop Options) را تطبیق میدهد.
- [!] --hbh-len length
- طول کل این هدر بر حسب بایت (اوکتت).
- --hbh-opts type[:length][,type[:length]...]
- نوع عددی گزینه و طول دادههای گزینه بر حسب بایت (اوکتت).
helper
این ماژول بستههای مرتبط با یک conntrack helper مشخص را تطبیق میدهد.
- [!] --helper string
- بستههای مرتبط با conntrack helper مشخصشده را تطبیق میدهد.
رشته میتواند برای بستههای مرتبط با یک نشست FTP در درگاه پیشفرض، برابر با "ftp" باشد. برای سایر درگاهها، مقدار portnr-- را به آن اضافه کنید، مانند "ftp-2121".
همین قوانین برای سایر conntrack helperها نیز اعمال میشود.
hl (IPv6-specific)
این ماژول فیلد محدودیت گام (Hop Limit) را در هدر IPv6 تطبیق میدهد.
- [!] --hl-eq value
- در صورتی که محدودیت گام برابر با value باشد تطبیق مییابد.
- --hl-lt value
- در صورتی که محدودیت گام کمتر از value باشد تطبیق مییابد.
- --hl-gt value
- در صورتی که محدودیت گام بیشتر از value باشد تطبیق مییابد.
icmp (IPv4-specific)
این افزونه در صورت مشخص شدن `--protocol icmp` قابل استفاده است. این ماژول گزینه زیر را فراهم میکند:
- [!] --icmp-type {type[/code]|typename}
- امکان مشخص
کردن نوع ICMP
را فراهم
میکند، که
میتواند
یک نوع عددی
ICMP، یک جفت
نوع/کد (type/code)،
یا یکی از
نامهای
نوع ICMP باشد
که توسط
دستور زیر
نمایش داده
میشوند:
iptables -p icmp -h
icmp6 (IPv6-specific)
این افزونه در صورت مشخص شدن `--protocol ipv6-icmp` یا `--protocol icmpv6` قابل استفاده است. این ماژول گزینه زیر را فراهم میکند:
- [!] --icmpv6-type type[/code]|typename
- امکان مشخص
کردن نوع ICMPv6
را فراهم
میکند، که
میتواند
یک type عددی
ICMPv6، یک type و code،
یا یکی از
نامهای
نوع ICMPv6 باشد
که توسط
دستور زیر
نمایش داده
میشوند:
ip6tables -p ipv6-icmp -h
iprange
این ماژول روی یک بازه دلخواه مشخصشده از نشانیهای IP تطبیق میدهد.
- [!] --src-range from[-to]
- تطبیق IP مبدأ در بازه مشخصشده.
- [!] --dst-range from[-to]
- تطبیق IP مقصد در بازه مشخصشده.
ipv6header (IPv6-specific)
این ماژول هدرهای افزونه IPv6 و/یا هدر لایه بالایی را تطبیق میدهد.
- --soft
- در صورتی که بسته شامل هر یک از هدرهای مشخصشده با --header باشد تطبیق مییابد.
- [!] --header header[,header...]
- بستهای را تطبیق میدهد که دقیقاً شامل تمام هدرهای مشخصشده باشد. هدرهای کپسولهشده در هدر ESP خارج از این محدوده هستند. انواع ممکن header میتوانند موارد زیر باشند:
- hop|hop-by-hop
- هدر گزینههای گامبهگام (Hop-by-Hop Options)
- dst
- هدر گزینههای مقصد (Destination Options)
- route
- هدر مسیریابی (Routing)
- frag
- هدر قطعهبندی (Fragment)
- auth
- هدر احراز اصالت (Authentication)
- esp
- هدر بار مفید امنیتی کپسولهشده (Encapsulating Security Payload)
- none
- نبود هدر بعدی (No Next header) که با مقدار 59 در فیلد 'Next Header' هدر IPv6 یا هر یک از هدرهای افزونه IPv6 مطابقت دارد
- prot
- که با هر هدر پروتکل لایه بالاتر مطابقت دارد. نام پروتکل از /etc/protocols و مقدار عددی نیز مجاز است. عدد 255 معادل با prot است.
ipvs
تطبیق ویژگیهای اتصالات IPVS (سرور مجازی لینوکس).
- [!] --ipvs
- بسته متعلق به یک اتصال IPVS باشد.
- هر یک از گزینههای زیر متضمن --ipvs هستند (حتی در حالت نقیض):
- [!] --vproto protocol
- پروتکل VIP جهت تطبیق؛ بر حسب شماره یا نام، مانند "tcp".
- [!] --vaddr address[/mask]
- نشانی VIP جهت تطبیق.
- [!] --vport port
- پورت VIP جهت تطبیق؛ بر حسب شماره یا نام، مانند "http".
- --vdir {ORIGINAL|REPLY}
- جهت جریان بسته (ارسال اولیه یا پاسخ).
- [!] --vmethod {GATE|IPIP|MASQ}
- روش بازپخش (Forwarding) مورد استفاده در IPVS.
- [!] --vportctl port
- پورت VIP اتصال کنترلکننده جهت تطبیق، مانند 21 برای FTP.
length
این ماژول طول بار داده (Payload) لایه ۳ یک بسته (مانند بسته لایه ۴) را با یک مقدار مشخص یا محدودهای از مقادیر تطبیق میدهد.
- [!] --length length[:length]
limit
این ماژول با استفاده از فیلتر سطل ژتون (Token Bucket Filter) بستهها را با نرخی محدود تطبیق میدهد. قاعدهای که از این افزونه استفاده میکند تا زمانی که این حد نصاب پر نشده باشد مطابقت خواهد داشت. برای مثال، میتوان از آن در ترکیب با هدف LOG برای ثبت گزارشهای محدود استفاده کرد.
ماژول xt_limit از نقیض پشتیبانی نمیکند — در این حالت باید از -m hashlimit ! --hashlimit rate با صرفنظر کردن از --hashlimit-mode استفاده کنید.
- --limit rate[/second|/minute|/hour|/day]
- حداکثر میانگین نرخ تطبیق: بهصورت یک عدد مشخص میشود، همراه با پسوند اختیاری `/second`، `/minute`، `/hour` یا `/day`؛ مقدار پیشفرض 3/hour است.
- --limit-burst number
- حداکثر تعداد اولیه بستهها جهت تطبیق: هر بار که نرخ مشخصشده در بالا پر نشود، یک واحد به این عدد افزوده میشود تا دوباره به این سقف برسد؛ مقدار پیشفرض 5 است.
mac
- [!] --mac-source address
- تطبیق نشانی MAC مبدأ. قالب آن باید بهصورت XX:XX:XX:XX:XX:XX باشد. توجه داشته باشید که این گزینه تنها برای بستههایی کاربرد دارد که از یک دستگاه اترنت آمده و وارد زنجیرههای PREROUTING، FORWARD یا INPUT میشوند.
mark
این ماژول فیلد علامتگذاری (mark) نتفیلتر مرتبط با یک بسته را تطبیق میدهد (که میتوان آن را با استفاده از هدف MARK در زیر تنظیم کرد).
- [!] --mark value[/mask]
- بستهها را با مقدار علامت (mark) بدون علامت (unsigned) دادهشده تطبیق میدهد (در صورت تعیین mask، پیش از مقایسه، مقدار بسته با mask با یکدیگر AND منطقی میشوند).
mh (IPv6-specific)
این افزونه در صورت مشخص شدن --protocol ipv6-mh یا --protocol mh بارگذاری میشود و گزینه زیر را فراهم میکند:
- [!] --mh-type type[:type]
- امکان
تعیین نوع
هدر تحرک (Mobility Header
یا MH) را
فراهم
میسازد که
میتواند
یک type عددی،
type یا یکی از
نامهای
انواع MH
باشد که
توسط دستور
زیر نمایش
داده
میشوند:
ip6tables -p mh -h
multiport
این ماژول مجموعهای از پورتهای مبدأ یا مقصد را تطبیق میدهد. حداکثر میتوان ۱۵ پورت را تعیین کرد. یک محدوده پورت (port:port) معادل دو پورت به شمار میآید. این ماژول تنها در همراهی با یکی از پروتکلهای زیر قابل استفاده است: tcp، udp، udplite، dccp و sctp.
- [!] --source-ports,--sports port[,port|,port:port]...
- اگر پورت مبدأ یکی از پورتهای دادهشده باشد، تطبیق مییابد. فلگ --sports نام مستعار کوتاهتری برای این گزینه است. چند پورت یا محدودههای پورت با ویرگول (کاما) از یکدیگر جدا میشوند و یک محدوده پورت با دونقطه (:) مشخص میشود. بنابراین 53,1024:65535 پورت ۵۳ و تمام پورتهای بین ۱۰۲۴ تا ۶۵۵۳۵ را تطبیق میدهد.
- [!] --destination-ports,--dports port[,port|,port:port]...
- اگر پورت مقصد یکی از پورتهای دادهشده باشد، تطبیق مییابد. فلگ --dports نام مستعار کوتاهتری برای این گزینه است.
- [!] --ports port[,port|,port:port]...
- اگر پورت مبدأ یا پورت مقصد با یکی از پورتهای دادهشده برابر باشد، تطبیق مییابد.
nfacct
تطبیقدهنده nfacct زیرساخت حسابداری و آمارگیری ترافیک (accounting) گسترده را برای iptables فراهم میکند. شما باید از این تطبیق همراه با ابزار مستقل فضای کاربری nfacct(8) استفاده کنید.
تنها گزینه موجود برای این تطبیق به شرح زیر است:
- --nfacct-name name
- امکان تعیین نام شیء آماری موجود را فراهم میکند که برای حسابداری ترافیک منطبق با این مجموعه قواعد به کار خواهد رفت.
برای استفاده از این افزونه، ابتدا باید یک شیء حسابداری ایجاد کنید:
- nfacct add http-traffic
سپس، باید آن را از طریق iptables به شیء حسابداری پیوند دهید:
- iptables -I INPUT -p tcp --sport 80 -m nfacct --nfacct-name http-traffic
- iptables -I OUTPUT -p tcp --dport 80 -m nfacct --nfacct-name http-traffic
سپس، میتوانید مقدار ترافیک منطبق با این قواعد را بررسی کنید:
- nfacct get http-traffic
- { pkts = 00000000000000000156, bytes = 00000000000000151786 } = http-traffic;
میتوانید nfacct(8) را از https://www.netfilter.org یا بهصورت جایگزین، از مخزن git.netfilter.org دریافت کنید.
osf
ماژول osf انگشتنگاری غیرفعال سیستمعامل (Passive OS Fingerprinting) را انجام میدهد. این ماژول برخی از دادهها (اندازه پنجره، MSS، گزینهها و ترتیب آنها، TTL، بیت DF و موارد دیگر) را از بستههای دارای بیت SYN فعال مقایسه میکند.
- [!] --genre string
- تطبیق نوع (ژانر) سیستمعامل با استفاده از انگشتنگاری غیرفعال.
- --ttl level
- انجام بررسیهای تکمیلی TTL روی بسته جهت تشخیص سیستمعامل. level میتواند یکی از مقادیر زیر باشد:
- 0
- مقایسه دقیق نشانی IP و TTL اثر انگشت. این حالت معمولاً در شبکههای محلی (LAN) کاربرد دارد.
- 1
- بررسی اینکه آیا TTL هدر IP کمتر از مقدار اثر انگشت است یا خیر. برای نشانیهای دارای قابلیت مسیریابی سراسری (اینترنت) مناسب است.
- 2
- به هیچوجه مقدار TTL مقایسه نشود.
- --log level
- ثبت انواع سیستمعاملهای تشخیص دادهشده در dmesg حتی اگر با مقدار مورد نظر تطبیق نداشته باشند. level میتواند یکی از مقادیر زیر باشد:
- 0
- ثبت تمام امضاهای منطبق یا ناشناخته
- 1
- تنها ثبت اولین مورد
- 2
- ثبت تمام امضاهای منطبق شناختهشده
ممکن است عبارتی شبیه به این را در syslog مشاهده کنید:
Windows [2000:SP3:Windows XP Pro SP1, 2000 SP3]: 11.22.33.55:4024 -> 11.22.33.44:139 hops=3 Linux [2.5-2.6:] : 1.2.3.4:42624 -> 1.2.3.5:22 hops=4
اثر انگشتهای سیستمعامل با استفاده از برنامه nfnl_osf قابل بارگذاری هستند. جهت بارگذاری اثر انگشتها از یک فایل، دستور زیر را اجرا کنید:
nfnl_osf -f /usr/share/xtables/pf.os
جهت حذف مجدد آنها:
nfnl_osf -f /usr/share/xtables/pf.os -d
پایگاه داده اثر انگشت از نشانی زیر قابل دریافت است: http://www.openbsd.org/cgi-bin/cvsweb/src/etc/pf.os
owner
این ماژول تلاش میکند ویژگیهای گوناگون ایجادکننده بسته را برای بستههایی که بهصورت محلی تولید شدهاند تطبیق دهد. این تطبیق تنها در زنجیرههای OUTPUT و POSTROUTING معتبر است. بستههای بازپخششده (Forwarded) هیچ سوکت مرتبطی ندارند. بستههای مربوط به ریسههای هسته (Kernel Threads) دارای سوکت هستند اما معمولاً مالکی ندارند.
- [!] --uid-owner username
- [!] --uid-owner userid[-userid]
- در صورتی تطبیق مییابد که ساختار فایل سوکت بسته (در صورت وجود) متعلق به کاربر دادهشده باشد. همچنین میتوانید یک UID عددی یا محدودهای از UIDها را مشخص کنید.
- [!] --gid-owner groupname
- [!] --gid-owner groupid[-groupid]
- در صورتی تطبیق مییابد که ساختار فایل سوکت بسته متعلق به گروه دادهشده باشد. همچنین میتوانید یک GID عددی یا محدودهای از GIDها را مشخص کنید.
- --suppl-groups
- باعث میشود گروه(های) تعیینشده با --gid-owner در گروههای تکمیلی (Supplementary Groups) فرآیند نیز بررسی شوند.
- [!] --socket-exists
- در صورتی که بسته با یک سوکت مرتبط باشد، تطبیق مییابد.
physdev
این ماژول روی دستگاههای ورودی و خروجی پورت بریج متصل به یک دستگاه پل (Bridge) تطبیق انجام میدهد. این ماژول بخشی از زیرساختی است که فایروال شفاف بریجینگ IP را فعال میسازد و تنها برای نسخههای هسته بالاتر از 2.5.44 مفید است.
- [!] --physdev-in name
- نام پورت پلی که بسته از طریق آن دریافت شده است (تنها برای بستههایی که وارد زنجیرههای INPUT، FORWARD و PREROUTING میشوند). اگر نام رابط به "+" ختم شود، هر رابطی که با این نام شروع شود تطبیق خواهد یافت. اگر بسته از طریق یک دستگاه پل نرسیده باشد، با این گزینه مطابقت نخواهد داشت مگر اینکه از '!' استفاده شده باشد.
- [!] --physdev-out name
- نام پورت پلی که بسته قرار است از طریق آن ارسال شود (برای بستههای پلشدهای که وارد زنجیرههای FORWARD و POSTROUTING میشوند). اگر نام رابط به "+" ختم شود، هر رابطی که با این نام شروع شود تطبیق خواهد یافت.
- [!] --physdev-is-in
- در صورتی تطبیق مییابد که بسته از طریق یک رابط پل وارد شده باشد.
- [!] --physdev-is-out
- در صورتی تطبیق مییابد که بسته از طریق یک رابط پل خارج شود.
- [!] --physdev-is-bridged
- در صورتی تطبیق مییابد که بسته در حال پل شدن باشد و بنابراین در حال مسیریابی نباشد. این گزینه تنها در زنجیرههای FORWARD و POSTROUTING مفید است.
pkttype
این ماژول نوع بسته در لایه پیوند داده (Link-Layer) را تطبیق میدهد.
- [!] --pkt-type {unicast|broadcast|multicast}
policy
این ماژول خطمشی (Policy) استفادهشده توسط IPsec را برای پردازش یک بسته تطبیق میدهد.
- --dir {in|out}
- برای انتخاب اینکه آیا خطمشی مورد استفاده برای کپسولهزدایی (Decapsulation) تطبیق داده شود یا خطمشی مورد استفاده برای کپسولهسازی (Encapsulation). مقدار in در زنجیرههای PREROUTING، INPUT و FORWARD معتبر است، و مقدار out در زنجیرههای POSTROUTING، OUTPUT و FORWARD معتبر است.
- --pol {none|ipsec}
- در صورتی تطبیق مییابد که بسته مشمول پردازش IPsec باشد. گزینه --pol none نمیتواند با --strict ترکیب شود.
- --strict
- تعیین میکند که آیا تطبیق دقیق خطمشی مد نظر است یا تطبیق با هر قاعدهای از خطمشی که با خطمشی دادهشده مطابقت داشته باشد.
برای هر عنصر خطمشی که قرار است تعریف شود، میتوان از یک یا چند گزینه از گزینههای زیر استفاده کرد. زمانی که --strict فعال باشد، باید حداقل از یک گزینه برای هر عنصر استفاده شود.
- [!] --reqid id
- شناسه reqid قاعده خطمشی را تطبیق میدهد. شناسه reqid را میتوان با setkey(8) با استفاده از unique:id به عنوان سطح تعیین کرد.
- [!] --spi spi
- شناسه SPI مربوط به SA را تطبیق میدهد.
- [!] --proto {ah|esp|ipcomp}
- پروتکل کپسولهسازی را تطبیق میدهد.
- [!] --mode {tunnel|transport}
- حالت کپسولهسازی را تطبیق میدهد.
- [!] --tunnel-src addr[/mask]
- نشانی نقطه انتهایی مبدأ مربوط به یک SA در حالت تونل را تطبیق میدهد. تنها با --mode tunnel معتبر است.
- [!] --tunnel-dst addr[/mask]
- نشانی نقطه انتهایی مقصد مربوط به یک SA در حالت تونل را تطبیق میدهد. تنها با --mode tunnel معتبر است.
- --next
- شروع عنصر بعدی در مشخصات خطمشی. تنها همراه با --strict قابل استفاده است.
quota
سهمیهبندی شبکه (Network Quota) را از طریق کاهش شمارنده بایت با عبور هر بسته پیادهسازی میکند. این شرط تا زمانی که شمارنده بایت به صفر برسد برقرار است (تطبیق مییابد). در صورت نقیض کردن، رفتار برعکس میشود (یعنی شرط تا زمانی که شمارنده بایت به صفر نرسد برقرار نخواهد بود).
- [!] --quota bytes
- میزان سهمیه بر حسب بایت.
rateest
برآوردگر نرخ (Rate Estimator) میتواند بر اساس نرخهای تخمینی که توسط هدف RATEEST جمعآوری شدهاند، تطبیق انجام دهد. این افزونه از تطبیق بر روی مقادیر مطلق bps/pps، مقایسه دو برآوردگر نرخ با یکدیگر، و تطبیق بر روی تفاوت میان دو برآوردگر نرخ پشتیبانی میکند.
برای درک بهتر گزینههای موجود، تمام ترکیبهای ممکن به شرح زیر است:
- حالت مطلق (Absolute):
- rateest operator rateest-bps
- rateest operator rateest-pps
- حالت مطلق + دلتا (Absolute + Delta):
- (rateest minus rateest-bps1) operator rateest-bps2
- (rateest minus rateest-pps1) operator rateest-pps2
- حالت نسبی (Relative):
- rateest1 operator rateest2 rateest-bps(without rate!)
- rateest1 operator rateest2 rateest-pps(without rate!)
- حالت نسبی + دلتا (Relative + Delta):
- (rateest1 minus rateest-bps1) operator (rateest2 minus rateest-bps2)
- (rateest1 minus rateest-pps1) operator (rateest2 minus rateest-pps2)
- --rateest-delta
- برای هر برآوردگر (خواه در حالت مطلق یا نسبی)، تفاوت بین نرخ جریان تعیینشده توسط برآوردگر و مقدار ایستا که با گزینههای BPS/PPS انتخاب شده است را محاسبه میکند. اگر نرخ جریان بیشتر از BPS/PPS مشخصشده باشد، به جای یک مقدار منفی از 0 استفاده خواهد شد. به عبارت دیگر، عبارت "max(0, rateest#_rate - rateest#_bps)" استفاده میشود.
- [!] --rateest-lt
- در صورتی که نرخ کمتر از نرخ/برآوردگر دادهشده باشد تطبیق مییابد.
- [!] --rateest-gt
- در صورتی که نرخ بیشتر از نرخ/برآوردگر دادهشده باشد تطبیق مییابد.
- [!] --rateest-eq
- در صورتی که نرخ برابر با نرخ/برآوردگر دادهشده باشد تطبیق مییابد.
در اصطلاح "حالت مطلق" (absolute mode)، تنها یک برآوردگر نرخ استفاده شده و با یک مقدار ایستا مقایسه میشود، در حالی که در "حالت نسبی" (relative mode)، دو برآوردگر نرخ با یکدیگر مقایسه میشوند.
- --rateest name
- نام یک برآوردگر نرخ برای حالت مطلق.
- --rateest1 name
- --rateest2 name
- نامهای دو برآوردگر نرخ برای حالت نسبی.
- --rateest-bps [value]
- --rateest-pps [value]
- --rateest-bps1 [value]
- --rateest-bps2 [value]
- --rateest-pps1 [value]
- --rateest-pps2 [value]
- برآوردگر(ها) را بر اساس بایت یا بسته در ثانیه مقایسه کرده و با مقدار انتخابشده میسنجد. لیست موارد بالا را برای اینکه کدام گزینه در چه موردی استفاده شود بررسی کنید. میتوان از پسوند یکا (واحد) استفاده کرد — پسوندهای موجود عبارتند از: bit، [kmgt]bit، [KMGT]ibit، Bps، [KMGT]Bps و [KMGT]iBps.
مثال: نمونهای از آنچه میتوان برای مسیریابی اتصالات داده خروجی از یک سرور FTP بر روی دو خط ارتباطی بر اساس پهنای باند دردسترس در لحظه شروع اتصال داده استفاده کرد:
# تخمین نرخهای خروجی
iptables -t mangle -A POSTROUTING -o eth0 -j RATEEST --rateest-name eth0 --rateest-interval 250ms --rateest-ewma 0.5s
iptables -t mangle -A POSTROUTING -o ppp0 -j RATEEST --rateest-name ppp0 --rateest-interval 250ms --rateest-ewma 0.5s
# نشانهگذاری بر اساس پهنای باند دردسترس
iptables -t mangle -A balance -m conntrack --ctstate NEW -m helper --helper ftp -m rateest --rateest-delta --rateest1 eth0 --rateest-bps1 2.5mbit --rateest-gt --rateest2 ppp0 --rateest-bps2 2mbit -j CONNMARK --set-mark 1
iptables -t mangle -A balance -m conntrack --ctstate NEW -m helper --helper ftp -m rateest --rateest-delta --rateest1 ppp0 --rateest-bps1 2mbit --rateest-gt --rateest2 eth0 --rateest-bps2 2.5mbit -j CONNMARK --set-mark 2
iptables -t mangle -A balance -j CONNMARK --restore-mark
realm (IPv4-specific)
این گزینه قلمرو مسیریابی (Routing Realm) را تطبیق میدهد. قلمروهای مسیریابی در پیکربندیهای پیچیده مسیریابی که شامل پروتکلهای پویای مسیریابی مانند BGP هستند، به کار میروند.
- [!] --realm value[/mask]
- شماره قلمرو دادهشده (و بهصورت اختیاری ماسک) را تطبیق میدهد. اگر یک عدد نباشد، مقدار میتواند نام یک قلمرو از مسیر /etc/iproute2/rt_realms باشد (در این صورت نمیتوان از ماسک استفاده کرد). هر دو مقدار و ماسک اعداد صحیح بدون علامت چهار بایتی هستند و میتوان آنها را در مبنای ده (دهدهی)، مبنای شانزده (هگز با پیشوند "0x") یا مبنای هشت (اکتال در صورت درج یک صفر در ابتدا) مشخص کرد.
recent
به شما امکان میدهد به صورت پویا فهرستی از نشانیهای IP بسازید و سپس به روشهای گوناگون بستهها را با آن فهرست مطابقت دهید.
برای نمونه، میتوانید فهرستی به نام "badguy" از افرادی که تلاش میکنند به درگاه ۱۳۹ فایروال شما متصل شوند بسازید و سپس بدون بررسی بیشتر، تمام بستههای آینده از مبدا آنها را DROP کنید.
گزینههای --set، --rcheck، --update و --remove مانعةالجمع هستند (همزمان قابل استفاده نیستند).
- --name name
- فهرست مورد استفاده برای دستورات را مشخص میکند. اگر نامی تعیین نشود، از نام DEFAULT استفاده خواهد شد.
- [!] --set
- نشانی مبدا بسته را به فهرست اضافه میکند. اگر نشانی مبدا از قبل در فهرست وجود داشته باشد، ورودی موجود بهروزرسانی میشود. این گزینه همیشه وضعیت موفقیتآمیز (یا در صورت استفاده از ! ناموفق) بازمیگرداند.
- --rsource
- نشانی مبدا هر بسته را در جدول فهرست اخیر تطبیق میدهد یا ذخیره میکند. این حالت پیشفرض است.
- --rdest
- نشانی مقصد هر بسته را در جدول فهرست اخیر تطبیق میدهد یا ذخیره میکند.
- --mask netmask
- ماسک شبکهای (netmask) که روی این فهرست اخیر اعمال خواهد شد.
- [!] --rcheck
- بررسی میکند که آیا نشانی مبدا بسته در حال حاضر در فهرست وجود دارد یا خیر.
- [!] --update
- مشابه --rcheck است، با این تفاوت که در صورت تطابق، برچسب زمانی «آخرین مشاهده» (last seen) را نیز بهروزرسانی میکند.
- [!] --remove
- بررسی میکند که آیا نشانی مبدا بسته در حال حاضر در فهرست وجود دارد یا خیر، و در این صورت، آن نشانی از فهرست حذف شده و قاعده مقدار درست (true) بازمیگرداند. اگر نشانی پیدا نشود، مقدار نادرست (false) بازگردانده میشود.
- --seconds seconds
- این گزینه باید همراه با یکی از گزینههای --rcheck یا --update به کار رود. در صورت استفاده، تطابق تنها زمانی رخ میدهد که نشانی در فهرست باشد و طی تعداد ثانیههای مشخصشده اخیر مشاهده شده باشد.
- --reap
- این گزینه تنها همراه با گزینه --seconds قابل استفاده است. در صورت استفاده، ورودیهایی که قدیمیتر از تعداد ثانیههای مشخصشده باشند پاکسازی میشوند.
- --hitcount hits
- این گزینه باید همراه با یکی از گزینههای --rcheck یا --update به کار رود. با استفاده از آن، تطابق تنها زمانی برقرار میشود که نشانی در فهرست باشد و تعداد بستههای دریافتشده بزرگتر یا مساوی مقدار مشخصشده باشد. این گزینه میتواند همراه با --seconds استفاده شود تا تطابق دقیقتری با الزام تعداد مراجعات مشخص در یک بازه زمانی معین ایجاد گردد.
- --rttl
- این گزینه فقط همراه با یکی از گزینههای --rcheck یا --update قابل استفاده است. با فعال کردن آن، تطابق تنها در صورتی رخ میدهد که نشانی در فهرست باشد و مقدار TTL بسته فعلی با TTL بستهای که قاعده --set را فعال کرده بود مطابقت داشته باشد. این ویژگی برای مواردی مفید است که افراد با جعل نشانی مبدا و ارسال بستههای ساختگی، تلاش میکنند از طریق این ماژول مانع دسترسی دیگران به سایت شما شده و حمله محرومسازی از سرویس (DoS) ایجاد کنند.
مثالها:
- iptables -A FORWARD -m recent --name badguy --rcheck --seconds 60 -j DROP
- iptables -A FORWARD -p tcp -i eth0 --dport 139 -m recent --name badguy --set -j DROP
فایلهای /proc/net/xt_recent/* فهرستهای کنونی نشانیها و اطلاعات مربوط به هر ورودی در هر فهرست را نشان میدهند.
هر فایل در /proc/net/xt_recent/ را میتوان برای مشاهده فهرست جاری خواند یا با دستورات زیر برای ویرایش فهرست در آن نوشت:
- echo +addr >/proc/net/xt_recent/DEFAULT
- برای افزودن addr به فهرست DEFAULT
- echo -addr >/proc/net/xt_recent/DEFAULT
- برای حذف addr از فهرست DEFAULT
- echo / >/proc/net/xt_recent/DEFAULT
- برای تخلیه فهرست DEFAULT (حذف همه ورودیها).
خود ماژول پارامترهایی را میپذیرد که مقادیر پیشفرض آنها در ادامه نشان داده شده است:
- ip_list_tot=100
- تعداد نشانیهای به خاطر سپرده شده در هر جدول.
- ip_pkt_list_tot=0
- تعداد بستههای ذخیرهشده به ازای هر نشانی. این پارامتر از نسخه ۳.۱۹ هسته منسوخ شده است، زیرا اندازه جدول را بر اساس پارامتر --hitcount دادهشده محاسبه میکند.
- ip_list_hash_size=0
- اندازه جدول درهمسازی (Hash table). مقدار ۰ به معنای محاسبه آن بر اساس ip_list_tot و گرد کردن آن به توان بعدی ۲ است (با مقدار پیشفرض 100 برای ip_list_tot، مقدار ip_list_hash_size به صورت پیشفرض 128 محاسبه میشود).
- ip_list_perms=0644
- مجوزهای دسترسی فایلهای /proc/net/xt_recent/*.
- ip_list_uid=0
- شناسه کاربری عددی (UID) برای مالکیت فایلهای /proc/net/xt_recent/*.
- ip_list_gid=0
- شناسه گروهی عددی (GID) برای مالکیت فایلهای /proc/net/xt_recent/*.
rpfilter
آزمون فیلتر مسیر معکوس (reverse path filter) را روی بسته انجام میدهد. اگر پاسخی به این بسته از همان رابطی ارسال شود که بسته از آن وارد شده است، بسته مطابقت خواهد داشت. توجه داشته باشید که برخلاف rp_filter درون هسته، با بستههای محافظتشده توسط IPSec رفتار ویژهای نمیشود. در صورت نیاز به این قابلیت، این تطابق را با تطابق policy ترکیب کنید. همچنین بستههایی که از طریق رابط loopback دریافت میشوند همیشه مجاز هستند. این تطابق فقط در زنجیره PREROUTING از جدولهای raw یا mangle قابل استفاده است.
- --loose
- برای مشخص کردن این به کار میرود که آزمون فیلتر مسیر معکوس حتی اگر دستگاه خروجی انتخابشده همان دستگاه مورد انتظار نباشد نیز مطابقت پیدا کند.
- --validmark
- هنگام انجام جستجوی مسیر در فیلتر مسیر معکوس، از مقدار nfmark بسته نیز استفاده میکند.
- --accept-local
- بستههای دریافتشده از شبکه را که نشانی مبدا آنها به دستگاه محلی نیز اختصاص دارد، مجاز میشمارد.
- --invert
- منطق تطابق را معکوس میکند؛ به جای تطبیق بستههایی که در آزمون فیلتر مسیر معکوس قبول شدهاند، بستههایی را تطبیق میدهد که در این آزمون رد شدهاند.
مثال برای ثبت در لاگ و انداختن (DROP) بستههایی که در آزمون فیلتر مسیر معکوس رد شدهاند:
- iptables -t raw -N RPFILTER
- iptables -t raw -A RPFILTER -m rpfilter -j RETURN
- iptables -t raw -A RPFILTER -m limit --limit 10/minute -j NFLOG --nflog-prefix "rpfilter drop"
- iptables -t raw -A RPFILTER -j DROP
- iptables -t raw -A PREROUTING -j RPFILTER
مثال برای انداختن بستههای ردشده بدون ثبت در لاگ:
- iptables -t raw -A RPFILTER -m rpfilter --invert -j DROP
rt (IPv6-specific)
تطابق روی هدر مسیریابی IPv6.
- [!] --rt-type type
- تطبیق نوع (عددی).
- [!] --rt-segsleft num[:num]
- تطبیق فیلد «بخشهای باقیمانده» (`segments left`) (به صورت بازه).
- [!] --rt-len length
- تطبیق طول این هدر.
- --rt-0-res
- فیلد رزرو شده را نیز تطبیق میدهد (type=0).
- --rt-0-addrs addr[,addr...]
- تطبیق نشانیهای نوع ۰ (فهرست).
- --rt-0-not-strict
- فهرست نشانیهای نوع ۰ یک فهرست سختگیرانه (strict) نیست.
sctp
این ماژول هدرهای پروتکل کنترل انتقال جریان (SCTP) را تطبیق میدهد.
- [!] --source-port,--sport port[:port]
- [!] --destination-port,--dport port[:port]
- [!] --chunk-types {all|any|only} chunktype[:flags] [...]
- حرف بزرگ
برای فلگ
نشاندهنده
تطابق در
صورت فعال (set)
بودن فلگ
است، و حرف
کوچک
نشاندهنده
تطابق در
صورت
غیرفعال (unset)
بودن آن
است.
انواع تطابق:
- all
- تطابق در صورتی که تمام انواع قطعات (chunk types) دادهشده وجود داشته باشند و فلگها مطابقت کنند.
- any
- تطابق در صورتی که هر یک از انواع قطعات دادهشده با فلگهای مربوطه وجود داشته باشد.
- only
- تطابق در
صورتی که
تنها انواع
قطعات
دادهشده
با فلگهای
مربوطه
حضور داشته
باشند و هیچ
قطعه دیگری
وجود
نداشته
باشد.
انواع قطعات (Chunk types): DATA INIT INIT_ACK SACK HEARTBEAT HEARTBEAT_ACK ABORT SHUTDOWN SHUTDOWN_ACK ERROR COOKIE_ECHO COOKIE_ACK ECN_ECNE ECN_CWR SHUTDOWN_COMPLETE I_DATA RE_CONFIG PAD ASCONF ASCONF_ACK FORWARD_TSN I_FORWARD_TSN
chunk type available flags DATA I U B E i u b e I_DATA I U B E i u b e ABORT T t SHUTDOWN_COMPLETE T t
(حروف کوچک به معنای خاموش بودن فلگ و حروف بزرگ به معنای روشن بودن آن است)
مثالها:
- iptables -A INPUT -p sctp --dport 80 -j DROP
- iptables -A INPUT -p sctp --chunk-types any DATA,INIT -j DROP
- iptables -A INPUT -p sctp --chunk-types any DATA:Be -j ACCEPT
set
این ماژول مجموعههای IP را که توسط ipset(8) تعریف میشوند تطبیق میدهد.
- [!] --match-set setname flag[,flag]...
- که در آن فلگها فهرستی جداشده با کاما از مشخصههای src و/یا dst هستند و حداکثر میتوانند شامل ۶ مورد باشند. بنابراین دستور
- iptables -A FORWARD -m set --match-set test src,dst
- بستههایی را تطبیق میدهد که (در صورتی که نوع مجموعه ipportmap باشد) جفت نشانی مبدا و درگاه مقصد آنها در مجموعه مشخصشده پیدا شود. اگر نوع مجموعه مشخصشده تکبُعدی باشد (برای نمونه ipmap)، دستور بستههایی را مطابقت میدهد که نشانی مبدا آنها در مجموعه مشخصشده یافت شود.
- --return-nomatch
- اگر گزینه --return-nomatch مشخص شده باشد و نوع مجموعه از پرچم nomatch پشتیبانی کند، فرآیند تطبیق معکوس میشود: تطابق با عنصری که دارای پرچم nomatch است مقدار true بازمیگرداند، در حالی که تطابق با یک عنصر معمولی مقدار false میدهد.
- ! --update-counters
- اگر گزینه --update-counters نقیض شده باشد، شمارندههای بسته و بایتِ عنصر منطبق در مجموعه بهروزرسانی نخواهند شد. به طور پیشفرض، شمارندههای بسته و بایت بهروزرسانی میشوند.
- ! --update-subcounters
- اگر پرچم --update-subcounters نقیض شده باشد، شمارندههای بسته و بایت برای عنصر منطبق در مجموعه عضوِ یک مجموعه از نوع فهرست بهروزرسانی نمیشوند. به طور پیشفرض، شمارندههای بسته و بایت بهروزرسانی میشوند.
- [!] --packets-eq value
- اگر بسته با عنصری در مجموعه تطبیق یابد، تنها در صورتی تطابق برقرار است که شمارنده بسته آن عنصر نیز با مقدار مشخصشده برابر باشد.
- --packets-lt value
- اگر بسته با عنصری در مجموعه تطبیق یابد، تنها در صورتی تطابق برقرار است که شمارنده بسته آن عنصر کمتر از مقدار مشخصشده باشد.
- --packets-gt value
- اگر بسته با عنصری در مجموعه تطبیق یابد، تنها در صورتی تطابق برقرار است که شمارنده بسته آن عنصر بزرگتر از مقدار مشخصشده باشد.
- [!] --bytes-eq value
- اگر بسته با عنصری در مجموعه تطبیق یابد، تنها در صورتی تطابق برقرار است که شمارنده بایت آن عنصر نیز با مقدار مشخصشده برابر باشد.
- --bytes-lt value
- اگر بسته با عنصری در مجموعه تطبیق یابد، تنها در صورتی تطابق برقرار است که شمارنده بایت آن عنصر کمتر از مقدار مشخصشده باشد.
- --bytes-gt value
- اگر بسته با عنصری در مجموعه تطبیق یابد، تنها در صورتی تطابق برقرار است که شمارنده بایت آن عنصر بزرگتر از مقدار مشخصشده باشد.
گزینهها و فلگهای مربوط به شمارندههای بسته و بایت در صورتی که مجموعه بدون پشتیبانی از شمارنده تعریف شده باشد نادیده گرفته میشوند.
گزینه --match-set میتواند با --set جایگزین شود، به شرطی که با گزینهای از دیگر افزونهها تداخل نداشته باشد.
استفاده از -m set نیازمند پشتیبانی هسته از ipset است که در هستههای استاندارد از لینوکس 2.6.39 به بعد ارائه شده است.
socket
این ماژول در صورتی تطبیق مییابد که با جستجوی سوکت برای بسته، یک سوکت باز TCP/UDP یافت شود. اگر یک سوکت شنونده متصل (bound) غیر صفر یا برقرارشده (established) وجود داشته باشد (احتمالاً با یک نشانی غیر محلی)، تطابق صورت میگیرد. این جستجو با استفاده از چندتایی (tuple) بسته برای بستههای TCP/UDP یا هدر اصلی TCP/UDP جاسازیشده (embedded) درون یک بسته خطای ICMP/ICMPv6 انجام میشود.
- --transparent
- سوکتهای غیرشفاف (non-transparent) را نادیده میگیرد.
- --nowildcard
- سوکتهای متصل به نشانی عمومی ('any' address یا 0.0.0.0) را نادیده نمیگیرد. تطابق سوکت به صورت پیشفرض شنوندگان متصل به صفر (zero-bound) را نمیپذیرد، زیرا در این صورت سرویسهای محلی میتوانند ترافیکی را که باید هدایت (forward) میشد شنود و رهگیری کنند. از این رو، این گزینه هنگام تطبیق ترافیک در حال هدایت برای تغییر مسیر چنین بستههایی به ماشین محلی از طریق مسیریابی مبتنی بر پالیسی (policy routing)، پیامدهای امنیتی دارد. هنگام استفاده از تطابق سوکت برای پیادهسازی پروکسیهای کاملاً شفاف متصل به نشانیهای غیرمحلی، توصیه میشود به جای آن از گزینه --transparent استفاده کنید.
مثال (با این فرض که بستههای دارای نشان ۱ به صورت محلی تحویل داده میشوند):
- -t mangle -A PREROUTING -m socket --transparent -j MARK --set-mark 1
- --restore-skmark
- نشان بسته را به نشان سوکت منطبق تنظیم میکند. میتواند با گزینههای --transparent و --nowildcard ترکیب شود تا سوکتهای قابل تطبیق در هنگام بازگردانی نشان بسته محدود شوند.
مثال: برنامهای ۲ سوکت شفاف (IP_TRANSPARENT) باز کرده و با استفاده از گزینه سوکت SO_MARK روی آنها نشان میگذارد. میتوانیم بستههای منطبق را فیلتر کنیم:
- -t mangle -I PREROUTING -m socket --transparent --restore-skmark -j action
- -t mangle -A action -m mark --mark 10 -j action2
- -t mangle -A action -m mark --mark 11 -j action3
state
افزونه «state» زیرمجموعهای از ماژول «conntrack» است. «state» امکان دسترسی به وضعیت ردیابی اتصال (connection tracking) را برای این بسته فراهم میکند.
- [!] --state state
- که در آن state فهرستی جداشده با کاما از وضعیتهای اتصال برای تطابق است. تنها زیرمجموعهای از وضعیتهای شناختهشده توسط «conntrack» در اینجا شناسایی میشوند: INVALID، ESTABLISHED، NEW، RELATED یا UNTRACKED. برای شرح هر یک از آنها، به بخش «conntrack» در همین صفحه راهنما مراجعه کنید.
statistic
این ماژول بستهها را بر اساس یک شرط آماری تطبیق میدهد. از دو حالت مجزا پشتیبانی میکند که با گزینه --mode تعیین میشوند.
گزینههای پشتیبانیشده:
- --mode mode
- حالت تطبیق قاعده را تعیین میکند؛ حالتهای پشتیبانیشده عبارتند از random و nth.
- [!] --probability p
- احتمال تطابق تصادفی یک بسته را تعیین میکند. این گزینه فقط در حالت random کار میکند. مقدار p باید بین 0.0 و 1.0 باشد. تفکیکپذیری پشتیبانیشده در گامهای 1/2147483648 است.
- [!] --every n
- از هر n بسته، یک بسته را تطبیق میدهد. این گزینه تنها در حالت nth کار میکند (همچنین به گزینه --packet نگاه کنید).
- --packet p
- مقدار اولیه شمارنده (0 <= p <= n-1، پیشفرض 0) را برای حالت nth تنظیم میکند.
string
این ماژول با استفاده از یک راهبرد انطباق الگو، رشته دادهشده را مطابقت میدهد. این ماژول به هسته لینوکس نسخه 2.6.14 یا بالاتر نیاز دارد.
- --algo {bm|kmp}
- راهبرد انطباق الگو را انتخاب میکند. (bm = Boyer-Moore و kmp = Knuth-Pratt-Morris)
- --from offset
- آفستی (مبدا جابجایی) را که جستجو برای انطباق از آنجا آغاز میشود تعیین میکند. در صورت عدم تعیین، مقدار پیشفرض ۰ است.
- --to offset
- آفستی را که بررسی باید تا آن انجام شود تعیین میکند؛ به این معنا که بایت offset (شمارششده از ۰) آخرین بایتی است که اسکن میشود و بیشترین موقعیت آخرین نویسه pattern خواهد بود. در صورت عدم تعیین، پیشفرض اندازه کل بسته است.
- [!] --string pattern
- الگوی دادهشده را تطبیق میدهد.
- [!] --hex-string pattern
- الگوی دادهشده را در قالب نمادگذاری هگزادسیمال (hex) تطبیق میدهد.
- --icase
- نادیده گرفتن بزرگی و کوچکی حروف هنگام جستجو.
- مثالها:
- # الگوی
رشتهای
میتواند
برای
نویسههای
متنی ساده
استفاده
شود.
iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string 'GET /index.html' -j LOG - # الگوی
رشتهای
هگز
میتواند
برای
نویسههای
غیرقابلچاپ
استفاده
شود، مانند
|0D 0A| یا |0D0A|.
iptables -p udp --dport 53 -m string --algo bm --from 40 --to 57 --hex-string '|03|www|09|netfilter|03|org|00|'
نکته: از آنجا که الگوریتم بایر-مور (BM) جستجوی انطباقها را از راست به چپ انجام میدهد و هسته ممکن است یک بسته را در چندین بلوک ناپیوسته ذخیره کند، این احتمال وجود دارد که یک مورد منطبق در چندین بلوک پراکنده شده باشد؛ در چنین حالتی این الگوریتم قادر به یافتن آن نخواهد بود.
اگر میخواهید مطمئن شوید که چنین اتفاقی هرگز رخ نمیدهد، به جای آن از الگوریتم کنوت-پرات-موریس (KMP) استفاده کنید. در نتیجه، الگوریتم جستجوی رشته مناسب را بسته به مورد کاربرد خود انتخاب نمایید.
برای نمونه، اگر از این ماژول برای فیلترسازی، سیستم تشخیص نفوذ مبتنی بر شبکه (NIDS) یا هر هدف امنیتی مشابه دیگر استفاده میکنید، الگوریتم KMP را انتخاب کنید. از سوی دیگر، اگر کارایی و عملکرد برای شما اولویت اصلی است — برای مثال در حال دستهبندی بستهها برای اعمال سیاستهای کیفیت خدمات (QoS) هستید — و نادیده گرفته شدن انطباقهای احتمالی پراکنده در چندین قطعه برایتان اهمیتی ندارد، BM را انتخاب کنید.
tcp
این افزونهها در صورت مشخص شدن --protocol tcp قابل استفاده هستند و گزینههای زیر را فراهم میکنند:
- [!] --source-port,--sport port[:port]
- مشخص کردن درگاه (پورت) یا بازهای از پورتهای مبدا. این مقدار میتواند نام یک سرویس یا شماره پورت باشد. همچنین میتوان یک بازه فراگیر (شامل ابتدا و انتها) را با قالب first:last مشخص کرد. اگر پورت اول ذکر نشود، مقدار «0» و اگر پورت آخر ذکر نشود، مقدار «65535» در نظر گرفته میشود. فلگ --sport یک نام مستعار راحت برای این گزینه است.
- [!] --destination-port,--dport port[:port]
- مشخص کردن درگاه (پورت) یا بازهای از پورتهای مقصد. فلگ --dport یک نام مستعار راحت برای این گزینه است.
- [!] --tcp-flags mask comp
- تطبیق در
صورتی که
فلگهای TCP
مطابق
موارد
مشخصشده
باشند.
آرگومان
نخست mask
فلگهایی
است که باید
بررسی شوند
(بهصورت
فهرستی که
با کاما جدا
شدهاند)، و
آرگومان
دوم comp
فهرستی از
فلگها است
که حتماً
باید تنظیم
(set) شده باشند.
این فلگها
عبارتند از:
SYN ACK FIN RST URG PSH ALL NONE.
بنابراین
دستور
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN
تنها با بستههایی تطبیق مییابد که فلگ SYN در آنها تنظیم شده و فلگهای ACK، FIN و RST تنظیم نشده باشند. - [!] --syn
- تنها با بستههای TCP تطبیق مییابد که بیت SYN آنها تنظیم شده و بیتهای ACK، RST و FIN پاک (صفر) باشند. چنین بستههایی برای درخواست برقراری اتصال TCP استفاده میشوند؛ برای نمونه، مسدود کردن این بستهها در یک رابط ورودی از اتصالات ورودی TCP جلوگیری میکند، اما بر اتصالات خروجی TCP اثری نخواهد داشت. این گزینه معادل --tcp-flags SYN,RST,ACK,FIN SYN است. اگر فلگ «!» پیش از --syn قرار گیرد، مفهوم گزینه معکوس میشود.
- [!] --tcp-option number
- تطبیق در صورتی که گزینه (option) پروتکل TCP تنظیم شده باشد.
tcpmss
این افزونه فیلد TCP MSS (بزرگترین اندازه سگمنت) در هدر TCP را تطبیق میدهد. از این گزینه تنها میتوانید روی بستههای TCP SYN یا SYN/ACK استفاده کنید، چرا که MSS تنها در طول دستتکانی (handshake) پروتکل TCP در زمان آغاز اتصال مذاکره میشود.
- [!] --mss value[:value]
- تطبیق با مقدار یا بازه مشخصی از TCP MSS. در صورت مشخص کردن یک بازه، value دوم باید بزرگتر یا مساوی با value اول باشد.
time
این افزونه در صورتی تطبیق مییابد که زمان/تاریخ رسیدن بسته در یک بازه مشخص قرار داشته باشد. تمامی گزینهها اختیاری هستند، اما در صورت مشخص شدن با عملگر منطقی AND با یکدیگر ترکیب میشوند. همه زمانها بهطور پیشفرض بر مبنای UTC تفسیر میشوند.
- --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
- --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
- تنها در بازه زمانی دادهشده تطبیق مییابد، که باید بر اساس قالب "T" استاندارد ISO 8601 باشد. بازه زمانی مجاز از 1970-01-01T00:00:00 تا 2038-01-19T04:17:07 است.
- اگر --datestart یا --datestop مشخص نشوند، به ترتیب مقادیر پیشفرض 1970-01-01 و 2038-01-19 در نظر گرفته خواهند شد.
- --timestart hh:mm[:ss]
- --timestop hh:mm[:ss]
- تنها در طول ساعات مشخصشده از روز تطبیق مییابد. بازه زمانی ممکن 00:00:00 تا 23:59:59 است. صفرهای ابتدایی مجاز هستند (مانند "06:03") و به درستی در مبنای ۱۰ تفسیر میشوند.
- [!] --monthdays day[,day...]
- تنها در روزهای مشخصشده از ماه تطبیق مییابد. مقادیر ممکن از 1 تا 31 هستند. توجه داشته باشید که مشخص کردن 31 بدیهی است که در ماههایی که روز سیویکم ندارند تطبیق داده نخواهد شد؛ همین امر برای ماه فوریه ۲۸ یا ۲۹ روزه نیز صادق است.
- [!] --weekdays day[,day...]
- تنها در روزهای مشخصشده از هفته تطبیق مییابد. مقادیر ممکن عبارتند از: Mon، Tue، Wed، Thu، Fri، Sat، Sun یا به ترتیب مقادیر عددی از 1 تا 7. همچنین میتوانید از حالتهای دو حرفی (Mo، Tu و غیره) استفاده کنید.
- --contiguous
- زمانی که مقدار --timestop کوچکتر از مقدار --timestart باشد، این بازه را به جای فواصل زمانی جداگانه، به عنوان یک دوره زمانی پیوسته در نظر میگیرد. بخش مثالها (EXAMPLES) را ببینید.
- --kerneltz
- استفاده از منطقه زمانی هسته (kernel timezone) به جای UTC برای تعیین اینکه آیا بسته مطابق با قوانین زمانی است یا خیر.
درباره مناطق زمانی هسته: لینوکس زمان سیستم را همواره بر مبنای UTC نگه میدارد. در هنگام بوت، زمان سیستم از یک منبع مرجع زمانی مقداردهی اولیه میشود. در صورتی که این منبع فاقد اطلاعات منطقه زمانی باشد (مانند ساعت سختافزاری CMOS RTC در معماری x86)، زمان بر مبنای UTC در نظر گرفته میشود. اما اگر منبع زمانی بر مبنای UTC نباشد، فضای کاربری (userspace) باید پس از دسترسی به اطلاعات، زمان دقیق سیستم و منطقه زمانی را در اختیار هسته قرار دهد.
زمان محلی (Local time) قابلیتی بر فراز زمان سیستم (که مستقل از منطقه زمانی است) به شمار میرود. هر فرآیند درک خاص خود را از زمان محلی دارد که از طریق متغیر محیطی TZ تعیین میشود. هسته نیز متغیر آفست منطقه زمانی خاص خود را دارد. متغیر محیطی TZ در فضای کاربری تعیین میکند که زمان سیستم مبتنی بر UTC چگونه نمایش داده شود، برای نمونه هنگام اجرای date(1) یا آنچه روی ساعت میزکار میبینید. رشته TZ ممکن است در تاریخهای مختلف به آفستهای متفاوتی ترجمه شود، که این امر امکان تغییر خودکار ساعت در فضای کاربری را با آغاز یا پایان ساعت تابستانی (DST) فراهم میکند. متغیر آفست منطقه زمانی هسته زمانی به کار میرود که نیاز به تبدیل دادهها میان منابع غیر UTC (مانند فایلسیستمهای FAT) و UTC (که مابقی بخشهای سیستم از آن استفاده میکنند) باشد.
نکته مهم در رابطه با منطقه زمانی هسته این است که توزیعهای لینوکس ممکن است از تنظیم منطقه زمانی هسته صرفنظر کرده و تنها زمان سیستم را تنظیم کنند. حتی اگر یک توزیع خاص در هنگام بوت منطقه زمانی را تنظیم کند، معمولاً آفست منطقه زمانی هسته را که در زمان تغییر ساعت تابستانی تغییر میکند بهروز نگه نمیدارد. سرویس ntpd نیز منطقه زمانی هسته را دستکاری نمیکند، بنابراین اجرای آن این مشکل را حل نخواهد کرد. در نتیجه ممکن است با یک منطقه زمانی مواجه شوید که همیشه +0000 است، یا در نیمی از سال اشتباه کار میکند. بنابراین، استفاده از --kerneltz به هیچوجه توصیه نمیشود.
مثالها (EXAMPLES): برای تطبیق در روزهای آخر هفته:
- -m time --weekdays Sa,Su
یا برای تطبیق (یکباره) در یک دوره تعطیلات ملی:
- -m time --datestart 2007-12-24 --datestop 2007-12-27
از آنجا که زمان پایان فراگیر (inclusive) است، برای اینکه ثانیه اول روز بعد را شامل نشود، به زمان پایانی مانند زیر نیاز خواهید داشت:
- -m time --datestart 2007-01-01T17:00 --datestop 2007-01-01T23:59:59
در طول ساعت ناهار:
- -m time --timestart 12:30 --timestop 13:30
چهارمین جمعه ماه:
- -m time --weekdays Fr --monthdays 22,23,24,25,26,27,28
(توجه داشته باشید که این دستور از یک ویژگی خاص ریاضی استفاده میکند. گفتن «چهارمین پنجشنبه یا چهارمین جمعه» در قالب یک قاعده ممکن نیست، اگرچه با چندین قاعده امکانپذیر است.)
تطبیق در طول چند روز متوالی ممکن است مطابق انتظار عمل نکند. برای مثال:
- -m time --weekdays Mo --timestart 23:00 --timestop 01:00
این دستور در روز دوشنبه به مدت یک ساعت از نیمهشب تا ۱ بامداد، و سپس دوباره به مدت یک ساعت دیگر از ۲۳:۰۰ به بعد تطبیق خواهد یافت. اگر این رفتار مورد نظر نیست (مثلاً اگر میخواهید «به مدت دو ساعت از ساعت ۲۳:۰۰ روز دوشنبه به بعد» تطبیق داده شود)، باید در مثال بالا گزینه --contiguous را نیز مشخص کنید.
tos
این ماژول فیلد ۸ بیتی Type of Service (نوع سرویس) در هدر IPv4 (یعنی شامل بیتهای "Precedence") یا فیلد اولویت (Priority - که آن هم ۸ بیتی است) در هدر IPv6 را تطبیق میدهد.
- [!] --tos value[/mask]
- تطبیق بستهها با مقدار نشانه (mark) دادهشده برای TOS. در صورت مشخص شدن ماسک (mask)، پیش از مقایسه، با نشانه TOS بهصورت منطقی AND میشود.
- [!] --tos symbol
- هنگام استفاده از تطبیق tos در IPv4 میتوانید یک نام نمادین (سیمبولیک) مشخص کنید. فهرست نامهای شناختهشده TOS را میتوان با فراخوانی iptables با -m tos -h به دست آورد. توجه داشته باشید که این گزینه مستلزم ماسک 0x3F است (یعنی تمامی بیتها به جز بیتهای ECN).
ttl (IPv4-specific)
این ماژول فیلد TTL (طول عمر یا Time To Live) را در هدر IP تطبیق میدهد.
- [!] --ttl-eq ttl
- تطبیق با مقدار دادهشده برای TTL.
- --ttl-gt ttl
- تطبیق در صورتی که TTL بزرگتر از مقدار دادهشده باشد.
- --ttl-lt ttl
- تطبیق در صورتی که TTL کمتر از مقدار دادهشده باشد.
u32
افزونه U32 بررسی میکند که آیا مقادیر تا سقف ۴ بایت استخراجشده از یک بسته، دارای مقادیر مشخصشده هستند یا خیر. قواعد تعیین آنچه باید استخراج شود به اندازه کافی کلی است که بتوان دادهها را در آفستهای مشخصی از هدرهای TCP یا بدنه دادهها (payload) پیدا کرد.
- [!] --u32 tests
- آرگومان این گزینه معادل برنامهای در یک زبان کوچک است که در زیر شرح داده شده است.
- tests := location "=" value | tests "&&" location "=" value
- value := range | value "," range
- range := number | number ":" number
یک عدد منفرد n به همان صورت n:n تفسیر میشود. n:m نیز به عنوان بازه عددی >=n و <=m تفسیر میگردد.
- location := number | location operator number
- operator := "&" | "<<" | ">>" | "@"
عملگرهای &، <<، >> و && همانند زبان C عمل میکنند. عملگر = در واقع عملگر عضویت در مجموعه است و نحو (syntax) مقدار، یک مجموعه را توصیف میکند. عملگر @ امکان حرکت به هدر بعدی را فراهم میسازد و در ادامه بیشتر توضیح داده شده است.
در حال حاضر برخی محدودیتهای پیادهسازی روی اندازه آزمونها (tests) وجود دارد:
- *
- حداکثر ۱۰ مورد «=» (و ۹ مورد «&&») در آرگومان u32
- *
- حداکثر ۱۰ بازه (و ۹ کاما) به ازای هر مقدار (value)
- *
- حداکثر ۱۰ عدد (و ۹ عملگر) به ازای هر مکان (location)
برای توصیف مفهوم مکان (location)، ماشینی فرضی را در نظر بگیرید که آن را تفسیر میکند. این ماشین سه ثبات (رجیستر) دارد:
- ثبات A از نوع char * است و در ابتدا نشانی هدر IP را نگه میدارد
- ثباتهای B و C اعداد صحیح ۳۲ بیتی بدون علامت هستند و در ابتدا صفر هستند
دستورالعملها عبارتند از:
- number
- B = number;
- C = (*(A+B)<<24) + (*(A+B+1)<<16) + (*(A+B+2)<<8) + *(A+B+3)
- &number
- C = C & number
- << number
- C = C << number
- >> number
- C = C >> number
- @number
- A = A + C; then do the instruction number
هرگونه دسترسی به حافظه خارج از محدوده [skb->data,skb->end] موجب عدم تطبیق (fail) میشود. در غیر این صورت، نتیجه محاسبات مقدار نهایی رجیستر C خواهد بود.
استفاده از فاصلههای خالی (whitespace) در آزمونها مجاز است اما اجباری نیست. با این حال، کاراکترهایی که در آنجا به کار میروند معمولاً نیاز به نقلقول شل (quoting) دارند، بنابراین بهتر است آرگومانها داخل علامتهای نقلقول (کوتیشن) قرار گیرند.
مثال:
- تطبیق بستههای IP با طول کل >= 256
- هدر IP شامل یک فیلد طول کل در بایتهای ۲ تا ۳ است (bytes 2–3).
- --u32 "0 & 0xFFFF = 0x100:0xFFFF"
- بایتهای ۰ تا ۳ (bytes 0–3) را بخوان
- آن را با 0xFFFF منطقی AND کن (که بایتهای ۲ تا ۳ را به دست میدهد)، و بررسی کن که آیا در بازه [0x100:0xFFFF] قرار دارد یا خیر
مثال: (واقعگرایانهتر، بنابراین پیچیدهتر)
- تطبیق بستههای ICMP با نوع icmp برابر با 0
- ابتدا بررسی کن که آیا بسته یک بسته ICMP است، که شرط آن بایت ۹ (پروتکل) = ۱ است
- --u32 "6 & 0xFF = 1 && ...
- بایتهای ۶ تا ۹ را بخوان، از & برای دور انداختن بایتهای ۶ تا ۸ استفاده کن و نتیجه را با ۱ مقایسه کن. سپس بررسی کن که بسته قطعهقطعه (fragment) نباشد. (اگر چنین باشد، ممکن است بخشی از یک بسته باشد اما ما همیشه نمیتوانیم تشخیص دهیم.) توجه: اگر میخواهید هر چیزی فراتر از هدر IP را تطبیق دهید، عموماً به این بررسی نیاز خواهید داشت. ۶ بیت آخر بایت ۶ و تمام بایت ۷ برابر با ۰ هستند اگر و تنها اگر این یک بسته کامل باشد (نه یک فرگمنت). در غیر این صورت، میتوانید فقط با بررسی ۵ بیت آخر بایت ۶، فرگمنتهای اول را مجاز کنید.
-
... 4 & 0x3FFF = 0 && ... - آزمون پایانی: نخستین بایت پس از هدر IP (همان type) برابر با ۰ باشد. اینجاست که باید از نحو @ استفاده کنیم. طول هدر IP (بر حسب IHL در کلمات ۳۲ بیتی) در نیمه راست بایت ۰ خود هدر IP ذخیره شده است.
-
... 0 >> 22 & 0x3C @ 0 >> 24 = 0" - عدد ۰ نخست به معنای خواندن بایتهای ۰ تا ۳ است، >>22 یعنی آن را ۲۲ بیت به راست شیفت بده. شیفت دادن ۲۴ بیت نخستین بایت را میداد، بنابراین ۲۲ بیت چهار برابر آن به علاوه چند بیت بیشتر است. سپس &3C دو بیت اضافی در سمت راست و چهار بیت نخستِ بایت اول را حذف میکند. برای نمونه، اگر IHL=5 باشد، طول هدر IP برابر ۲۰ بایت (۴ × ۵) است. در این حالت بایتهای ۰ تا ۱ (در باینری) xxxx0101 yyzzzzzz هستند، >>22 مقدار ۱۰ بیتی xxxx0101yy را میدهد و &3C مقدار 010100 را نتیجه میدهد. علامت @ به معنای استفاده از این عدد به عنوان آفست جدید درون بسته است و خواندن چهار بایت از آنجا را آغاز میکند. این ۴ بایت نخست بدنه (payload) بسته ICMP است که بایت ۰ آن نوع ICMP (همان ICMP type) است. بنابراین، ما مقدار را ۲۴ بیت به راست شیفت میدهیم تا همه چیز به جز بایت نخست حذف شود و نتیجه را با ۰ مقایسه میکنیم.
مثال:
- بایتهای ۸ تا ۱۲ از بدنه TCP (یعنی TCP payload) یکی از مقادیر ۱، ۲، ۵ یا ۸ باشد
- ابتدا بررسی میکنیم که بسته یک بسته TCP باشد (مشابه ICMP).
- --u32 "6 & 0xFF = 6 && ...
- سپس بررسی میکنیم که قطعهقطعه (fragment) نباشد (مشابه بالا).
-
... 0 >> 22 & 0x3C @ 12 >> 26 & 0x3C @ 8 = 1,2,5,8" - عبارت 0>>22&3C همانند بالا تعداد بایتهای هدر IP را محاسبه میکند. عملگر @ این مقدار را به آفست جدید درون بسته تبدیل میکند که ابتدای هدر TCP است. طول هدر TCP (باز هم در کلمات ۳۲ بیتی) نیمه سمت چپ بایت ۱۲ هدر TCP است. عبارت 12>>26&3C این طول را بر حسب بایت محاسبه میکند (مشابه هدر IP در مرحله پیش). عملگر "@" این مقدار را به آفست جدید تبدیل میکند که آغاز بدنه TCP است. در نهایت، 8 بایتهای ۸ تا ۱۲ بدنه را میخواند و = بررسی میکند که آیا نتیجه یکی از اعداد ۱، ۲، ۵ یا ۸ است یا خیر.
udp
این افزونهها در صورت مشخص شدن --protocol udp قابل استفاده هستند و گزینههای زیر را فراهم میکنند:
- [!] --source-port,--sport port[:port]
- مشخص کردن درگاه (پورت) یا بازهای از پورتهای مبدا. برای جزئیات بیشتر به توضیحات گزینه --source-port در افزونه TCP مراجعه کنید.
- [!] --destination-port,--dport port[:port]
- مشخص کردن درگاه (پورت) یا بازهای از پورتهای مقصد. برای جزئیات بیشتر به توضیحات گزینه --destination-port در افزونه TCP مراجعه کنید.
افزونههای هدف (TARGET EXTENSIONS)
دستور iptables میتواند از ماژولهای هدف گسترشیافته استفاده کند؛ موارد زیر در توزیع استاندارد گنجانده شدهاند.
AUDIT
این هدف برای بستههایی که با این هدف مطابقت پیدا میکنند، رکوردهای حسابرسی (audit) ایجاد میکند. از آن میتوان برای ثبت بستههای پذیرفتهشده (accepted)، دور ریختهشده (dropped) و رد شده (rejected) استفاده کرد. برای جزئیات بیشتر به auditd(8) مراجعه کنید.
- --type {accept|drop|reject}
- نوع رکورد حسابرسی را تعیین میکند. از لینوکس ۴.۱۲ به بعد، این گزینه دیگر تأثیری بر پیامهای حسابرسی ایجادشده ندارد. همچنان برای حفظ سازگاری توسط iptables پذیرفته میشود، اما نادیده گرفته خواهد شد.
مثال:
- iptables -N AUDIT_DROP
- iptables -A AUDIT_DROP -j AUDIT
- iptables -A AUDIT_DROP -j DROP
CHECKSUM
این هدف بهصورت انتخابی برای رفع مشکل برنامههای قدیمی یا معیوب به کار میرود. تنها در جدول mangle قابل استفاده است.
- --checksum-fill
- چکسام را در بستهای که فاقد چکسام است محاسبه و درج میکند. این مورد بهویژه زمانی مفید است که بخواهید مشکل برنامههای کاربردی قدیمی مانند کلاینتهای DHCP را که با باراندازی چکسام (checksum offloads) بهدرستی کار نمیکنند دور بزنید، اما نخواهید تخلیه بار چکسام را در دستگاه خود غیرفعال کنید.
CLASSIFY
این ماژول به شما اجازه میدهد مقدار skb->priority را تنظیم کنید (و در نتیجه بسته را در یک کلاس خاص CBQ طبقهبندی نمایید).
- --set-class major:minor
- مقدار کلاس اصلی (major) و فرعی (minor) را تنظیم میکند. مقادیر همیشه بهصورت هگزادسیمال (شانزدهشانزدهی) تفسیر میشوند، حتی اگر پیشوند 0x مشخص نشده باشد.
CLUSTERIP (IPv4-specific)
این ماژول امکان پیکربندی یک کلاستر ساده از گرهها را فراهم میکند که یک آدرس IP و MAC مشخص را بدون نیاز به یک توازنبخش بار (load balancer) صریح در برابر آنها به اشتراک میگذارند. اتصالات بهصورت ایستا میان گرههای این کلاستر توزیع میشوند.
لطفاً توجه داشته باشید که هدف CLUSTERIP منسوخ در نظر گرفته شده و استفاده از تطبیق cluster که انعطافپذیرتر بوده و محدود به IPv4 نیست توصیه میشود.
- --new
- یک ClusterIP جدید ایجاد میکند. این گزینه را همیشه باید روی اولین قاعده برای یک ClusterIP مشخص تنظیم کنید.
- --hashmode mode
- حالت درهمسازی (hashing) را مشخص میکند. باید یکی از موارد sourceip، sourceip-sourceport، یا sourceip-sourceport-destport باشد.
- --clustermac mac
- آدرس MAC مربوط به ClusterIP را مشخص میکند. باید یک آدرس چندپخشی لایه پیوند (link-layer multicast) باشد.
- --total-nodes num
- تعداد کل گرههای درون این کلاستر.
- --local-node num
- شماره گره محلی درون این کلاستر.
- --hash-init rnd
- مقدار تصادفی (seed) اولیه مورد استفاده برای مقداردهی اولیه درهمسازی را تعیین میکند.
CONNMARK
این ماژول مقدار نشان (mark) نتفیلتر مرتبط با یک اتصال را تنظیم میکند. عرض این نشان ۳۲ بیت است.
- --set-xmark value[/mask]
- بیتهای مشخصشده توسط mask را صفر میکند و value را با ctmark عملیات XOR مینماید.
- --save-mark [--nfmask nfmask] [--ctmask ctmask]
- با استفاده از ماسکهای دادهشده، نشان بسته (nfmark) را در نشان اتصال (ctmark) کپی میکند. مقدار جدید ctmark به این صورت تعیین میشود:
- ctmark = (ctmark & ~ctmask) ^ (nfmark & nfmask)
- یعنی ctmask مشخص میکند چه بیتهایی پاک شوند و nfmask تعیین میکند چه بیتهایی از nfmark با ctmark عمل XOR شوند. مقادیر پیشفرض ctmask و nfmask برابر با 0xFFFFFFFF است.
- --restore-mark [--nfmask nfmask] [--ctmask ctmask]
- با استفاده از ماسکهای مشخصشده، نشان اتصال (ctmark) را در نشان بسته (nfmark) کپی میکند. مقدار جدید nfmark به این صورت تعیین میشود:
- nfmark = (nfmark & ~nfmask) ^ (ctmark & ctmask);
- یعنی nfmask مشخص میکند چه بیتهایی پاک شوند و ctmask تعیین میکند چه بیتهایی از ctmark با nfmark عمل XOR شوند. مقادیر پیشفرض ctmask و nfmask برابر با 0xFFFFFFFF است.
- گزینه --restore-mark تنها در جدول mangle معتبر است.
یادافزاهای (mnemonics) زیر برای --set-xmark در دسترس هستند:
- --and-mark bits
- عمل AND بیتی بین ctmark و bits انجام میدهد. (یادافزایی برای --set-xmark 0/invbits که در آن invbits نقیض دودویی bits است.)
- --or-mark bits
- عمل OR بیتی بین ctmark و bits انجام میدهد. (یادافزایی برای --set-xmark bits/bits.)
- --xor-mark bits
- عمل XOR بیتی بین ctmark و bits انجام میدهد. (یادافزایی برای --set-xmark bits/0.)
- --set-mark value[/mask]
- نشان اتصال را تنظیم میکند. اگر ماسکی مشخص شده باشد، تنها آن بیتهایی که در ماسک تنظیم شدهاند تغییر مییابند.
- --save-mark [--mask mask]
- نشان nfmark را در ctmark کپی میکند. اگر ماسکی مشخص شده باشد، تنها آن بیتها کپی میشوند.
- --restore-mark [--mask mask]
- نشان ctmark را در nfmark کپی میکند. اگر ماسکی مشخص شده باشد، تنها آن بیتها کپی میشوند. این گزینه تنها در جدول mangle معتبر است.
CONNSECMARK
این ماژول نشانههای امنیتی را از بستهها به اتصالات (در صورت بدون برچسب بودن) و از اتصالات مجدداً به بستهها (باز هم تنها در صورت بدون برچسب بودن) کپی میکند. معمولاً در ترکیب با SECMARK استفاده میشود و در جدول security معتبر است (برای سازگاری رو به عقب با کرنلهای قدیمیتر، در جدول mangle نیز معتبر است).
CT
هدف CT پارامترهایی را برای یک بسته یا اتصال مرتبط با آن تعیین میکند. این هدف یک ورودی رهگیری اتصال «الگو» (template) را به بسته الصاق میکند که سپس هنگام مقداردهی اولیه یک ورودی جدید ct توسط هسته conntrack به کار میرود. بنابراین این هدف تنها در جدول «raw» معتبر است.
- --notrack
- رهگیری اتصال را برای این بسته غیرفعال میکند.
- --helper name
- از کمکرسان (helper) مشخصشده با name برای اتصال استفاده میکند. این روش انعطافپذیرتر از بارگذاری ماژولهای کمکی conntrack با پورتهای از پیش تعیینشده است.
- --ctevents event[,...]
- تنها رویدادهای conntrack مشخصشده را برای این اتصال تولید میکند. انواع رویدادهای ممکن عبارتند از: new، related، destroy، reply، assured، protoinfo، helper، mark (این مورد به ctmark اشاره دارد نه nfmark)، natseqinfo، secmark (ctsecmark).
- --expevents event[,...]
- تنها رویدادهای انتظار (expectation) مشخصشده را برای این اتصال تولید میکند. انواع رویدادهای ممکن عبارتند از: new.
- --zone-orig {id|mark}
- برای ترافیکی که از جهت ORIGINAL (اصلی) میآید، این بسته را به ناحیه (zone) id اختصاص میدهد و جستجوها را فقط در آن ناحیه انجام میدهد. اگر بهجای id از mark استفاده شود، ناحیه از nfmark بسته مشتق میشود.
- --zone-reply {id|mark}
- برای ترافیکی که از جهت REPLY (پاسخ) میآید، این بسته را به ناحیه id اختصاص میدهد و جستجوها را فقط در آن ناحیه انجام میدهد. اگر بهجای id از mark استفاده شود، ناحیه از nfmark بسته مشتق میشود.
- --zone {id|mark}
- این بسته را به ناحیه id اختصاص میدهد و جستجوها را فقط در آن ناحیه انجام میدهد. اگر بهجای id از mark استفاده شود، ناحیه از nfmark بسته مشتق میشود. بهطور پیشفرض، بستهها ناحیه ۰ دارند. این گزینه برای هر دو جهت اعمال میشود.
- --timeout name
- از سیاست مهلت زمانی (timeout) مشخصشده با name برای اتصال استفاده میکند. این گزینه تعریف سیاست مهلت زمانی منعطفتری را نسبت به مقادیر سراسری موجود در /proc/sys/net/netfilter/nf_conntrack_*_timeout_* ارائه میدهد.
DNAT
این هدف تنها در جدول nat و در زنجیرههای PREROUTING و OUTPUT و زنجیرههای تعریفشده توسط کاربر که فقط از این زنجیرهها فراخوانی میشوند، معتبر است. این هدف مشخص میکند که آدرس مقصد بسته باید اصلاح شود (و تمام بستههای بعدی در این اتصال نیز دستکاری خواهند شد)، و بررسی قواعد باید متوقف گردد. گزینههای زیر را میپذیرد:
- --to-destination [ipaddr[-ipaddr]][:port[-port[/baseport]]]
- میتواند یک آدرس IP مقصد جدید، یا یک بازه فراگیر از آدرسهای IP را مشخص کند. همچنین در صورتی که قاعده یکی از پروتکلهای tcp، udp، dccp یا sctp را مشخص کرده باشد، میتواند بهصورت اختیاری یک بازه پورت را تعیین کند. اگر هیچ بازه پورتی مشخص نشود، پورت مقصد هرگز تغییر نخواهد کرد. اگر هیچ آدرس IP مشخص نشود، تنها پورت مقصد تغییر داده میشود. اگر baseport داده شود، تفاضل پورت مقصد اصلی و مقدار آن بهعنوان آفست در بازه نگاشت پورت استفاده میشود. این قابلیت امکان ایجاد محدودههای نگاشت پورت جابجا شده (shifted portmap) را فراهم میکند و از نسخه ۴.۱۸ هسته لینوکس در دسترس است. برای یک تک پورت یا baseport، میتوان از نام یک سرویس به شرح مندرج در /etc/services استفاده کرد.
- --random
- نگاشت پورت منبع را تصادفی میکند (هسته >= 2.6.22).
- --persistent
- برای هر اتصال، همان آدرس مبدأ/مقصد را به یک کلاینت اختصاص میدهد. این گزینه جایگزین هدف SAME شده است. پشتیبانی از نگاشتهای پایدار از نسخه 2.6.29-rc2 در دسترس است.
- پشتیبانی از IPv6 از نسخههای هسته لینوکس >= 3.7 در دسترس است.
DNPT (IPv6-specific)
ترجمه بدون وضعیت پیشوند شبکه IPv6-به-IPv6 مقصد (stateless destination IPv6-to-IPv6 Network Prefix Translation، همانطور که در RFC 6296 توصیف شده) را فراهم میکند.
باید از این هدف در جدول mangle استفاده کنید، نه در جدول nat. گزینههای زیر را میپذیرد:
- --src-pfx [prefix/length]
- پیشوند مبدأ که قصد ترجمه آن را دارید و طول آن را تعیین میکند.
- --dst-pfx [prefix/length]
- پیشوند مقصد که قصد استفاده از آن را در ترجمه دارید و طول آن را تعیین میکند.
برای معکوس کردن ترجمه باید از هدف SNPT استفاده کنید. مثال:
- ip6tables -t mangle -I POSTROUTING -s fd00::/64 ! -o vboxnet0 -j SNPT --src-pfx fd00::/64 --dst-pfx 2001:e20:2000:40f::/64
- ip6tables -t mangle -I PREROUTING -i wlan0 -d 2001:e20:2000:40f::/64 -j DNPT --src-pfx 2001:e20:2000:40f::/64 --dst-pfx fd00::/64
ممکن است نیاز به فعالسازی پروکسی همسایه IPv6 داشته باشید:
- sysctl -w net.ipv6.conf.all.proxy_ndp=1
همچنین باید از هدف NOTRACK برای غیرفعال کردن رهگیری اتصال برای جریانهای ترجمهشده استفاده کنید.
DSCP
این هدف مقدار بیتهای DSCP درون هدر TOS بسته IPv4 را تغییر میدهد. از آنجا که بسته را دستکاری میکند، تنها در جدول mangle قابل استفاده است.
- --set-dscp value
- فیلد DSCP را روی یک مقدار عددی (میتواند دهدهی یا هگزادسیمال باشد) تنظیم میکند.
- --set-dscp-class class
- فیلد DSCP را روی یک کلاس DiffServ تنظیم میکند.
ECN (IPv4-specific)
این هدف بهصورت انتخابی سیاهچالههای شناختهشده ECN را دور میزند. تنها در جدول mangle قابل استفاده است.
- --ecn-tcp-remove
- تمام بیتهای ECN را از هدر TCP حذف میکند. البته، این گزینه تنها در ترکیب با -p tcp قابل استفاده است.
HL (IPv6-specific)
این هدف برای تغییر فیلد محدودیت پرش (Hop Limit) در هدر IPv6 استفاده میشود. فیلد Hop Limit مشابه مقداری است که در IPv4 به عنوان TTL شناخته میشود. تنظیم یا افزایش فیلد Hop Limit بالقوه میتواند بسیار خطرناک باشد، بنابراین باید به هر قیمتی از آن اجتناب شود. این هدف تنها در جدول mangle معتبر است.
هرگز این مقدار را روی بستههایی که شبکه محلی شما را ترک میکنند تنظیم نکرده یا افزایش ندهید!
- --hl-set value
- فیلد Hop Limit را روی «value» تنظیم میکند.
- --hl-dec value
- فیلد Hop Limit را به میزان «value» بار کاهش میدهد.
- --hl-inc value
- فیلد Hop Limit را به میزان «value» بار افزایش میدهد.
HMARK
مانند MARK است، یعنی fwmark را تنظیم میکند، اما نشان از طریق درهمسازی گزینشگرهای انتخابی بسته محاسبه میشود. همچنین باید بازه نشان و بهصورت اختیاری، آفست شروع را مشخص کنید. پیامهای خطای ICMP بازرسی شده و برای محاسبه درهمسازی استفاده میشوند.
گزینههای موجود عبارتند از:
- --hmark-tuple tuple
- اعضای ممکن تاپل عبارتند از: src به معنی آدرس مبدأ (آدرس IPv4 یا IPv6)، dst به معنی آدرس مقصد (آدرس IPv4 یا IPv6)، sport به معنی پورت مبدأ (TCP، UDP، UDPlite، SCTP، DCCP)، dport به معنی پورت مقصد (TCP، UDP، UDPlite، SCTP، DCCP)، spi به معنی شاخص پارامتر امنیتی یا Security Parameter Index (در AH، ESP)، و ct به معنی استفاده از تاپل conntrack به جای گزینشگرهای بسته.
- --hmark-mod value (must be > 0)
- پیمانه (Modulus) برای محاسبه درهمسازی (جهت محدود کردن بازه نشانهای ممکن).
- --hmark-offset value
- آفست برای شروع نشانها.
- برای استفادههای پیشرفته، بهجای استفاده از
- --hmark-tuple، میتوانید پیشوندها و ماسکهای سفارشی را مشخص کنید:
- --hmark-src-prefix cidr
- ماسک آدرس مبدأ در نمادگذاری CIDR.
- --hmark-dst-prefix cidr
- ماسک آدرس مقصد در نمادگذاری CIDR.
- --hmark-sport-mask value
- یک ماسک ۱۶ بیتی پورت مبدأ بهصورت هگزادسیمال.
- --hmark-dport-mask value
- یک ماسک ۱۶ بیتی پورت مقصد بهصورت هگزادسیمال.
- --hmark-spi-mask value
- یک فیلد ۳۲ بیتی با ماسک spi.
- --hmark-proto-mask value
- یک فیلد ۸ بیتی با شماره پروتکل لایه ۴.
- --hmark-rnd value
- یک مقدار تصادفی سفارشی ۳۲ بیتی برای ورودی محاسبه درهمسازی.
مثالها:
iptables -t mangle -A PREROUTING -m conntrack --ctstate NEW
-j HMARK --hmark-tuple ct,src,dst,proto --hmark-offset 10000 --hmark-mod 10
--hmark-rnd 0xfeedcafe
iptables -t mangle -A PREROUTING -j HMARK --hmark-offset 10000 --hmark-tuple src,dst,proto --hmark-mod 10 --hmark-rnd 0xdeafbeef
IDLETIMER
این هدف میتواند برای تشخیص زمانی که رابطها برای مدت زمان معینی غیرفعال (idle) بودهاند، استفاده شود. تایمرها با برچسبها شناسایی میشوند و زمانی ایجاد میگردند که یک قاعده با یک برچسب جدید تنظیم شود. قواعد همچنین یک مقدار مهلت زمانی (بر حسب ثانیه) را بهعنوان گزینه میپذیرند. اگر بیش از یک قاعده از همان برچسب تایمر استفاده کند، هر زمان که هر یک از این قواعد مطابقت پیدا کند، تایمر دوباره راهاندازی میشود. یک ورودی برای هر تایمر در sysfs ایجاد میشود. این مشخصه شامل زمان باقیمانده تا منقضی شدن تایمر است. این مشخصهها در زیر کلاس xt_idletimer قرار دارند:
/sys/class/xt_idletimer/timers/<label>
هنگامی که تایمر منقضی میشود، ماژول هدف یک اعلان sysfs را به فضای کاربری (userspace) ارسال میکند که سپس میتواند تصمیم بگیرد چه کاری انجام دهد (مثلاً قطع اتصال برای صرفهجویی در مصرف انرژی).
- --timeout amount
- این مدت زمان به ثانیه است که ارسال اعلان را فعال میکند.
- --label string
- این یک شناسه یکتا برای تایمر است. حداکثر طول رشته برچسب ۲۷ کاراکتر است.
LED
این هدف یک راهانداز LED (یا LED-trigger) ایجاد میکند که سپس میتواند به چراغهای نشانگر سیستم متصل شود تا هنگام عبور بستههای مشخصی از سیستم، چشمک بزنند یا روشن شوند. یک مثال میتواند روشن شدن یک LED برای چند دقیقه در هر بار برقراری اتصال SSH به رایانه محلی باشد. گزینههای زیر رفتار راهانداز را کنترل میکنند:
- --led-trigger-id name
- این نام اختصاص دادهشده به راهانداز LED است. نام واقعی راهانداز دارای پیشوند «netfilter-» خواهد بود.
- --led-delay ms
- مشخص میکند که پس از ورود یک بسته، LED تا چه مدت (به میلیثانیه) قبل از خاموش شدن مجدد روشن بماند. مقدار پیشفرض 0 است (چشمک زدن در سریعترین زمان ممکن). مقدار ویژه inf را میتوان مشخص کرد تا LED پس از فعال شدن برای همیشه روشن بماند. (در این صورت راهانداز باید بهصورت دستی از دستگاه LED جدا شده و مجدداً متصل شود تا دوباره خاموش گردد.)
- --led-always-blink
- همیشه باعث میشود با رسیدن بسته، LED چشمک بزند، حتی اگر قبلاً روشن باشد. این گزینه امکان اطلاع از بستههای جدید را حتی با مقادیر تأخیر طولانی (که در غیر این صورت منجر به تمدید بیصدای زمان تأخیر میشد) فراهم میسازد.
- مثال:
- ایجاد یک راهانداز LED برای ترافیک ورودی SSH:
- iptables -A INPUT -p tcp --dport 22 -j LED --led-trigger-id ssh
- سپس راهانداز جدید را به یک LED متصل کنید:
- echo netfilter-ssh >/sys/class/leds/ledname/trigger
LOG
ثبت وقایع هسته (لاگ) را برای بستههای منطبق فعال میکند. هنگامی که این گزینه برای یک قاعده تنظیم شود، هسته لینوکس برخی از اطلاعات تمام بستههای منطبق (مانند بیشتر فیلدهای سرایند IP/IPv6) را از طریق لاگ هسته چاپ میکند (جایی که میتوان آن را با dmesg(1) یا در syslog خواند).
این یک «هدف غیرپایاندهنده» است، به این معنی که پیمایش قواعد در قاعده بعدی ادامه مییابد. بنابراین اگر میخواهید بستههایی را که رد میکنید لاگ کنید، از دو قاعده جداگانه با معیارهای تطابق یکسان استفاده کنید؛ ابتدا از هدف LOG و سپس از DROP (یا REJECT) استفاده نمایید.
- --log-level level
- سطح ثبت گزارش، که میتواند عددی (بسته به سیستم) یا یک شناسه نامگذاریشده (نمونیک) باشد. مقادیر ممکن عبارتند از (به ترتیب کاهش اولویت): emerg، alert، crit، error، warning، notice، info یا debug.
- --log-prefix prefix
- پیامهای لاگ را با پیشوند مشخصشده آغاز میکند؛ حداکثر تا ۲۹ حرف طول دارد، و برای متمایز ساختن پیامها در لاگها مفید است.
- --log-tcp-sequence
- شمارههای توالی TCP را ثبت میکند. در صورتی که گزارشهای لاگ توسط کاربران عادی قابل خواندن باشند، این یک ریسک امنیتی است.
- --log-tcp-options
- گزینههای موجود در سرایند بسته TCP را ثبت میکند.
- --log-ip-options
- گزینههای موجود در سرایند بسته IP/IPv6 را ثبت میکند.
- --log-uid
- شناسه کاربری (userid) پردازشی را که بسته را تولید کرده است ثبت میکند.
- --log-macdecode
- آدرسهای MAC و پروتکل را ثبت میکند.
MARK
این هدف برای تنظیم مقدار نشان (mark) نتفیلتر مرتبط با بسته به کار میرود. به عنوان مثال، میتوان از آن در ترکیب با مسیریابی بر اساس fwmark (نیازمند iproute2) استفاده کرد. اگر قصد چنین کاری را دارید، توجه داشته باشید که نشان باید در یکی از زنجیرههای PREROUTING یا OUTPUT از جدول mangle تنظیم شود تا روی مسیریابی اثر بگذارد. فیلد نشان ۳۲ بیتی است.
- --set-xmark value[/mask]
- بیتهای مشخصشده در mask را صفر کرده و مقدار value را به صورت XOR روی نشان بسته ("nfmark") اعمال میکند. اگر mask حذف شود، مقدار 0xFFFFFFFF در نظر گرفته میشود.
- --set-mark value[/mask]
- بیتهای مشخصشده در mask را صفر کرده و مقدار value را به صورت OR روی نشان بسته اعمال میکند. اگر mask حذف شود، مقدار 0xFFFFFFFF در نظر گرفته میشود.
شناسههای اختصاری (نمونیکهای) زیر در دسترس هستند:
- --and-mark bits
- عملیات AND دودویی روی nfmark با bits. (نمونیک برای --set-xmark 0/invbits، که در آن invbits نقیض دودویی bits است.)
- --or-mark bits
- عملیات OR دودویی روی nfmark با bits. (نمونیک برای --set-xmark bits/bits.)
- --xor-mark bits
- عملیات XOR دودویی روی nfmark با bits. (نمونیک برای --set-xmark bits/0.)
MASQUERADE
این هدف فقط در جدول nat و در زنجیره POSTROUTING معتبر است. این هدف فقط باید برای اتصالاتی با IPهای پویا و تخصیصیافته به صورت داینامیک (مانند dialup) استفاده شود: اگر دارای یک آدرس IP ایستا هستید، باید از هدف SNAT استفاده کنید. ماسکریدینگ (Masquerading) معادل تعیین یک نگاشت به آدرس IP رابطی است که بسته از آن خارج میشود، اما این اثر را نیز به همراه دارد که با قطع شدن رابط، اتصالات فراموش میشوند (از حافظه پاک میشوند). این رفتار صحیح است زیرا اتصال dialup بعدی بعید است همان آدرس رابط را داشته باشد (و در نتیجه هر اتصال برقرارشده در هر حال از دست میرود).
- --to-ports port[-port]
- محدودهای از پورتهای مبدا را برای استفاده مشخص میکند و قواعد اکتشافی (heuristics) پیشفرض انتخاب پورت مبدا در SNAT را بازنویسی مینماید (به بالا مراجعه کنید). این گزینه تنها در صورتی معتبر است که قاعده یکی از پروتکلهای زیر را نیز مشخص کرده باشد: tcp، udp، dccp یا sctp.
- --random
- نگاشت پورت مبدا را تصادفیسازی میکند (هستههای ۲.۶.۲۱ به بعد). از هسته ۵.۰ به بعد، گزینه --random کاملاً مشابه --random-fully است.
- --random-fully
- نگاشت پورت مبدا را به طور کامل تصادفیسازی میکند (هستههای ۳.۱۳ به بعد).
- پشتیبانی از IPv6 از هستههای ۳.۷ لینوکس به بعد در دسترس است.
NETMAP
این هدف به شما امکان میدهد یک شبکه کامل از آدرسها را به صورت ایستا روی شبکه دیگری از آدرسها نگاشت کنید. این هدف فقط در قواعد موجود در جدول nat قابل استفاده است.
- --to address[/mask]
- آدرس شبکهای که نگاشت به آن انجام میشود. آدرس نهایی به این شیوه ساخته خواهد شد: تمام بیتهای «یک» در ماسک از `address` جدید پر میشوند. تمام بیتهایی که در ماسک صفر هستند از آدرس اصلی پر میشوند.
- پشتیبانی از IPv6 از هستههای ۳.۷ لینوکس به بعد در دسترس است.
NFLOG
این هدف قابلیت ثبت وقایع (لاگ) بستههای منطبق را فراهم میکند. هنگامی که این هدف برای یک قاعده تنظیم شود، هسته لینوکس بسته را به بکاند لاگین بارگذاریشده ارسال میکند تا بسته را لاگ کند. این معمولاً در ترکیب با nfnetlink_log به عنوان بکاند لاگین استفاده میشود، که بسته را از طریق یک سوکت netlink به گروه چندپخشی (multicast group) مشخصشده مالتیکست میکند. یک یا چند پردازش در فضای کاربری میتوانند در این گروه عضو شوند تا بستهها را دریافت نمایند. همانند LOG، این یک هدف غیرپایاندهنده است، یعنی پیمایش قواعد در قاعده بعدی ادامه مییابد.
- --nflog-group nlgroup
- گروه netlink (از 0–2^16-1) که بستهها به آن ارسال میشوند (تنها برای nfnetlink_log کاربرد دارد). مقدار پیشفرض 0 است.
- --nflog-prefix prefix
- یک رشته پیشوند برای درج در پیام لاگ، با طول حداکثر تا ۶۴ کاراکتر، که برای تفکیک پیامها در گزارشها مفید است.
- --nflog-range size
- این گزینه هرگز کار نکرده است، به جای آن از --nflog-size استفاده کنید.
- --nflog-size size
- تعداد بایتهایی که باید در فضای کاربری کپی شوند (تنها برای nfnetlink_log کاربرد دارد). نمونههای nfnetlink_log ممکن است محدوده خاص خود را تعیین کنند؛ این گزینه آن را نادیده گرفته و بازنویسی میکند.
- --nflog-threshold size
- تعداد بستههایی که پیش از ارسال به فضای کاربری باید درون هسته صفبندی شوند (تنها برای nfnetlink_log کاربرد دارد). مقادیر بالاتر باعث کاهش سربار به ازای هر بسته میشوند، اما تاخیر تا رسیدن بستهها به فضای کاربری را افزایش میدهند. مقدار پیشفرض 1 است.
NFQUEUE
این هدف بسته را با استفاده از گرداننده nfnetlink_queue به فضای کاربری منتقل میکند. بسته در صفی قرار میگیرد که با شماره صف ۱۶ بیتی آن مشخص شده است. فضای کاربری میتواند در صورت تمایل بسته را بازبینی و اصلاح کند. سپس فضای کاربری باید بسته را حذف کند یا آن را دوباره به درون هسته تزریق نماید. لطفاً برای اطلاعات بیشتر به libnetfilter_queue مراجعه فرمایید. nfnetlink_queue در لینوکس 2.6.14 اضافه شد. گزینه queue-balance در لینوکس 2.6.31 و گزینه queue-bypass در 2.6.39 اضافه شدند.
- --queue-num value
- شماره صف (QUEUE) مورد استفاده را تعیین میکند. شمارههای صف معتبر بین 0 تا 65535 هستند. مقدار پیشفرض 0 است.
- --queue-balance value:value
- محدودهای از صفها را برای استفاده مشخص میکند. سپس بستهها بین صفهای مشخصشده متعادل میشوند. این قابلیت برای سیستمهای چندهستهای بسیار کاربردی است: چندین نمونه از برنامه فضای کاربری را روی صفهای x، x+1، .. x+n اجرا کرده و از "--queue-balance x:x+n" استفاده کنید. بستههای متعلق به یک اتصال یکسان در همان nfqueue قرار داده میشوند. به دلیل جزئیات پیادهسازی، مقدار کران پایین 0 مقدار کران بالا را به 65534 محدود میکند، به این معنی که حداکثر میتوان بار را بین 65535 صف توزیع و متعادل کرد.
- --queue-bypass
- بهطور پیشفرض، اگر هیچ برنامه فضای کاربری روی یک NFQUEUE گوش به زنگ نباشد، تمام بستههایی که باید در صف قرار گیرند حذف (drop) میشوند. هنگامی که از این گزینه استفاده شود، قاعده NFQUEUE به جای آن مانند ACCEPT رفتار میکند و بسته به جدول بعدی منتقل خواهد شد.
- --queue-cpu-fanout
- از هسته ۳.۱۰ لینوکس به بعد در دسترس است. هنگامی که همراه با --queue-balance استفاده شود، از شناسه پردازنده (CPU ID) به عنوان شاخصی برای نگاشت بستهها به صفها استفاده میکند. ایده این است که اگر به ازای هر پردازنده یک صف وجود داشته باشد، میتوان کارایی را بهبود بخشید. این ویژگی نیازمند مشخص شدن --queue-balance است.
NOTRACK
این افزونه ردیابی اتصالات را برای تمام بستههای منطبق با این قاعده غیرفعال میکند. این دستور با -j CT --notrack معادل است. همانند CT، از NOTRACK فقط میتوان در جدول raw استفاده کرد.
RATEEST
هدف RATEEST آمارها را جمعآوری کرده، محاسبات برآورد نرخ را انجام میدهد و نتایج را برای ارزیابیهای بعدی با استفاده از تطابق rateest ذخیره مینماید.
- --rateest-name name
- بستههای منطبق را درون استخری که با name مشخص شده است میشمارد؛ این نام به طور دلخواه و آزادانه قابل انتخاب است.
- --rateest-interval amount{s|ms|us}
- بازه زمانی اندازهگیری نرخ، بر حسب ثانیه، میلیثانیه یا میکروثانیه.
- --rateest-ewmalog value
- ثابت زمانی میانگینگیری اندازهگیری نرخ.
REDIRECT
این هدف فقط در جدول nat و در زنجیرههای PREROUTING و OUTPUT و زنجیرههای تعریفشده توسط کاربر که تنها از این زنجیرهها فراخوانی میشوند معتبر است. این هدف با تغییر IP مقصد به آدرس اصلی رابط ورودی، بسته را به خود ماشین هدایت میکند (بستههای تولیدشده به صورت محلی به آدرس localhost نگاشت میشوند، 127.0.0.1 برای IPv4 و ::1 برای IPv6، و بستههایی که به رابطهای فاقد آدرس IP پیکربندیشده وارد میشوند، دور انداخته میشوند).
- --to-ports port[-port]
- پورت مقصد یا محدودهای از پورتها را برای استفاده مشخص میکند: بدون این گزینه، پورت مقصد هرگز تغییر داده نمیشود. این گزینه فقط در صورتی معتبر است که قاعده همچنین یکی از پروتکلهای زیر را مشخص کرده باشد: tcp، udp، dccp یا sctp. برای یک تکپورت، میتوان از نام سرویس فهرستشده در /etc/services استفاده نمود.
- --random
- نگاشت پورت مبدا را تصادفیسازی میکند (هستههای ۲.۶.۲۲ به بعد).
- پشتیبانی از IPv6 از هستههای ۳.۷ لینوکس به بعد در دسترس است.
REJECT (IPv6-specific)
برای ارسال یک بسته خطا در پاسخ به بسته منطبق استفاده میشود: در غیر این صورت معادل DROP است، بنابراین یک هدف (TARGET) پایاندهنده بوده و به پیمایش قواعد پایان میدهد. این هدف فقط در زنجیرههای INPUT، FORWARD و OUTPUT و همچنین زنجیرههای تعریفشده توسط کاربر که فقط از این زنجیرهها فراخوانی میشوند معتبر است. گزینه زیر ماهیت بسته خطای بازگرداندهشده را کنترل میکند:
- --reject-with type
- نوع مشخصشده میتواند یکی از موارد زیر باشد: icmp6-no-route، no-route، icmp6-adm-prohibited، adm-prohibited، icmp6-addr-unreachable، addr-unreach، یا icmp6-port-unreachable، که پیام خطای ICMPv6 مناسب را برمیگردانند (icmp6-port-unreachable مقدار پیشفرض است). در نهایت، گزینه tcp-reset میتواند در قواعدی استفاده شود که فقط با پروتکل TCP مطابقت دارند: این امر باعث ارسال یک بسته TCP RST به مبدا میشود. این گزینه عمدتاً برای مسدود کردن کاوشهای ident (پورت 113/tcp) که مکرراً هنگام ارسال ایمیل به میزبانهای معیوب ایمیل رخ میدهد (که در غیر این صورت ایمیل شما را نمیپذیرند) مفید است. tcp-reset تنها با هستههای نسخه ۲.۶.۱۴ یا جدیدتر قابل استفاده است.
هشدار: نباید بدون تفکیک هدف REJECT را برای بستههایی که وضعیت اتصال آنها به عنوان INVALID طبقهبندی شده است به کار ببرید؛ در عوض، فقط باید آنها را DROP کنید.
میزبان مبدایی را در نظر بگیرید که بسته P را ارسال میکند، به طوری که P در طول مسیر خود آنقدر دچار تاخیر میشود که میزبان مبدا ارسال مجددی به نام P_2 انجام میدهد، و P_2 با موفقیت به مقصد میرسد و وضعیت اتصال را به صورت عادی پیش میبرد. قابل تصور است که بسته دیررسیده P فاقد هرگونه ورودی در ردیابی اتصال در نظر گرفته شود. در نتیجه، تولید پاسخ reject برای بستهای که در این دسته قرار گرفته، اتصال سالم را قطع خواهد کرد.
بنابراین، به جای:
-A INPUT ... -j REJECT
حتماً استفاده از این دستور را در نظر داشته باشید:
-A INPUT ... -m conntrack --ctstate INVALID -j DROP
-A INPUT ... -j REJECT
REJECT (IPv4-specific)
برای ارسال یک بسته خطا در پاسخ به بسته منطبق استفاده میشود: در غیر این صورت معادل DROP است، بنابراین یک هدف (TARGET) پایاندهنده بوده و به پیمایش قواعد پایان میدهد. این هدف فقط در زنجیرههای INPUT، FORWARD و OUTPUT و همچنین زنجیرههای تعریفشده توسط کاربر که فقط از این زنجیرهها فراخوانی میشوند معتبر است. گزینه زیر ماهیت بسته خطای بازگرداندهشده را کنترل میکند:
- --reject-with type
- نوع مشخصشده میتواند یکی از موارد زیر باشد: icmp-net-unreachable، icmp-host-unreachable، icmp-port-unreachable، icmp-proto-unreachable، icmp-net-prohibited، icmp-host-prohibited، یا icmp-admin-prohibited (*)، که پیام خطای ICMP مناسب را برمیگردانند (icmp-port-unreachable مقدار پیشفرض است). گزینه tcp-reset میتواند در قواعدی استفاده شود که فقط با پروتکل TCP مطابقت دارند: این امر باعث ارسال یک بسته TCP RST به مبدا میشود. این گزینه عمدتاً برای مسدود کردن کاوشهای ident (پورت 113/tcp) که مکرراً هنگام ارسال ایمیل به میزبانهای معیوب ایمیل رخ میدهد (که در غیر این صورت ایمیل شما را نمیپذیرند) مفید است.
- (*) استفاده از icmp-admin-prohibited در هستههایی که از آن پشتیبانی نمیکنند، منجر به DROP معمولی به جای REJECT خواهد شد.
هشدار: نباید بدون تفکیک هدف REJECT را برای بستههایی که وضعیت اتصال آنها به عنوان INVALID طبقهبندی شده است به کار ببرید؛ در عوض، فقط باید آنها را DROP کنید.
میزبان مبدایی را در نظر بگیرید که بسته P را ارسال میکند، به طوری که P در طول مسیر خود آنقدر دچار تاخیر میشود که میزبان مبدا ارسال مجددی به نام P_2 انجام میدهد، و P_2 با موفقیت به مقصد میرسد و وضعیت اتصال را به صورت عادی پیش میبرد. قابل تصور است که بسته دیررسیده P فاقد هرگونه ورودی در ردیابی اتصال در نظر گرفته شود. در نتیجه، تولید پاسخ reject برای بستهای که در این دسته قرار گرفته، اتصال سالم را قطع خواهد کرد.
بنابراین، به جای:
-A INPUT ... -j REJECT
حتماً استفاده از این دستور را در نظر داشته باشید:
-A INPUT ... -m conntrack --ctstate INVALID -j DROP
-A INPUT ... -j REJECT
SECMARK
این هدف برای تنظیم مقدار نشان امنیتی (security mark) مرتبط با بسته جهت استفاده در زیرسیستمهای امنیتی مانند SELinux به کار میرود. این هدف در جدول security معتبر است (برای سازگاری رو به عقب با هستههای قدیمیتر، در جدول mangle نیز معتبر است). فیلد نشان ۳۲ بیتی است.
SET
این ماژول مدخلها را به مجموعههای آیپی (IP sets) که توسط ipset(8) تعریف میشوند اضافه و/یا از آنها حذف میکند.
- --add-set setname flag[,flag...]
- نشانی(ها)/پورت(های) بسته را به مجموعه اضافه میکند.
- --del-set setname flag[,flag...]
- نشانی(ها)/پورت(های) بسته را از مجموعه حذف میکند.
- --map-set setname flag[,flag...]
- [--map-mark] [--map-prio] [--map-queue] ویژگیهای بسته (نشان فایروال، اولویت tc، صف سختافزاری) را نگاشت میکند.
- که در آن flag(ها) مشخصکنندههای src و/یا dst هستند و نمیتوانند بیش از شش مورد باشند.
- --timeout value
- هنگام افزودن یک مدخل، مقدار انقضای زمانی (timeout) را بهجای مقدار پیشفرض تعریف مجموعه تعیین میکند.
- --exist
- هنگام افزودن یک مدخل، اگر از قبل وجود داشته باشد، مقدار انقضای زمانی را به مقدار مشخصشده یا مقدار پیشفرض تعریف مجموعه بازنشانی میکند.
- --map-set set-name
- مجموعه set-name
باید با
گزینه --skbinfo
ایجاد شده
باشد
--map-mark نگاشت نشان فایروال به بسته بر اساس جستجوی مقدار در مجموعه
--map-prio نگاشت اولویت کنترل ترافیک به بسته بر اساس جستجوی مقدار در مجموعه
--map-queue نگاشت صف سختافزاری کارت شبکه (NIC) به بسته بر اساس جستجوی مقدار در مجموعه
- گزینه --map-set تنها در جدول mangle قابل استفاده است. گزینههای --map-prio و --map-queue میتوانند در زنجیرههای OUTPUT، FORWARD و POSTROUTING استفاده شوند.
استفاده از -j SET نیازمند پشتیبانی هسته از ipset است که در هستههای استاندارد از نسخه 2.6.39 لینوکس به بعد وجود دارد.
SNAT
این هدف تنها در جدول nat و در زنجیرههای POSTROUTING و INPUT و نیز زنجیرههای تعریفشده توسط کاربر که صرفاً از این زنجیرهها فراخوانی میشوند، معتبر است. این هدف مشخص میکند که نشانی مبدا بسته باید تغییر کند (و تمام بستههای بعدی این اتصال نیز دستکاری خواهند شد)، و بررسی سایر قوانین باید متوقف شود. این هدف گزینههای زیر را میپذیرد:
- --to-source [ipaddr[-ipaddr]][:port[-port]]
- که میتواند یک نشانی آیپی مبدا جدید یا یک بازه شامل نشانیهای آیپی را مشخص کند. همچنین در صورتی که قانون یکی از پروتکلهای tcp، udp، dccp یا sctp را مشخص کرده باشد، میتواند یک بازه پورت را نیز به طور اختیاری تعیین کند. اگر هیچ بازه پورتی مشخص نشود، پورتهای مبدا زیر ۵۱۲ به پورتهای دیگر زیر ۵۱۲ نگاشت میشوند؛ پورتهای بین ۵۱۲ تا ۱۰۲۳ (شامل خودشان) به پورتهای زیر ۱۰۲۴ نگاشت شده و سایر پورتها به پورتهای ۱۰۲۴ یا بالاتر نگاشت خواهند شد. تا جای ممکن، هیچ تغییری در پورتها رخ نخواهد داد.
- --random
- نگاشت پورت مبدا را از طریق الگوریتمی مبتنی بر درهمسازی (هش) تصادفی میکند (هسته >= 2.6.21).
- --random-fully
- نگاشت پورت مبدا را کاملاً از طریق یک تولیدکننده اعداد شبهتصادفی (PRNG) تصادفی میکند (هسته >= 3.14).
- --persistent
- برای هر اتصال، همان نشانی مبدا/مقصد پیشین را به کلاینت اختصاص میدهد. این گزینه جایگزین هدف SAME شده است. پشتیبانی از نگاشتهای پایدار (persistent) از نسخه 2.6.29-rc2 در دسترس است.
هستههای قبل از 2.6.36-rc1 قابلیت استفاده از SNAT در زنجیره INPUT را ندارند.
- پشتیبانی از IPv6 از نسخههای هسته لینوکس >= 3.7 موجود است.
SNPT (IPv6-specific)
ترجمه پیشوند شبکه بدون حالت (stateless) مبدا را از IPv6 به IPv6 (طبق توضیحات RFC 6296) فراهم میکند.
شما باید از این هدف در جدول mangle استفاده کنید، نه در جدول nat. این هدف گزینههای زیر را میپذیرد:
- --src-pfx [prefix/length]
- پیشوند مبدا و طولی که میخواهید ترجمه شود را تعیین میکند.
- --dst-pfx [prefix/length]
- پیشوند مقصد و طولی که میخواهید در ترجمه استفاده شود را تعیین میکند.
برای معکوس کردن ترجمه باید از هدف DNPT استفاده کنید. مثال:
- ip6tables -t mangle -I POSTROUTING -s fd00::/64 ! -o vboxnet0 -j SNPT --src-pfx fd00::/64 --dst-pfx 2001:e20:2000:40f::/64
- ip6tables -t mangle -I PREROUTING -i wlan0 -d 2001:e20:2000:40f::/64 -j DNPT --src-pfx 2001:e20:2000:40f::/64 --dst-pfx fd00::/64
ممکن است نیاز به فعالسازی پراکسی همسایه در IPv6 (Neighbor Proxy) داشته باشید:
- sysctl -w net.ipv6.conf.all.proxy_ndp=1
همچنین باید از هدف NOTRACK برای غیرفعال کردن رهگیری اتصال (connection tracking) برای جریانهای ترجمهشده استفاده کنید.
SYNPROXY
این هدف دستتکانی سهمرحلهای (three-way handshake) پروتکل TCP را به صورت موازی در بافت netfilter پردازش میکند تا از سیستم محلی یا سامانه پشتیبان (backend) محافظت نماید. این هدف به رهگیری اتصال (connection tracking) نیاز دارد زیرا شمارههای ترتیب (sequence numbers) باید ترجمه شوند. توانایی هسته در مهار حملات سیلآسای سین (SYNFLOOD) از لینوکس 4.4 به بعد به طور چشمگیری بهبود یافته است، بنابراین برای محافظت از سرورهای لینوکس احتمالاً دیگر نیازی به این هدف نخواهد بود.
- --mss maximum segment size
- حداکثر اندازه قطعه (MSS) که به کلاینتها اعلان میشود. این مقدار باید با سامانه پشتیبان (backend) مطابقت داشته باشد.
- --wscale window scale
- مقیاس پنجره (window scale) که به کلاینتها اعلان میشود. این مقدار باید با سامانه پشتیبان مطابقت داشته باشد.
- --sack-perm
- انتقال گزینه تایید انتخابی (selective acknowledgement یا SACK) کلاینت به سامانه پشتیبان (در صورت عدم وجود، غیرفعال خواهد شد).
- --timestamps
- انتقال گزینه برچسب زمانی (timestamp) کلاینت به سامانه پشتیبان (در صورت عدم وجود غیرفعال خواهد شد؛ همچنین برای تایید انتخابی و مقیاس پنجره نیز مورد نیاز است).
مثال:
تشخیص گزینههای tcp استفادهشده توسط سامانه پشتیبان از یک سیستم خارجی:
- tcpdump -pni eth0 -c 1 'tcp[tcpflags] == (tcp-syn|tcp-ack)'
port 80 &
telnet 192.0.2.42 80
18:57:24.693307 IP 192.0.2.42.80 > 192.0.2.43.48757:
Flags [S.], seq 360414582, ack 788841994, win 14480,
options [mss 1460,sackOK,
TS val 1409056151 ecr 9690221,
nop,wscale 9],
length 0
غیرفعال کردن حالت tcp_loose، تا conntrack بستههای خارج از جریان را با وضعیت INVALID نشانهگذاری کند:
- echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose
قرار دادن بستههای SYN در وضعیت ردیابینشده (untracked):
- iptables -t raw -A PREROUTING -i eth0 -p tcp --dport 80
--syn -j CT --notrack
گرفتن وضعیتهای UNTRACKED (بستههای SYN) و INVALID (بستههای ACK در دستتکانی سهمرحلهای) و ارسال آنها به SYNPROXY. این قانون به بستههای SYN با کوکیهای سین (syncookies) از نوع SYN+ACK پاسخ میدهد، وضعیت ESTABLISHED را برای پاسخ معتبر کلاینت (بستههای 3WHS ACK) ایجاد میکند و کوکیهای نامعتبر را دور میریزد (drop). ترکیبهای غیرمنتظره از فلگها در طول 3WHS تطبیق داده نشده و به مسیر خود ادامه میدهند (مانند SYN+FIN یا SYN+ACK):
- iptables -A INPUT -i eth0 -p tcp --dport 80
-m state --state UNTRACKED,INVALID -j SYNPROXY
--sack-perm --timestamp --mss 1460 --wscale 9
دور انداختن بستههای نامعتبر؛ این بستهها همان بستههای خارج از جریانی هستند که توسط SYNPROXY مطابقت داده نشدهاند:
- iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state INVALID -j DROP
TCPMSS
این هدف مقدار MSS بستههای TCP SYN را تغییر میدهد تا بیشینه اندازه قطعه را برای آن اتصال کنترل کند (معمولاً آن را به MTU رابط خروجی منهای ۴۰ برای IPv4 یا منهای ۶۰ برای IPv6 محدود میسازد). البته، این گزینه تنها در ترکیب با -p tcp قابل استفاده است.
این هدف برای غلبه بر ارائهدهندگان اینترنت (ISP) یا سرورهای احمقانهای استفاده میشود که بستههای «ICMP Fragmentation Needed» یا «ICMPv6 Packet Too Big» را مسدود میکنند. نشانههای این مشکل این است که همهچیز از روی فایروال/مسیریاب لینوکس شما به خوبی کار میکند، اما ماشینهای پشت آن هرگز نمیتوانند بستههای بزرگ را تبادل کنند:
- 1.
- مرورگرهای وب متصل میشوند، اما بدون دریافت هیچ دادهای معلق (hang) میمانند.
- 2.
- ایمیلهای کمحجم به درستی ارسال و دریافت میشوند، اما ایمیلهای حجیم معلق میمانند.
- 3.
- ابزار ssh به خوبی کار میکند، اما scp پس از دستتکانی اولیه معلق میماند.
راهکار موقت: فعالسازی این گزینه و افزودن قانونی به پیکربندی فایروال به صورت زیر:
-
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN
-j TCPMSS --clamp-mss-to-pmtu
- --set-mss value
- گزینه MSS را صراحتاً روی مقدار مشخصشده تنظیم میکند. اگر MSS بسته در حال حاضر کمتر از value باشد، مقدار آن افزایش داده نخواهد شد (از لینوکس 2.6.25 به بعد) تا از بروز مشکلات بیشتر با میزبانهایی که به MSS مناسب متکی هستند جلوگیری شود.
- --clamp-mss-to-pmtu
- مقدار MSS را به طور خودکار به (path_MTU - 40 برای IPv4؛ - 60 برای IPv6) مقید میکند. در جاهایی که مسیرهای نامتقارن با path MTU متفاوت وجود دارند، ممکن است این ویژگی طبق انتظار عمل نکند — هسته از مقدار path MTU استفاده میکند که برای ارسال بستهها از خودش به نشانیهای آیپی مبدا و مقصد استفاده میکرد. پیش از لینوکس 2.6.25، در این گزینه تنها path MTU مربوط به نشانی آیپی مقصد در نظر گرفته میشد؛ هستههای بعدی path MTU به نشانی آیپی مبدا را نیز در نظر میگیرند.
این گزینهها مانعةالجمع (متقابلاً ناسازگار) هستند.
TCPOPTSTRIP
این هدف گزینههای TCP را از بسته TCP حذف (strip) میکند. (در واقع آنها را با دستورات بیاثر NO-OP جایگزین میکند.) به همین دلیل، باید پارامترهای -p tcp را به دستور بیفزایید.
- --strip-options option[,option...]
- گزینه(های) مشخصشده را حذف میکند. گزینهها ممکن است با شماره گزینه TCP یا نام نمادین تعیین شوند. فهرست گزینههای شناختهشده را میتوان با فراخوانی iptables به همراه -j TCPOPTSTRIP -h به دست آورد.
TEE
هدف TEE یک نسخه رونوشت (clone) از بسته تهیه کرده و این رونوشت را به ماشین دیگری در بخش شبکه محلی (local network segment) هدایت میکند. به بیان دیگر، گام بعدی (nexthop) باید همان ماشین هدف باشد، یا در صورت تمایل باید نکسهاب را برای بازهدایت بیشتر آن پیکربندی کنید.
- --gateway ipaddr
- بسته شبیهسازیشده را به میزبان قابل دسترس در نشانی آیپی مشخصشده میفرستد. استفاده از 0.0.0.0 (برای بستههای IPv4) یا :: (برای IPv6) نامعتبر است.
برای بازهدایت تمام ترافیک ورودی روی eth0 به یک ماشین لاگبرداری در لایه شبکه:
-t mangle -A PREROUTING -i eth0 -j TEE --gateway 2001:db8::1
TOS
این ماژول فیلد نوع سرویس (Type of Service یا TOS) را در سرایند IPv4 (شامل بیتهای "precedence") یا فیلد اولویت (Priority) را در سرایند IPv6 تنظیم میکند. توجه داشته باشید که TOS از همان بیتهای مشترک با DSCP و ECN استفاده میکند. هدف TOS تنها در جدول mangle معتبر است.
- --set-tos value[/mask]
- بیتهای مشخصشده توسط mask را صفر میکند (نکته زیر را ببینید) و مقدار value را با فیلد TOS/Priority با عملگر XOR ترکیب مینماید. اگر mask ذکر نشود، مقدار 0xFF فرض میشود.
- --set-tos symbol
- هنگام استفاده از هدف TOS برای IPv4 میتوانید یک نام نمادین را مشخص کنید. این کار به معنای ماسک 0xFF است (نکته زیر را ببینید). فهرست نامهای TOS شناختهشده را میتوان با فراخوانی iptables با -j TOS -h به دست آورد.
یادافزاهای (mnemonics) زیر در دسترس هستند:
- --and-tos bits
- عملگر AND دودویی مقدار TOS با bits. (کوتاهنوشتی برای --set-tos 0/invbits که در آن invbits نقیض دودویی (NOT) bits است. نکته زیر را ببینید.)
- --or-tos bits
- عملگر OR دودویی مقدار TOS با bits. (کوتاهنوشتی برای --set-tos bits/bits. نکته زیر را ببینید.)
- --xor-tos bits
- عملگر XOR دودویی مقدار TOS با bits. (کوتاهنوشتی برای --set-tos bits/0. نکته زیر را ببینید.)
نکته: در هستههای لینوکس تا و شامل 2.6.38، به استثنای نسخههای پشتیبانی طولانیمدت (longterm) شامل 2.6.32 (>=.42)، 2.6.33 (>=.15)، و 2.6.35 (>=.14)، یک باگ وجود دارد که در آن دستکاری TOS در IPv6 مطابق با مستندات عمل نکرده و با نسخه IPv4 تفاوت دارد. ماسک TOS بیتهایی را نشان میدهد که فرد میخواهد صفر شوند، بنابراین پیش از اعمال روی فیلد اصلی TOS باید معکوس (وارونه) شود. با این حال، هستههای فوقالذکر از این وارونهسازی صرفنظر میکنند که موجب اختلال در عملکرد --set-tos و میانبرهای آن میشود.
TPROXY
این هدف تنها در جدول mangle، در زنجیره PREROUTING و زنجیرههای تعریفشده توسط کاربر که صرفاً از این زنجیره فراخوانی میشوند معتبر است. این هدف بسته را بدون هیچگونه تغییری در سرایند بسته به یک سوکت محلی بازهدایت میکند. همچنین میتواند مقدار نشان (mark) را تغییر دهد که سپس میتواند در قوانین پیشرفته مسیریابی استفاده شود. این هدف سه گزینه میپذیرد:
- --on-port port
- یک پورت مقصد را برای استفاده مشخص میکند. این یک گزینه الزامی است و مقدار 0 به این معنی است که پورت مقصد جدید همان پورت اصلی است. این گزینه تنها زمانی معتبر است که قانون -p tcp یا -p udp را نیز تعیین کرده باشد.
- --on-ip address
- یک نشانی مقصد را برای استفاده مشخص میکند. به طور پیشفرض، نشانی برابر با نشانی آیپی رابط ورودی است. این گزینه تنها در صورتی معتبر است که قانون -p tcp یا -p udp را نیز تعیین کرده باشد.
- --tproxy-mark value[/mask]
- بستهها را با مقدار/ماسک مشخصشده نشانهگذاری میکند. مقدار fwmark تعیینشده در اینجا میتواند توسط مسیریابی پیشرفته استفاده شود. (برای عملکرد صحیح پراکسی شفاف الزامی است: در غیر این صورت این بستهها فوروارد خواهند شد که احتمالاً مطلوب شما نیست.)
TRACE
این هدف بستهها را نشانهگذاری میکند تا هسته هر قانونی را که با عبور بستهها از میان جدولها، زنجیرهها و قوانین با آنها مطابقت دارد ثبت کند (لاگ بیندازد). این هدف تنها در جدول raw قابل استفاده است.
در iptables-legacy، برای قابل مشاهده بودن این گزارشها باید یک بستر لاگبرداری مانند ip(6)t_LOG یا nfnetlink_log بارگذاری شده باشد. بستهها با پیشوند متنی زیر ثبت میشوند: "TRACE: tablename:chainname:type:rulenum " که در آن type میتواند "rule" برای قوانین معمولی، "return" برای قانون ضمنی در انتهای زنجیره تعریفشده توسط کاربر، و "policy" برای خطمشی زنجیرههای توکار باشد.
در iptables-nft، این هدف به عبارت meta nftrace در nftables ترجمه میشود. از این رو، هسته رویدادهای ردیابی (trace events) را از طریق netlink به فضای کاربری میفرستد، جایی که میتوان آنها را با استفاده از دستور xtables-monitor --trace مشاهده کرد. برای جزئیات بیشتر، به xtables-monitor(8) مراجعه کنید.
TTL (IPv4-specific)
این هدف برای تغییر فیلد سرایند TTL در IPv4 استفاده میشود. فیلد TTL مشخص میکند که یک بسته پیش از پایان یافتن طول عمرش (time to live) حداکثر میتواند از چند گام یا جهش (مسیریاب) عبور کند.
تنظیم یا افزایش فیلد TTL میتواند بهطور بالقوه بسیار خطرناک باشد، بنابراین باید به هر قیمتی از آن اجتناب شود. این هدف تنها در جدول mangle معتبر است.
هرگز این مقدار را روی بستههایی که از شبکه محلی شما خارج میشوند تنظیم یا افزایش ندهید!
- --ttl-set value
- مقدار TTL را روی «value» تنظیم میکند.
- --ttl-dec value
- مقدار TTL را به تعداد «value» کاهش میدهد.
- --ttl-inc value
- مقدار TTL را به تعداد «value» افزایش میدهد.
ULOG (IPv4-specific)
این هدف نسخه منسوخشده و فقط مخصوص IPv4 سلف هدف NFLOG است. این ابزار امکان لاگبرداری از بستههای منطبق را در فضای کاربری (userspace) فراهم میکند. هنگامی که این هدف برای یک قانون تنظیم میشود، هسته لینوکس این بسته را از طریق یک سوکت netlink به صورت چندپخشی (multicast) ارسال میکند. سپس یک یا چند پردازه در فضای کاربری میتوانند در گروههای چندپخشی گوناگون مشترک شده و بستهها را دریافت نمایند. مانند LOG، این یک «هدف غیرپایانبخش» (non-terminating target) است، یعنی بررسی قوانین با قانون بعدی ادامه مییابد.
- --ulog-nlgroup nlgroup
- گروه netlink (بین ۱–۳۲) را که بسته به آن فرستاده میشود مشخص میکند. مقدار پیشفرض ۱ است.
- --ulog-prefix prefix
- پیامهای لاگ را با پیشوند مشخصشده آغاز میکند؛ حداکثر ۳۲ نویسه طول دارد و برای تفکیک پیامها در گزارشها کاربرد دارد.
- --ulog-cprange size
- تعداد بایتهایی که باید در فضای کاربری کپی شوند. مقدار 0 همیشه تمام بسته را صرفنظر از اندازهاش کپی میکند. پیشفرض 0 است.
- --ulog-qthreshold size
- تعداد
بستههایی
که باید
درون هسته
صفبندی
شوند. تنظیم
این مقدار
به عنوان
مثال روی 10،
ده بسته را
در هسته
جمعآوری
کرده و
آنها را به
عنوان یک
پیام
چندبخشی netlink
به فضای
کاربری
منتقل
میکند.
مقدار
پیشفرض ۱
است (برای
سازگاری با
گذشته).
| iptables 1.8.11 |