.TH IPTABLES-EXTENSIONS 8 "" "iptables 1.8.11" "iptables 1.8.11" .SH "نام (NAME)" iptables-extensions \- فهرست افزونههای تطبیق و هدف در iptables .SH "خلاصه دستور (SYNOPSIS)" \fBip6tables\fP [\fB\-m\fP \fIname\fP [\fImodule-options\fP...]] [\fB\-j\fP \fItarget-name\fP [\fItarget-options\fP...] .PP \fBiptables\fP [\fB\-m\fP \fIname\fP [\fImodule-options\fP...]] [\fB\-j\fP \fItarget-name\fP [\fItarget-options\fP...] .SH "افزونههای تطبیق (MATCH EXTENSIONS)" دستور iptables می‌تواند با استفاده از گزینه‌های .B \-m یا .B \-\-match به همراه نام ماژول تطبیق، از ماژول‌های توسعه‌یافته تطبیق بسته استفاده کند؛ پس از این گزینه‌ها، بسته به ماژول مشخص‌شده، گزینه‌های خط فرمان اضافی گوناگونی در دسترس قرار می‌گیرند. شما می‌توانید چندین ماژول تطبیق توسعه‌یافته را در یک خط مشخص کنید، و می‌توانید از گزینه‌های .B \-h یا .B \-\-help پس از مشخص شدن ماژول برای دریافت راهنمای اختصاصی آن ماژول استفاده کنید. ماژول‌های تطبیق توسعه‌یافته به همان ترتیبی که در قاعده مشخص شده‌اند ارزیابی می‌شوند. .PP اگر گزینه .B \-p یا .B \-\-protocol مشخص شده باشد و تنها در صورتی که با یک گزینه ناشناخته مواجه شود، iptables تلاش می‌کند یک ماژول تطبیق هم‌نام با پروتکل را بارگذاری کند تا آن گزینه در دسترس قرار گیرد. .\" @MATCH@ .SS addrtype این ماژول بسته‌ها را بر اساس .B نوع آدرس آن‌ها تطبیق می‌دهد. انواع آدرس در پشته شبکه هسته به کار می‌روند و آدرس‌ها را به گروه‌های گوناگونی دسته‌بندی می‌کنند. تعریف دقیق هر گروه به پروتکل لایه ۳ خاص بستگی دارد. .PP انواع آدرس‌های زیر ممکن هستند: .TP .BI "UNSPEC" یک آدرس نامشخص (مانند 0.0.0.0) .TP .BI "UNICAST" یک آدرس تک‌پخشی (unicast) .TP .BI "LOCAL" یک آدرس محلی (local) .TP .BI "BROADCAST" یک آدرس همگانی (broadcast) .TP .BI "ANYCAST" یک بسته هرپخشی (anycast) .TP .BI "MULTICAST" یک آدرس چندپخشی (multicast) .TP .BI "BLACKHOLE" یک آدرس سیاهچاله (blackhole) .TP .BI "UNREACHABLE" یک آدرس غیرقابل دسترس (unreachable) .TP .BI "PROHIBIT" یک آدرس ممنوع‌شده (prohibited) .TP .BI "THROW" FIXME .TP .BI "NAT" FIXME .TP .BI "XRESOLVE" .TP [\fB!\fP] \fB\-\-src\-type\fP \fItype\fP در صورتی که آدرس مبدأ از نوع مشخص‌شده باشد تطبیق می‌یابد .TP [\fB!\fP] \fB\-\-dst\-type\fP \fItype\fP در صورتی که آدرس مقصد از نوع مشخص‌شده باشد تطبیق می‌یابد .TP .BI "\-\-limit\-iface\-in" بررسی نوع آدرس را می‌توان به رابطی که بسته از آن وارد می‌شود محدود کرد. این گزینه تنها در زنجیره‌های .BR PREROUTING ، .B INPUT و .B FORWARD معتبر است. این گزینه را نمی‌توان همراه با گزینه .B \-\-limit\-iface\-out مشخص کرد. .TP \fB\-\-limit\-iface\-out\fP بررسی نوع آدرس را می‌توان به رابطی که بسته از آن خارج می‌شود محدود کرد. این گزینه تنها در زنجیره‌های .BR POSTROUTING ، .B OUTPUT و .B FORWARD معتبر است. این گزینه را نمی‌توان همراه با گزینه .B \-\-limit\-iface\-in مشخص کرد. .SS ah (IPv6-specific) این ماژول پارامترهای سرآیند احراز هویت (Authentication header) بسته‌های IPsec را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-ahspi\fP \fIspi\fP[\fB:\fP\fIspi\fP] شناسه SPI را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-ahlen\fP \fIlength\fP طول کل این سرآیند بر حسب بایت (اکتت). .TP \fB\-\-ahres\fP در صورتی که فیلد رزروشده با صفر پر شده باشد تطبیق می‌یابد. .SS ah (IPv4-specific) این ماژول شناسه‌های SPI در سرآیند احراز هویت (Authentication header) بسته‌های IPsec را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-ahspi\fP \fIspi\fP[\fB:\fP\fIspi\fP] .SS bpf تطبیق با استفاده از فیلتر سوکت لینوکس (Linux Socket Filter). این ماژول انتظار یک مسیر به شیء eBPF یا یک برنامه cBPF در قالب دهدهی (دسیمال) را دارد. .TP \fB\-\-object\-pinned\fP \fIpath\fP ارسال مسیر یک شیء پین‌شده eBPF. .PP برنامه‌ها، برنامه‌های eBPF را با فراخوانی سیستمی bpf() و دستور BPF_PROG_LOAD در هسته بارگذاری می‌کنند و می‌توانند آن‌ها را با BPF_OBJ_PIN در یک سیستم‌فایل مجازی پین کنند. برای استفاده از یک شیء پین‌شده در iptables، سیستم‌فایل bpf را با دستور زیر سوار (mount) کنید: .IP mount \-t bpf bpf ${BPF_MOUNT} .PP سپس فیلتر را بر اساس مسیر در iptables درج کنید: .IP iptables \-A OUTPUT \-m bpf \-\-object\-pinned ${BPF_MOUNT}/{PINNED_PATH} \-j ACCEPT .TP \fB\-\-bytecode\fP \fIcode\fP ارسال قالب بایت‌کد BPF به همان ترتیبی که توسط ابزار \fBnfbpf_compile\fP تولید می‌شود. .PP قالب کد مشابه خروجی دستور .B tcpdump \-ddd است: یک خط که تعداد دستورالعمل‌ها را ذخیره می‌کند، و به دنبال آن برای هر دستورالعمل یک خط قرار می‌گیرد. خطوط دستورالعمل از الگوی 'u16 u8 u8 u32' در نماد دهدهی پیروی می‌کنند. فیلدها عملیات، آفست پرش در صورت درست بودن (true)، آفست پرش در صورت نادرست بودن (false) و فیلد چندمنظوره 'K' را کدگذاری می‌کنند. توضیحات (کامنت‌ها) پشتیبانی نمی‌شوند. .PP به عنوان مثال، برای خواندن فقط بسته‌های منطبق با 'ip proto 6'، عبارت زیر را بدون توضیحات یا فاصله‌های خالی انتهایی درج کنید: .IP 4 # number of instructions .br 48 0 0 9 # load byte ip\->proto .br 21 0 1 6 # jump equal IPPROTO_TCP .br 6 0 0 1 # return pass (non-zero) .br 6 0 0 0 # return fail (zero) .PP می‌توانید این فیلتر را با دستور زیر به تطبیق bpf ارسال کنید: .IP 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 .PP یا در عوض، می‌توانید ابزار nfbpf_compile را فراخوانی کنید: .IP iptables \-A OUTPUT \-m bpf \-\-bytecode "`nfbpf_compile RAW 'ip proto 6'`" \-j ACCEPT .PP یا از .B tcpdump \-ddd استفاده کنید. در این حالت، BPF را برای دستگاهی با همان نوع پیوند داده (data link type) تطبیق xtables تولید کنید. دستور iptables بسته‌ها را از لایه شبکه به بالا و بدون لایه MAC عبور می‌دهد. دستگاهی با نوع پیوند داده RAW انتخاب کنید، مانند یک دستگاه tun: .IP ip tuntap add tun0 mode tun .br ip link set tun0 up .br tcpdump \-ddd \-i tun0 ip proto 6 .PP برای مشاهده فهرستی از انواع شناخته‌شده پیوند داده برای یک دستگاه مشخص، .B tcpdump \-L \-i $dev را بررسی کنید. .PP برای کسب اطلاعات بیشتر درباره BPF می‌توانید به صفحه راهنمای bpf(4) در FreeBSD مراجعه کنید. .SS cgroup .TP [\fB!\fP] \fB\-\-path\fP \fIpath\fP تطبیق عضویت در cgroup2. هر سوکت با cgroup نسخه ۲ فرایند سازنده خود مرتبط است. این گزینه بسته‌های ورودی یا خروجی از تمامی سوکت‌های زیرسلسله‌مراتب مسیر مشخص‌شده را تطبیق می‌دهد. مسیر باید نسبت به ریشه سلسله‌مراتب cgroup2 باشد. .TP [\fB!\fP] \fB\-\-cgroup\fP \fIclassid\fP تطبیق classid در کنترولر net_cls مربوط به cgroup. شناسه classid نشانگری است که از طریق کنترل‌کننده net_cls مربوط به cgroup تنظیم می‌شود. این گزینه و .B \-\-path نمی‌توانند همزمان با هم استفاده شوند. .PP مثال: .IP iptables \-A OUTPUT \-p tcp \-\-sport 80 \-m cgroup ! \-\-path service/http\-server \-j DROP .IP iptables \-A OUTPUT \-p tcp \-\-sport 80 \-m cgroup ! \-\-cgroup 1 \-j DROP .PP \fBمهم\fP: هنگامی که در زنجیره INPUT استفاده می‌شود، تطبیق‌دهنده cgroup در حال حاضر تنها دارای عملکرد محدودی است، به این معنی که فقط روی بسته‌هایی تطبیق می‌یابد که برای سوکت‌های محلی از طریق دیمالتی‌پلکسینگ زودهنگام سوکت (early socket demuxing) پردازش می‌شوند. بنابراین، استفاده عمومی در زنجیره INPUT توصیه نمی‌شود مگر اینکه پیامدهای آن به خوبی درک شده باشد. .PP در دسترس از لینوکس 3.14 به بعد. .SS cluster امکان استقرار کلاسترهای توزیع بار (load-sharing) در سطح گیت‌وی و پس‌زمینه را بدون نیاز به متعادل‌کننده‌های بار (load-balancers) فراهم می‌کند. .PP این تطبیق مستلزم این است که همه گره‌ها بسته‌های یکسانی را مشاهده کنند. بنابراین، تطبیق cluster با توجه به گزینه‌های زیر تصمیم می‌گیرد که آیا این گره باید بسته را پردازش کند یا خیر: .TP \fB\-\-cluster\-total\-nodes\fP \fInum\fP تنظیم تعداد کل گره‌ها در کلاستر. .TP [\fB!\fP] \fB\-\-cluster\-local\-node\fP \fInum\fP تنظیم شماره شناسه (ID) گره محلی. .TP [\fB!\fP] \fB\-\-cluster\-local\-nodemask\fP \fImask\fP تنظیم ماسک شناسه گره محلی. می‌توانید از این گزینه به جای .B \-\-cluster\-local\-node استفاده کنید. .TP \fB\-\-cluster\-hash\-seed\fP \fIvalue\fP تنظیم مقدار سید (seed) برای درهم‌سازی جنکینز (Jenkins hash). .PP مثال: .IP 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 .IP 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 .IP iptables \-A PREROUTING \-t mangle \-i eth1 \-m mark ! \-\-mark 0xffff \-j DROP .IP iptables \-A PREROUTING \-t mangle \-i eth2 \-m mark ! \-\-mark 0xffff \-j DROP .PP و دستورات زیر برای اینکه همه گره‌ها بسته‌های یکسانی را مشاهده کنند: .IP ip maddr add 01:00:5e:00:01:01 dev eth1 .IP ip maddr add 01:00:5e:00:01:02 dev eth2 .IP arptables \-A OUTPUT \-o eth1 \-\-h\-length 6 \-j mangle \-\-mangle\-mac\-s 01:00:5e:00:01:01 .IP 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 .IP arptables \-A OUTPUT \-o eth2 \-\-h\-length 6 \-j mangle \-\-mangle\-mac\-s 01:00:5e:00:01:02 .IP 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 .PP \fBنکته\fP: دستورات arptables فوق از ساختار دستوری مرسوم استفاده می‌کنند. اگر از arptables-jf موجود در برخی نسخه‌های RedHat، CentOS و Fedora استفاده می‌کنید، با خطاهای ساختاری مواجه خواهید شد. بنابراین، باید آن‌ها را با نحو arptables-jf سازگار کنید تا کار کنند. .PP در مورد اتصالات TCP، قابلیت pickup باید غیرفعال شود تا از معتبر علامت‌گذاری شدن بسته‌های TCP ACK که در جهت پاسخ می‌آیند جلوگیری گردد: .IP echo 0 > /proc/sys/net/netfilter/nf_conntrack_tcp_loose .SS comment امکان افزودن توضیح (تا ۲۵۶ کاراکتر) به هر قاعده را فراهم می‌کند. .TP \fB\-\-comment\fP \fIcomment\fP .TP مثال: iptables \-A INPUT \-i eth1 \-m comment \-\-comment "my local LAN" .SS connbytes تطبیق بر اساس اینکه یک اتصال (یا یکی از دو جریان تشکیل‌دهنده اتصال) تاکنون چه تعداد بایت یا بسته منتقل کرده است، یا بر اساس میانگین بایت در هر بسته. .PP شمارنده‌ها ۶۴ بیتی هستند و بنابراین انتظار سرریز شدن آن‌ها وجود ندارد ;) .PP کاربرد اصلی، تشخیص بارگیری‌های طولانی‌مدت و نشانه‌گذاری آن‌ها برای زمان‌بندی با استفاده از باند اولویت پایین‌تر در کنترل ترافیک است. .PP بایت‌های منتقل‌شده در هر اتصال را می‌توان از طریق دستور .B conntrack \-L مشاهده کرد و از طریق ctnetlink به آن دسترسی داشت. .PP توجه داشته باشید که برای اتصالاتی که فاقد اطلاعات حسابرسی (accounting) هستند، این تطبیق همیشه مقدار false را برمی‌گرداند. فلگ سیس‌کنترل "net.netfilter.nf_conntrack_acct" مشخص می‌کند که آیا بسته‌ها/بایت‌های اتصالات \fBجدید\fP شمرده شوند یا خیر. جریان‌های اتصال موجود با تغییر وضعیت این فلگ ساختار حسابرسی را دریافت نکرده یا از دست نمی‌دهند. .TP [\fB!\fP] \fB\-\-connbytes\fP \fIfrom\fP[\fB:\fP\fIto\fP] تطبیق بسته‌های اتصالی که بسته‌ها/بایت‌ها/اندازه میانگین بسته آن بیشتر از FROM و کمتر از TO بایت/بسته باشد. اگر TO حذف شود فقط بررسی FROM انجام می‌شود. از "!" برای تطبیق بسته‌هایی که در این بازه قرار نمی‌گیرند استفاده می‌شود. .TP \fB\-\-connbytes\-dir\fP {\fBoriginal\fP|\fBreply\fP|\fBboth\fP} کدام بسته‌ها مد نظر قرار گیرند. .TP \fB\-\-connbytes\-mode\fP {\fBpackets\fP|\fBbytes\fP|\fBavgpkt\fP} بررسی تعداد بسته‌ها، تعداد بایت‌های منتقل‌شده یا اندازه میانگین (بر حسب بایت) همه بسته‌های دریافت شده تاکنون. توجه داشته باشید که وقتی "both" همراه با "avgpkt" استفاده می‌شود و داده‌ها (عمدتاً) تنها در یک جهت جریان دارند (به عنوان مثال HTTP)، اندازه میانگین بسته تقریباً نصف بسته‌های واقعی داده خواهد بود. .TP مثال: iptables .. \-m connbytes \-\-connbytes 10000:100000 \-\-connbytes\-dir both \-\-connbytes\-mode bytes ... .SS connlabel این ماژول برچسب‌های connlabel را با یک اتصال تطبیق داده یا به آن اضافه می‌کند. برچسب‌های connlabel مشابه connmark هستند، با این تفاوت که برچسب‌ها مبتنی بر بیت هستند؛ یعنی همه برچسب‌ها می‌توانند همزمان به یک جریان متصل شوند. در حال حاضر تا ۱۲۸ برچسب یکتا پشتیبانی می‌شود. .TP [\fB!\fP] \fB\-\-label\fP \fBname\fP در صورتی که برچسب \fBname\fP روی یک اتصال تنظیم شده باشد تطبیق می‌یابد. به جای یک نام (که به یک عدد تبدیل می‌شود، مثال زیر را ببینید)، می‌توان از یک عدد استفاده کرد. استفاده از عدد همیشه بر فایل connlabel.conf اولویت دارد. .TP \fB\-\-set\fP اگر برچسب روی اتصال تنظیم نشده باشد، آن را تنظیم می‌کند. توجه داشته باشید که تنظیم برچسب ممکن است ناموفق باشد؛ این امر بدان دلیل است که هسته فضای ذخیره‌سازی برچسب conntrack را در زمان ایجاد اتصال تخصیص می‌دهد، و تنها به میزانی که مجموعه قواعد موجود در زمان ایجاد اتصال نیاز دارد حافظه رزرو می‌کند. در این حالت، تطبیق ناموفق خواهد بود (یا در صورتی که گزینه .B \-\-label نفی شده باشد، موفق خواهد شد). .PP این تطبیق به libnetfilter_conntrack نسخه 1.0.4 یا بالاتر نیاز دارد. ترجمه نام برچسب‌ها از طریق فایل پیکربندی .B /etc/xtables/connlabel.conf انجام می‌شود. .PP مثال: .IP .nf 0 eth0\-in 1 eth0\-out 2 ppp\-in 3 ppp\-out 4 bulk\-traffic 5 interactive .fi .PP .SS connlimit امکان محدود کردن تعداد اتصالات همزمان به یک کارساز را به ازای هر آدرس IP کلاینت (یا بلوک آدرس کلاینت) فراهم می‌کند. .TP \fB\-\-connlimit\-upto\fP \fIn\fP در صورتی که تعداد اتصالات موجود کمتر یا برابر با \fIn\fP باشد تطبیق می‌یابد. .TP \fB\-\-connlimit\-above\fP \fIn\fP در صورتی که تعداد اتصالات موجود بیشتر از \fIn\fP باشد تطبیق می‌یابد. .TP \fB\-\-connlimit\-mask\fP \fIprefix_length\fP گروه‌بندی میزبان‌ها با استفاده از طول پیشوند (prefix length). برای IPv4، این مقدار باید عددی بین (و شامل) ۰ و ۳۲ باشد. برای IPv6، عددی بین ۰ و ۱۲۸. در صورت مشخص نشدن، حداکثر طول پیشوند برای پروتکل مربوطه استفاده می‌شود. .TP \fB\-\-connlimit\-saddr\fP اعمال محدودیت بر روی گروه مبدأ. در صورتی که .B \-\-connlimit\-daddr مشخص نشده باشد، این گزینه پیش‌فرض است. .TP \fB\-\-connlimit\-daddr\fP اعمال محدودیت بر روی گروه مقصد. .PP مثال‌ها: .IP \(bu 4 اجازه دادن به ۲ اتصال telnet به ازای هر میزبان کلاینت: .br iptables \-A INPUT \-p tcp \-\-syn \-\-dport 23 \-m connlimit \-\-connlimit\-above 2 \-j REJECT .IP \(bu 4 همچنین می‌توانید حالت برعکس را تطبیق دهید: .br iptables \-A INPUT \-p tcp \-\-syn \-\-dport 23 \-m connlimit \-\-connlimit\-upto 2 \-j ACCEPT .IP \(bu 4 محدود کردن تعداد درخواست‌های همزمان HTTP به ۱۶ مورد برای هر شبکه مبدأ در اندازه کلاس C (با نت‌ماسک ۲۴ بیتی): .br iptables \-p tcp \-\-syn \-\-dport 80 \-m connlimit \-\-connlimit\-above 16 \-\-connlimit\-mask 24 \-j REJECT .IP \(bu 4 محدود کردن تعداد درخواست‌های همزمان HTTP به ۱۶ مورد برای شبکه محلی پیوند (IPv6): .br ip6tables \-p tcp \-\-syn \-\-dport 80 \-s fe80::/64 \-m connlimit \-\-connlimit\-above 16 \-\-connlimit\-mask 64 \-j REJECT .IP \(bu 4 محدود کردن تعداد اتصالات به یک میزبان مشخص: .br ip6tables \-p tcp \-\-syn \-\-dport 49152:65535 \-d 2001:db8::1 \-m connlimit \-\-connlimit\-above 100 \-j REJECT .SS connmark این ماژول فیلد نشانه (mark) فیلتر شبکه (netfilter) مرتبط با یک اتصال را تطبیق می‌دهد (که می‌توان آن را با استفاده از هدف \fBCONNMARK\fP در زیر تنظیم کرد). .TP [\fB!\fP] \fB\-\-mark\fP \fIvalue\fP[\fB/\fP\fImask\fP] بسته‌های موجود در اتصال‌هایی با مقدار نشانه داده‌شده را تطبیق می‌دهد (اگر ماسک مشخص شده باشد، پیش از مقایسه، با نشانه به‌صورت منطقی AND می‌شود). .SS conntrack این ماژول، در صورت ترکیب با سیستم رهگیری اتصال (connection tracking)، امکان دسترسی به وضعیت رهگیری اتصال را برای این بسته/اتصال فراهم می‌کند. .TP [\fB!\fP] \fB\-\-ctstate\fP \fIstatelist\fP متغیر \fIstatelist\fP فهرستی از وضعیت‌های اتصال است که با کاما از هم جدا شده‌اند تا تطبیق داده شوند. وضعیت‌های ممکن در زیر فهرست شده‌اند. .TP [\fB!\fP] \fB\-\-ctproto\fP \fIl4proto\fP پروتکل لایه ۴ برای تطبیق (از طریق شماره یا نام). .TP [\fB!\fP] \fB\-\-ctorigsrc\fP \fIaddress\fP[\fB/\fP\fImask\fP] .TP [\fB!\fP] \fB\-\-ctorigdst\fP \fIaddress\fP[\fB/\fP\fImask\fP] .TP [\fB!\fP] \fB\-\-ctreplsrc\fP \fIaddress\fP[\fB/\fP\fImask\fP] .TP [\fB!\fP] \fB\-\-ctrepldst\fP \fIaddress\fP[\fB/\fP\fImask\fP] تطبیق بر اساس نشانی مبدأ/مقصد اصلی (original) یا پاسخ (reply). .TP [\fB!\fP] \fB\-\-ctorigsrcport\fP \fIport\fP[\fB:\fP\fIport\fP] .TP [\fB!\fP] \fB\-\-ctorigdstport\fP \fIport\fP[\fB:\fP\fIport\fP] .TP [\fB!\fP] \fB\-\-ctreplsrcport\fP \fIport\fP[\fB:\fP\fIport\fP] .TP [\fB!\fP] \fB\-\-ctrepldstport\fP \fIport\fP[\fB:\fP\fIport\fP] تطبیق بر اساس درگاه مبدأ/مقصد اصلی یا پاسخ (TCP/UDP و غیره) یا کلید GRE. تطبیق بر اساس بازه‌های درگاه فقط در نگارش‌های هسته بالاتر از 2.6.38 پشتیبانی می‌شود. .TP [\fB!\fP] \fB\-\-ctstatus\fP \fIstatelist\fP متغیر \fIstatuslist\fP فهرستی از وضعیت‌های حالت اتصال است که با کاما از هم جدا شده‌اند تا تطبیق داده شوند. وضعیت‌های ممکن در زیر فهرست شده‌اند. .TP [\fB!\fP] \fB\-\-ctexpire\fP \fItime\fP[\fB:\fP\fItime\fP] تطبیق طول عمر باقی‌مانده بر حسب ثانیه با مقدار یا بازه‌ای از مقادیر مشخص‌شده (شامل هر دو سر بازه). .TP \fB\-\-ctdir\fP {\fBORIGINAL\fP|\fBREPLY\fP} بسته‌هایی که در جهت مشخص‌شده در حال جریان هستند را تطبیق می‌دهد. اگر این فلگ اصلاً مشخص نشود، بسته‌ها در هر دو جهت تطبیق داده می‌شوند. .PP وضعیت‌ها برای \fB\-\-ctstate\fP: .TP \fBINVALID\fP بسته با هیچ اتصال شناخته‌شده‌ای مرتبط نیست. .TP \fBNEW\fP بسته یک اتصال جدید ایجاد کرده است یا به اتصالی مرتبط است که در هر دو جهت بسته‌ای در آن دیده نشده است. .TP \fBESTABLISHED\fP بسته با اتصالی مرتبط است که در هر دو جهت بسته‌هایی در آن مبادله شده است. .TP \fBRELATED\fP بسته در حال آغاز یک اتصال جدید است، اما با یک اتصال موجود مرتبط است؛ مانند انتقال داده FTP یا یک خطای ICMP. .TP \fBUNTRACKED\fP بسته اصلاً رهگیری نمی‌شود؛ این حالت زمانی رخ می‌دهد که شما با استفاده از \fB\-j CT \-\-notrack\fP در جدول raw صراحتاً آن را از رهگیری خارج کرده باشید. .TP \fBSNAT\fP یک وضعیت مجازی؛ زمانی تطبیق می‌یابد که نشانی مبدأ اصلی با مقصد پاسخ متفاوت باشد. .TP \fBDNAT\fP یک وضعیت مجازی؛ زمانی تطبیق می‌یابد که مقصد اصلی با مبدأ پاسخ متفاوت باشد. .PP وضعیت‌ها برای \fB\-\-ctstatus\fP: .TP \fBNONE\fP هیچ‌یک از موارد زیر. .TP \fBEXPECTED\fP این یک اتصال مورد انتظار است (یعنی یک conntrack helper آن را برپا کرده است). .TP \fBSEEN_REPLY\fP سیستم conntrack بسته‌هایی را در هر دو جهت دیده است. .TP \fBASSURED\fP ورودی conntrack هرگز نباید پیش از موعد منقضی شود. .TP \fBCONFIRMED\fP اتصال تایید شده است: بسته مبدأ سیستم را ترک کرده است. .SS cpu .TP [\fB!\fP] \fB\-\-cpu\fP \fInumber\fP تطبیق پردازنده‌ای که این بسته را مدیریت می‌کند. پردازنده‌ها از 0 تا NR_CPUS\-1 شماره‌گذاری می‌شوند. می‌تواند در ترکیب با RPS (هدایت بسته از راه دور یا Remote Packet Steering) یا کارت‌های شبکه چندصفی (multiqueue NICs) برای توزیع ترافیک شبکه روی صف‌های مختلف استفاده شود. .PP مثال: .PP iptables \-t nat \-A PREROUTING \-p tcp \-\-dport 80 \-m cpu \-\-cpu 0 \-j REDIRECT \-\-to\-ports 8080 .PP iptables \-t nat \-A PREROUTING \-p tcp \-\-dport 80 \-m cpu \-\-cpu 1 \-j REDIRECT \-\-to\-ports 8081 .PP از لینوکس 2.6.36 به بعد در دسترس است. .SS dccp .TP [\fB!\fP] \fB\-\-source\-port\fP,\fB\-\-sport\fP \fIport\fP[\fB:\fP\fIport\fP] .TP [\fB!\fP] \fB\-\-destination\-port\fP,\fB\-\-dport\fP \fIport\fP[\fB:\fP\fIport\fP] .TP [\fB!\fP] \fB\-\-dccp\-types\fP \fImask\fP زمانی تطبیق می‌یابد که نوع بسته DCCP یکی از موارد موجود در 'mask' باشد. متغیر 'mask' فهرستی جداشده با کاما از انواع بسته‌ها است. انواع بسته‌ها عبارتند از: .BR "REQUEST RESPONSE DATA ACK DATAACK CLOSEREQ CLOSE RESET SYNC SYNCACK INVALID" . .TP [\fB!\fP] \fB\-\-dccp\-option\fP \fInumber\fP در صورت تنظیم بودن گزینه DCCP تطبیق می‌یابد. .SS devgroup تطبیق گروه دستگاه رابط ورودی/خروجی یک بسته. .TP [\fB!\fP] \fB\-\-src\-group\fP \fIname\fP تطبیق گروه دستگاه ورودی .TP [\fB!\fP] \fB\-\-dst\-group\fP \fIname\fP تطبیق گروه دستگاه خروجی .SS dscp این ماژول فیلد ۶ بیتی DSCP را درون فیلد TOS در هدر IP تطبیق می‌دهد. DSCP در استاندارد IETF جایگزین TOS شده است. .TP [\fB!\fP] \fB\-\-dscp\fP \fIvalue\fP تطبیق با یک مقدار عددی (دهدهی یا هگزادسیمال) در بازه 0\(en63. .TP [\fB!\fP] \fB\-\-dscp\-class\fP \fIclass\fP تطبیق با کلاس DiffServ. این مقدار می‌تواند هر یک از کلاس‌های BE، EF، AFxx یا CSx باشد. سپس به مقدار عددی مربوطه تبدیل خواهد شد. .SS dst (IPv6-specific) این ماژول پارامترهای موجود در هدر گزینه‌های مقصد (Destination Options) را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-dst\-len\fP \fIlength\fP طول کل این هدر بر حسب بایت (اوکتت). .TP \fB\-\-dst\-opts\fP \fItype\fP[\fB:\fP\fIlength\fP][\fB,\fP\fItype\fP[\fB:\fP\fIlength\fP]...] نوع عددی گزینه و طول داده‌های گزینه بر حسب بایت (اوکتت). .SS ecn امکان تطبیق بیت‌های ECN در هدر IPv4/IPv6 و TCP را فراهم می‌کند. ECN سازوکار اعلان صریح تراکم (Explicit Congestion Notification) است که در RFC3168 مشخص شده است. .TP [\fB!\fP] \fB\-\-ecn\-tcp\-cwr\fP در صورتی که بیت ECN CWR (پنجره تراکم دریافت شد / Congestion Window Received) پروتکل TCP تنظیم شده باشد، تطبیق می‌یابد. .TP [\fB!\fP] \fB\-\-ecn\-tcp\-ece\fP در صورتی که بیت ECN ECE (پژواک ECN / ECN Echo) پروتکل TCP تنظیم شده باشد، تطبیق می‌یابد. .TP [\fB!\fP] \fB\-\-ecn\-ip\-ect\fP \fInum\fP یک ECT (انتقال با قابلیت ECN / ECN-Capable Transport) خاص در IPv4/IPv6 را تطبیق می‌دهد. باید عددی بین `0` و `3` مشخص کنید. .SS esp این ماژول مقادیر SPI را در هدر ESP بسته‌های IPsec تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-espspi\fP \fIspi\fP[\fB:\fP\fIspi\fP] .SS eui64 (IPv6-specific) این ماژول بخش EUI-64 یک نشانی IPv6 پیکربندی‌شده خودکار بدون حالت (stateless autoconfigured) را تطبیق می‌دهد. این ماژول EUI-64 به‌دست‌آمده از نشانی MAC مبدأ در فریم اترنت را با ۶۴ بیت پایینی نشانی مبدأ IPv6 مقایسه می‌کند. اما بیت "Universal/Local" مقایسه نمی‌شود. این ماژول فریم‌های سایر لایه‌های پیوند را تطبیق نمی‌دهد و تنها در زنجیره‌های .BR PREROUTING ، .BR INPUT و .BR FORWARD معتبر است. .SS frag (IPv6-specific) این ماژول پارامترهای موجود در هدر قطعه‌بندی (Fragment header) را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-fragid\fP \fIid\fP[\fB:\fP\fIid\fP] شناسه (Identification) داده‌شده یا بازه‌ای از آن را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-fraglen\fP \fIlength\fP این گزینه در نگارش هسته 2.6.10 یا بالاتر قابل استفاده نیست. طول هدر قطعه‌بندی ایستا است و این گزینه کاربردی ندارد. .TP \fB\-\-fragres\fP در صورتی که فیلدهای رزروشده با صفر پر شده باشند تطبیق می‌یابد. .TP \fB\-\-fragfirst\fP روی قطعه اول تطبیق می‌یابد. .TP \fB\-\-fragmore\fP در صورتی که قطعات بیشتری وجود داشته باشد تطبیق می‌یابد. .TP \fB\-\-fraglast\fP در صورتی که این آخرین قطعه باشد تطبیق می‌یابد. .SS hashlimit ماژول \fBhashlimit\fP از باکت‌های درهم‌سازی (hash buckets) برای بیان تطبیق محدودیت نرخ (مشابه تطبیق \fBlimit\fP) برای گروهی از اتصال‌ها با استفاده از یک قانون \fBواحد\fP iptables استفاده می‌کند. گروه‌بندی می‌تواند برای هر گروه میزبان (نشانی مبدأ و/یا مقصد) و/یا برای هر درگاه انجام شود. این ماژول به شما توانایی بیان "\fIN\fP بسته در هر واحد زمان به ازای هر گروه" یا "\fIN\fP بایت در ثانیه" را می‌دهد (برای چند مثال به زیر مراجعه کنید). .PP یکی از گزینه‌های محدودیت هش (\fB\-\-hashlimit\-upto\fP، \fB\-\-hashlimit\-above\fP) و گزینه \fB\-\-hashlimit\-name\fP الزامی هستند. .TP \fB\-\-hashlimit\-upto\fP \fIamount\fP[\fB/second\fP|\fB/minute\fP|\fB/hour\fP|\fB/day\fP] در صورتی که نرخ کمتر یا مساوی با \fIamount\fP/quantum باشد تطبیق می‌یابد. این مقدار یا به صورت یک عدد با پسوند واحد زمان اختیاری (پیش‌فرض 3/hour است) مشخص می‌شود، یا به صورت \fIamount\fPb/second (تعداد بایت در ثانیه). .TP \fB\-\-hashlimit\-above\fP \fIamount\fP[\fB/second\fP|\fB/minute\fP|\fB/hour\fP|\fB/day\fP] در صورتی که نرخ بیشتر از \fIamount\fP/quantum باشد تطبیق می‌یابد. .TP \fB\-\-hashlimit\-burst\fP \fIamount\fP حداکثر تعداد اولیه بسته‌ها برای تطبیق: این عدد هر بار که محدودیت مشخص‌شده در بالا به حد نصاب نرسد یکی شارژ می‌شود، تا سقف این عدد؛ پیش‌فرض 5 است. هنگامی که تطبیق نرخ مبتنی بر بایت درخواست شود، این گزینه مقدار بایت‌هایی را مشخص می‌کند که می‌توانند از نرخ داده‌شده فراتر روند. این گزینه باید با احتیاط استفاده شود \(em اگر ورودی منقضی شود، مقدار burst نیز بازنشانی می‌شود. .TP \fB\-\-hashlimit\-mode\fP {\fBsrcip\fP|\fBsrcport\fP|\fBdstip\fP|\fBdstport\fP}\fB,\fP... فهرستی جداشده با کاما از اشیایی که باید در نظر گرفته شوند. اگر هیچ گزینه \-\-hashlimit\-mode مشخص نشود، hashlimit شبیه به limit عمل می‌کند، اما با هزینه انجام نگهداری‌های جدول درهم‌سازی همراه است. .TP \fB\-\-hashlimit\-srcmask\fP \fIprefix\fP هنگامی که \-\-hashlimit\-mode srcip استفاده می‌شود، تمام نشانی‌های مبدأ دریافت‌شده بر اساس طول پیشوند داده‌شده گروه‌بندی می‌شوند و زیرشبکه ایجادشده مشمول hashlimit خواهد بود. متغیر \fIprefix\fP باید عددی بین 0 و 32 (شامل هر دو) باشد. توجه داشته باشید که \-\-hashlimit\-srcmask 0 اساساً همان کاری را انجام می‌دهد که عدم مشخص کردن srcip برای \-\-hashlimit\-mode انجام می‌دهد، اما از نظر فنی بار پردازشی بیشتری دارد. .TP \fB\-\-hashlimit\-dstmask\fP \fIprefix\fP مانند \-\-hashlimit\-srcmask، اما برای نشانی‌های مقصد. .TP \fB\-\-hashlimit\-name\fP \fIfoo\fP نام برای ورودی proc/net/ipt_hashlimit/foo/. .TP \fB\-\-hashlimit\-htable\-size\fP \fIbuckets\fP تعداد باکت‌های جدول درهم‌سازی. .TP \fB\-\-hashlimit\-htable\-max\fP \fIentries\fP حداکثر ورودی‌ها در جدول درهم‌سازی. .TP \fB\-\-hashlimit\-htable\-expire\fP \fImsec\fP پس از چند میلی‌ثانیه ورودی‌های هش منقضی می‌شوند. .TP \fB\-\-hashlimit\-htable\-gcinterval\fP \fImsec\fP فاصله زمانی بر حسب میلی‌ثانیه میان دوره‌های بازیافت حافظه (garbage collection). .TP \fB\-\-hashlimit\-rate\-match\fP جریان را به جای محدود کردن نرخ آن، طبقه‌بندی می‌کند. این گزینه مانند یک تطبیق درست/نادرست (true/false) عمل می‌کند که آیا نرخ بالاتر/پایین‌تر از یک مقدار مشخص است یا خیر. .TP \fB\-\-hashlimit\-rate\-interval\fP \fIsec\fP می‌تواند همراه با \-\-hashlimit\-rate\-match برای تعیین بازه‌ای که نرخ در آن باید نمونه‌برداری شود، استفاده شود. .PP مثال‌ها: .TP تطبیق بر اساس میزبان مبدأ "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 .TP تطبیق بر اساس درگاه مبدأ "100 packets per second for every service of 192.168.1.1" => \-s 192.168.1.1 \-\-hashlimit\-mode srcport \-\-hashlimit\-upto 100/sec .TP تطبیق بر اساس زیرشبکه "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 .TP تطبیق بایت در ثانیه "flows exceeding 512kbyte/s" => \-\-hashlimit\-mode srcip,dstip,srcport,dstport \-\-hashlimit\-above 512kb/s .TP تطبیق بایت در ثانیه "hosts that exceed 512kbyte/s, but permit up to 1Megabytes without matching" \-\-hashlimit\-mode dstip \-\-hashlimit\-above 512kb/s \-\-hashlimit\-burst 1mb .SS hbh (IPv6-specific) این ماژول پارامترهای موجود در هدر گزینه‌های گام‌به‌گام (Hop-by-Hop Options) را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-hbh\-len\fP \fIlength\fP طول کل این هدر بر حسب بایت (اوکتت). .TP \fB\-\-hbh\-opts\fP \fItype\fP[\fB:\fP\fIlength\fP][\fB,\fP\fItype\fP[\fB:\fP\fIlength\fP]...] نوع عددی گزینه و طول داده‌های گزینه بر حسب بایت (اوکتت). .SS helper این ماژول بسته‌های مرتبط با یک conntrack helper مشخص را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-helper\fP \fIstring\fP بسته‌های مرتبط با conntrack helper مشخص‌شده را تطبیق می‌دهد. .RS .PP رشته می‌تواند برای بسته‌های مرتبط با یک نشست FTP در درگاه پیش‌فرض، برابر با "ftp" باشد. برای سایر درگاه‌ها، مقدار portnr\-\- را به آن اضافه کنید، مانند "ftp\-2121". .PP همین قوانین برای سایر conntrack helperها نیز اعمال می‌شود. .RE .SS hl (IPv6-specific) این ماژول فیلد محدودیت گام (Hop Limit) را در هدر IPv6 تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-hl\-eq\fP \fIvalue\fP در صورتی که محدودیت گام برابر با \fIvalue\fP باشد تطبیق می‌یابد. .TP \fB\-\-hl\-lt\fP \fIvalue\fP در صورتی که محدودیت گام کمتر از \fIvalue\fP باشد تطبیق می‌یابد. .TP \fB\-\-hl\-gt\fP \fIvalue\fP در صورتی که محدودیت گام بیشتر از \fIvalue\fP باشد تطبیق می‌یابد. .SS icmp (IPv4-specific) این افزونه در صورت مشخص شدن `\-\-protocol icmp` قابل استفاده است. این ماژول گزینه زیر را فراهم می‌کند: .TP [\fB!\fP] \fB\-\-icmp\-type\fP {\fItype\fP[\fB/\fP\fIcode\fP]|\fItypename\fP} امکان مشخص کردن نوع ICMP را فراهم می‌کند، که می‌تواند یک نوع عددی ICMP، یک جفت نوع/کد (type/code)، یا یکی از نام‌های نوع ICMP باشد که توسط دستور زیر نمایش داده می‌شوند: .nf iptables \-p icmp \-h .fi .SS icmp6 (IPv6-specific) این افزونه در صورت مشخص شدن `\-\-protocol ipv6\-icmp` یا `\-\-protocol icmpv6` قابل استفاده است. این ماژول گزینه زیر را فراهم می‌کند: .TP [\fB!\fP] \fB\-\-icmpv6\-type\fP \fItype\fP[\fB/\fP\fIcode\fP]|\fItypename\fP امکان مشخص کردن نوع ICMPv6 را فراهم می‌کند، که می‌تواند یک .IR type عددی ICMPv6، یک .IR type و .IR code ، یا یکی از نام‌های نوع ICMPv6 باشد که توسط دستور زیر نمایش داده می‌شوند: .nf ip6tables \-p ipv6\-icmp \-h .fi .SS iprange این ماژول روی یک بازه دلخواه مشخص‌شده از نشانی‌های IP تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-src\-range\fP \fIfrom\fP[\fB\-\fP\fIto\fP] تطبیق IP مبدأ در بازه مشخص‌شده. .TP [\fB!\fP] \fB\-\-dst\-range\fP \fIfrom\fP[\fB\-\fP\fIto\fP] تطبیق IP مقصد در بازه مشخص‌شده. .SS ipv6header (IPv6-specific) این ماژول هدرهای افزونه IPv6 و/یا هدر لایه بالایی را تطبیق می‌دهد. .TP \fB\-\-soft\fP در صورتی که بسته شامل \fBهر یک\fP از هدرهای مشخص‌شده با \fB\-\-header\fP باشد تطبیق می‌یابد. .TP [\fB!\fP] \fB\-\-header\fP \fIheader\fP[\fB,\fP\fIheader\fP...] بسته‌ای را تطبیق می‌دهد که دقیقاً شامل تمام هدرهای مشخص‌شده باشد. هدرهای کپسوله‌شده در هدر ESP خارج از این محدوده هستند. انواع ممکن \fIheader\fP می‌توانند موارد زیر باشند: .TP \fBhop\fP|\fBhop\-by\-hop\fP هدر گزینه‌های گام‌به‌گام (Hop-by-Hop Options) .TP \fBdst\fP هدر گزینه‌های مقصد (Destination Options) .TP \fBroute\fP هدر مسیریابی (Routing) .TP \fBfrag\fP هدر قطعه‌بندی (Fragment) .TP \fBauth\fP هدر احراز اصالت (Authentication) .TP \fBesp\fP هدر بار مفید امنیتی کپسوله‌شده (Encapsulating Security Payload) .TP \fBnone\fP نبود هدر بعدی (No Next header) که با مقدار 59 در فیلد 'Next Header' هدر IPv6 یا هر یک از هدرهای افزونه IPv6 مطابقت دارد .TP \fBprot\fP که با هر هدر پروتکل لایه بالاتر مطابقت دارد. نام پروتکل از /etc/protocols و مقدار عددی نیز مجاز است. عدد 255 معادل با \fBprot\fP است. .SS ipvs تطبیق ویژگی‌های اتصالات IPVS (سرور مجازی لینوکس). .TP [\fB!\fP] \fB\-\-ipvs\fP بسته متعلق به یک اتصال IPVS باشد. .TP هر یک از گزینه‌های زیر متضمن \-\-ipvs هستند (حتی در حالت نقیض): .TP [\fB!\fP] \fB\-\-vproto\fP \fIprotocol\fP پروتکل VIP جهت تطبیق؛ بر حسب شماره یا نام، مانند "tcp". .TP [\fB!\fP] \fB\-\-vaddr\fP \fIaddress\fP[\fB/\fP\fImask\fP] نشانی VIP جهت تطبیق. .TP [\fB!\fP] \fB\-\-vport\fP \fIport\fP پورت VIP جهت تطبیق؛ بر حسب شماره یا نام، مانند "http". .TP \fB\-\-vdir\fP {\fBORIGINAL\fP|\fBREPLY\fP} جهت جریان بسته (ارسال اولیه یا پاسخ). .TP [\fB!\fP] \fB\-\-vmethod\fP {\fBGATE\fP|\fBIPIP\fP|\fBMASQ\fP} روش بازپخش (Forwarding) مورد استفاده در IPVS. .TP [\fB!\fP] \fB\-\-vportctl\fP \fIport\fP پورت VIP اتصال کنترل‌کننده جهت تطبیق، مانند 21 برای FTP. .SS length این ماژول طول بار داده (Payload) لایه ۳ یک بسته (مانند بسته لایه ۴) را با یک مقدار مشخص یا محدوده‌ای از مقادیر تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-length\fP \fIlength\fP[\fB:\fP\fIlength\fP] .SS limit این ماژول با استفاده از فیلتر سطل ژتون (Token Bucket Filter) بسته‌ها را با نرخی محدود تطبیق می‌دهد. قاعده‌ای که از این افزونه استفاده می‌کند تا زمانی که این حد نصاب پر نشده باشد مطابقت خواهد داشت. برای مثال، می‌توان از آن در ترکیب با هدف .B LOG برای ثبت گزارش‌های محدود استفاده کرد. .PP ماژول xt_limit از نقیض پشتیبانی نمی‌کند \(em در این حالت باید از .B \-m hashlimit ! \-\-hashlimit \fIrate\fP با صرف‌نظر کردن از .B \-\-hashlimit\-mode استفاده کنید. .TP \fB\-\-limit\fP \fIrate\fP[\fB/second\fP|\fB/minute\fP|\fB/hour\fP|\fB/day\fP] حداکثر میانگین نرخ تطبیق: به‌صورت یک عدد مشخص می‌شود، همراه با پسوند اختیاری `/second`، `/minute`، `/hour` یا `/day`؛ مقدار پیش‌فرض 3/hour است. .TP \fB\-\-limit\-burst\fP \fInumber\fP حداکثر تعداد اولیه بسته‌ها جهت تطبیق: هر بار که نرخ مشخص‌شده در بالا پر نشود، یک واحد به این عدد افزوده می‌شود تا دوباره به این سقف برسد؛ مقدار پیش‌فرض 5 است. .SS mac .TP [\fB!\fP] \fB\-\-mac\-source\fP \fIaddress\fP تطبیق نشانی MAC مبدأ. قالب آن باید به‌صورت XX:XX:XX:XX:XX:XX باشد. توجه داشته باشید که این گزینه تنها برای بسته‌هایی کاربرد دارد که از یک دستگاه اترنت آمده و وارد زنجیره‌های .BR PREROUTING ، .B FORWARD یا .B INPUT می‌شوند. .SS mark این ماژول فیلد علامت‌گذاری (mark) نت‌فیلتر مرتبط با یک بسته را تطبیق می‌دهد (که می‌توان آن را با استفاده از هدف .B MARK در زیر تنظیم کرد). .TP [\fB!\fP] \fB\-\-mark\fP \fIvalue\fP[\fB/\fP\fImask\fP] بسته‌ها را با مقدار علامت (mark) بدون علامت (unsigned) داده‌شده تطبیق می‌دهد (در صورت تعیین \fImask\fP، پیش از مقایسه، مقدار بسته با \fImask\fP با یکدیگر AND منطقی می‌شوند). .SS mh (IPv6-specific) این افزونه در صورت مشخص شدن .B \-\-protocol ipv6\-mh یا .B \-\-protocol mh بارگذاری می‌شود و گزینه زیر را فراهم می‌کند: .TP [\fB!\fP] \fB\-\-mh\-type\fP \fItype\fP[\fB:\fP\fItype\fP] امکان تعیین نوع هدر تحرک (Mobility Header یا MH) را فراهم می‌سازد که می‌تواند یک .IR type عددی، .IR type یا یکی از نام‌های انواع MH باشد که توسط دستور زیر نمایش داده می‌شوند: .nf ip6tables \-p mh \-h .fi .SS multiport این ماژول مجموعه‌ای از پورت‌های مبدأ یا مقصد را تطبیق می‌دهد. حداکثر می‌توان ۱۵ پورت را تعیین کرد. یک محدوده پورت (port:port) معادل دو پورت به شمار می‌آید. این ماژول تنها در همراهی با یکی از پروتکل‌های زیر قابل استفاده است: \fBtcp\fP، \fBudp\fP، \fBudplite\fP، \fBdccp\fP و \fBsctp\fP. .TP [\fB!\fP] \fB\-\-source\-ports\fP,\fB\-\-sports\fP \fIport\fP[\fB,\fP\fIport\fP|\fB,\fP\fIport\fP\fB:\fP\fIport\fP]... اگر پورت مبدأ یکی از پورت‌های داده‌شده باشد، تطبیق می‌یابد. فلگ \fB\-\-sports\fP نام مستعار کوتاه‌تری برای این گزینه است. چند پورت یا محدوده‌های پورت با ویرگول (کاما) از یکدیگر جدا می‌شوند و یک محدوده پورت با دونقطه (:) مشخص می‌شود. بنابراین \fB53,1024:65535\fP پورت ۵۳ و تمام پورت‌های بین ۱۰۲۴ تا ۶۵۵۳۵ را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-destination\-ports\fP,\fB\-\-dports\fP \fIport\fP[\fB,\fP\fIport\fP|\fB,\fP\fIport\fP\fB:\fP\fIport\fP]... اگر پورت مقصد یکی از پورت‌های داده‌شده باشد، تطبیق می‌یابد. فلگ \fB\-\-dports\fP نام مستعار کوتاه‌تری برای این گزینه است. .TP [\fB!\fP] \fB\-\-ports\fP \fIport\fP[\fB,\fP\fIport\fP|\fB,\fP\fIport\fP\fB:\fP\fIport\fP]... اگر پورت مبدأ یا پورت مقصد با یکی از پورت‌های داده‌شده برابر باشد، تطبیق می‌یابد. .SS nfacct تطبیق‌دهنده nfacct زیرساخت حسابداری و آمارگیری ترافیک (accounting) گسترده را برای iptables فراهم می‌کند. شما باید از این تطبیق همراه با ابزار مستقل فضای کاربری .B nfacct(8) استفاده کنید. .PP تنها گزینه موجود برای این تطبیق به شرح زیر است: .TP \fB\-\-nfacct\-name\fP \fIname\fP امکان تعیین نام شیء آماری موجود را فراهم می‌کند که برای حسابداری ترافیک منطبق با این مجموعه قواعد به کار خواهد رفت. .PP برای استفاده از این افزونه، ابتدا باید یک شیء حسابداری ایجاد کنید: .IP nfacct add http\-traffic .PP سپس، باید آن را از طریق iptables به شیء حسابداری پیوند دهید: .IP iptables \-I INPUT \-p tcp \-\-sport 80 \-m nfacct \-\-nfacct\-name http\-traffic .IP iptables \-I OUTPUT \-p tcp \-\-dport 80 \-m nfacct \-\-nfacct\-name http\-traffic .PP سپس، می‌توانید مقدار ترافیک منطبق با این قواعد را بررسی کنید: .IP nfacct get http\-traffic .IP { pkts = 00000000000000000156, bytes = 00000000000000151786 } = http\-traffic; .PP می‌توانید .B nfacct(8) را از https://www.netfilter.org یا به‌صورت جایگزین، از مخزن git.netfilter.org دریافت کنید. .SS osf ماژول osf انگشت‌نگاری غیرفعال سیستم‌عامل (Passive OS Fingerprinting) را انجام می‌دهد. این ماژول برخی از داده‌ها (اندازه پنجره، MSS، گزینه‌ها و ترتیب آن‌ها، TTL، بیت DF و موارد دیگر) را از بسته‌های دارای بیت SYN فعال مقایسه می‌کند. .TP [\fB!\fP] \fB\-\-genre\fP \fIstring\fP تطبیق نوع (ژانر) سیستم‌عامل با استفاده از انگشت‌نگاری غیرفعال. .TP \fB\-\-ttl\fP \fIlevel\fP انجام بررسی‌های تکمیلی TTL روی بسته جهت تشخیص سیستم‌عامل. \fIlevel\fP می‌تواند یکی از مقادیر زیر باشد: .RS .TP \fB0\fP مقایسه دقیق نشانی IP و TTL اثر انگشت. این حالت معمولاً در شبکه‌های محلی (LAN) کاربرد دارد. .TP \fB1\fP بررسی اینکه آیا TTL هدر IP کمتر از مقدار اثر انگشت است یا خیر. برای نشانی‌های دارای قابلیت مسیریابی سراسری (اینترنت) مناسب است. .TP \fB2\fP به هیچ‌وجه مقدار TTL مقایسه نشود. .RE .TP \fB\-\-log\fP \fIlevel\fP ثبت انواع سیستم‌عامل‌های تشخیص داده‌شده در dmesg حتی اگر با مقدار مورد نظر تطبیق نداشته باشند. \fIlevel\fP می‌تواند یکی از مقادیر زیر باشد: .RS .TP \fB0\fP ثبت تمام امضاهای منطبق یا ناشناخته .TP \fB1\fP تنها ثبت اولین مورد .TP \fB2\fP ثبت تمام امضاهای منطبق شناخته‌شده .RE .PP ممکن است عبارتی شبیه به این را در syslog مشاهده کنید: .PP 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 .PP اثر انگشت‌های سیستم‌عامل با استفاده از برنامه \fBnfnl_osf\fP قابل بارگذاری هستند. جهت بارگذاری اثر انگشت‌ها از یک فایل، دستور زیر را اجرا کنید: .PP \fBnfnl_osf \-f /usr/share/xtables/pf.os\fP .PP جهت حذف مجدد آن‌ها: .PP \fBnfnl_osf \-f /usr/share/xtables/pf.os \-d\fP .PP پایگاه داده اثر انگشت از نشانی زیر قابل دریافت است: http://www.openbsd.org/cgi\-bin/cvsweb/src/etc/pf.os .SS owner این ماژول تلاش می‌کند ویژگی‌های گوناگون ایجادکننده بسته را برای بسته‌هایی که به‌صورت محلی تولید شده‌اند تطبیق دهد. این تطبیق تنها در زنجیره‌های OUTPUT و POSTROUTING معتبر است. بسته‌های بازپخش‌شده (Forwarded) هیچ سوکت مرتبطی ندارند. بسته‌های مربوط به ریسه‌های هسته (Kernel Threads) دارای سوکت هستند اما معمولاً مالکی ندارند. .TP [\fB!\fP] \fB\-\-uid\-owner\fP \fIusername\fP .TP [\fB!\fP] \fB\-\-uid\-owner\fP \fIuserid\fP[\fB\-\fP\fIuserid\fP] در صورتی تطبیق می‌یابد که ساختار فایل سوکت بسته (در صورت وجود) متعلق به کاربر داده‌شده باشد. همچنین می‌توانید یک UID عددی یا محدوده‌ای از UIDها را مشخص کنید. .TP [\fB!\fP] \fB\-\-gid\-owner\fP \fIgroupname\fP .TP [\fB!\fP] \fB\-\-gid\-owner\fP \fIgroupid\fP[\fB\-\fP\fIgroupid\fP] در صورتی تطبیق می‌یابد که ساختار فایل سوکت بسته متعلق به گروه داده‌شده باشد. همچنین می‌توانید یک GID عددی یا محدوده‌ای از GIDها را مشخص کنید. .TP \fB\-\-suppl\-groups\fP باعث می‌شود گروه‌(های) تعیین‌شده با \fB\-\-gid\-owner\fP در گروه‌های تکمیلی (Supplementary Groups) فرآیند نیز بررسی شوند. .TP [\fB!\fP] \fB\-\-socket\-exists\fP در صورتی که بسته با یک سوکت مرتبط باشد، تطبیق می‌یابد. .SS physdev این ماژول روی دستگاه‌های ورودی و خروجی پورت بریج متصل به یک دستگاه پل (Bridge) تطبیق انجام می‌دهد. این ماژول بخشی از زیرساختی است که فایروال شفاف بریجینگ IP را فعال می‌سازد و تنها برای نسخه‌های هسته بالاتر از 2.5.44 مفید است. .TP [\fB!\fP] \fB\-\-physdev\-in\fP \fIname\fP نام پورت پلی که بسته از طریق آن دریافت شده است (تنها برای بسته‌هایی که وارد زنجیره‌های .BR INPUT ، .B FORWARD و .B PREROUTING می‌شوند). اگر نام رابط به "+" ختم شود، هر رابطی که با این نام شروع شود تطبیق خواهد یافت. اگر بسته از طریق یک دستگاه پل نرسیده باشد، با این گزینه مطابقت نخواهد داشت مگر اینکه از '!' استفاده شده باشد. .TP [\fB!\fP] \fB\-\-physdev\-out\fP \fIname\fP نام پورت پلی که بسته قرار است از طریق آن ارسال شود (برای بسته‌های پل‌شده‌ای که وارد زنجیره‌های .BR FORWARD و .B POSTROUTING می‌شوند). اگر نام رابط به "+" ختم شود، هر رابطی که با این نام شروع شود تطبیق خواهد یافت. .TP [\fB!\fP] \fB\-\-physdev\-is\-in\fP در صورتی تطبیق می‌یابد که بسته از طریق یک رابط پل وارد شده باشد. .TP [\fB!\fP] \fB\-\-physdev\-is\-out\fP در صورتی تطبیق می‌یابد که بسته از طریق یک رابط پل خارج شود. .TP [\fB!\fP] \fB\-\-physdev\-is\-bridged\fP در صورتی تطبیق می‌یابد که بسته در حال پل شدن باشد و بنابراین در حال مسیریابی نباشد. این گزینه تنها در زنجیره‌های FORWARD و POSTROUTING مفید است. .SS pkttype این ماژول نوع بسته در لایه پیوند داده (Link-Layer) را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-pkt\-type\fP {\fBunicast\fP|\fBbroadcast\fP|\fBmulticast\fP} .SS policy این ماژول خط‌مشی (Policy) استفاده‌شده توسط IPsec را برای پردازش یک بسته تطبیق می‌دهد. .TP \fB\-\-dir\fP {\fBin\fP|\fBout\fP} برای انتخاب اینکه آیا خط‌مشی مورد استفاده برای کپسوله‌زدایی (Decapsulation) تطبیق داده شود یا خط‌مشی مورد استفاده برای کپسوله‌سازی (Encapsulation). مقدار .B in در زنجیره‌های .B PREROUTING، INPUT و FORWARD معتبر است، و مقدار .B out در زنجیره‌های .B POSTROUTING، OUTPUT و FORWARD معتبر است. .TP \fB\-\-pol\fP {\fBnone\fP|\fBipsec\fP} در صورتی تطبیق می‌یابد که بسته مشمول پردازش IPsec باشد. گزینه \fB\-\-pol none\fP نمی‌تواند با \fB\-\-strict\fP ترکیب شود. .TP \fB\-\-strict\fP تعیین می‌کند که آیا تطبیق دقیق خط‌مشی مد نظر است یا تطبیق با هر قاعده‌ای از خط‌مشی که با خط‌مشی داده‌شده مطابقت داشته باشد. .PP برای هر عنصر خط‌مشی که قرار است تعریف شود، می‌توان از یک یا چند گزینه از گزینه‌های زیر استفاده کرد. زمانی که \fB\-\-strict\fP فعال باشد، باید حداقل از یک گزینه برای هر عنصر استفاده شود. .TP [\fB!\fP] \fB\-\-reqid\fP \fIid\fP شناسه reqid قاعده خط‌مشی را تطبیق می‌دهد. شناسه reqid را می‌توان با .B setkey(8) با استفاده از .B unique:id به عنوان سطح تعیین کرد. .TP [\fB!\fP] \fB\-\-spi\fP \fIspi\fP شناسه SPI مربوط به SA را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-proto\fP {\fBah\fP|\fBesp\fP|\fBipcomp\fP} پروتکل کپسوله‌سازی را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-mode\fP {\fBtunnel\fP|\fBtransport\fP} حالت کپسوله‌سازی را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-tunnel\-src\fP \fIaddr\fP[\fB/\fP\fImask\fP] نشانی نقطه انتهایی مبدأ مربوط به یک SA در حالت تونل را تطبیق می‌دهد. تنها با \fB\-\-mode tunnel\fP معتبر است. .TP [\fB!\fP] \fB\-\-tunnel\-dst\fP \fIaddr\fP[\fB/\fP\fImask\fP] نشانی نقطه انتهایی مقصد مربوط به یک SA در حالت تونل را تطبیق می‌دهد. تنها با \fB\-\-mode tunnel\fP معتبر است. .TP \fB\-\-next\fP شروع عنصر بعدی در مشخصات خط‌مشی. تنها همراه با \fB\-\-strict\fP قابل استفاده است. .SS quota سهمیه‌بندی شبکه (Network Quota) را از طریق کاهش شمارنده بایت با عبور هر بسته پیاده‌سازی می‌کند. این شرط تا زمانی که شمارنده بایت به صفر برسد برقرار است (تطبیق می‌یابد). در صورت نقیض کردن، رفتار برعکس می‌شود (یعنی شرط تا زمانی که شمارنده بایت به صفر نرسد برقرار نخواهد بود). .TP [\fB!\fP] \fB\-\-quota\fP \fIbytes\fP میزان سهمیه بر حسب بایت. .SS rateest برآوردگر نرخ (Rate Estimator) می‌تواند بر اساس نرخ‌های تخمینی که توسط هدف RATEEST جمع‌آوری شده‌اند، تطبیق انجام دهد. این افزونه از تطبیق بر روی مقادیر مطلق bps/pps، مقایسه دو برآوردگر نرخ با یکدیگر، و تطبیق بر روی تفاوت میان دو برآوردگر نرخ پشتیبانی می‌کند. .PP برای درک بهتر گزینه‌های موجود، تمام ترکیب‌های ممکن به شرح زیر است: .TP حالت مطلق (Absolute): .IP \(bu 4 \fBrateest\fP \fIoperator\fP \fBrateest-bps\fP .IP \(bu 4 \fBrateest\fP \fIoperator\fP \fBrateest-pps\fP .TP حالت مطلق + دلتا (Absolute + Delta): .IP \(bu 4 (\fBrateest\fP minus \fBrateest-bps1\fP) \fIoperator\fP \fBrateest-bps2\fP .IP \(bu 4 (\fBrateest\fP minus \fBrateest-pps1\fP) \fIoperator\fP \fBrateest-pps2\fP .TP حالت نسبی (Relative): .IP \(bu 4 \fBrateest1\fP \fIoperator\fP \fBrateest2\fP \fBrateest-bps\fP(without rate!) .IP \(bu 4 \fBrateest1\fP \fIoperator\fP \fBrateest2\fP \fBrateest-pps\fP(without rate!) .TP حالت نسبی + دلتا (Relative + Delta): .IP \(bu 4 (\fBrateest1\fP minus \fBrateest-bps1\fP) \fIoperator\fP (\fBrateest2\fP minus \fBrateest-bps2\fP) .IP \(bu 4 (\fBrateest1\fP minus \fBrateest-pps1\fP) \fIoperator\fP (\fBrateest2\fP minus \fBrateest-pps2\fP) .TP \fB\-\-rateest\-delta\fP برای هر برآوردگر (خواه در حالت مطلق یا نسبی)، تفاوت بین نرخ جریان تعیین‌شده توسط برآوردگر و مقدار ایستا که با گزینه‌های BPS/PPS انتخاب شده است را محاسبه می‌کند. اگر نرخ جریان بیشتر از BPS/PPS مشخص‌شده باشد، به جای یک مقدار منفی از 0 استفاده خواهد شد. به عبارت دیگر، عبارت "max(0, rateest#_rate \- rateest#_bps)" استفاده می‌شود. .TP [\fB!\fP] \fB\-\-rateest\-lt\fP در صورتی که نرخ کمتر از نرخ/برآوردگر داده‌شده باشد تطبیق می‌یابد. .TP [\fB!\fP] \fB\-\-rateest\-gt\fP در صورتی که نرخ بیشتر از نرخ/برآوردگر داده‌شده باشد تطبیق می‌یابد. .TP [\fB!\fP] \fB\-\-rateest\-eq\fP در صورتی که نرخ برابر با نرخ/برآوردگر داده‌شده باشد تطبیق می‌یابد. .PP در اصطلاح "حالت مطلق" (absolute mode)، تنها یک برآوردگر نرخ استفاده شده و با یک مقدار ایستا مقایسه می‌شود، در حالی که در "حالت نسبی" (relative mode)، دو برآوردگر نرخ با یکدیگر مقایسه می‌شوند. .TP \fB\-\-rateest\fP \fIname\fP نام یک برآوردگر نرخ برای حالت مطلق. .TP \fB\-\-rateest1\fP \fIname\fP .TP \fB\-\-rateest2\fP \fIname\fP نام‌های دو برآوردگر نرخ برای حالت نسبی. .TP \fB\-\-rateest\-bps\fP [\fIvalue\fP] .TP \fB\-\-rateest\-pps\fP [\fIvalue\fP] .TP \fB\-\-rateest\-bps1\fP [\fIvalue\fP] .TP \fB\-\-rateest\-bps2\fP [\fIvalue\fP] .TP \fB\-\-rateest\-pps1\fP [\fIvalue\fP] .TP \fB\-\-rateest\-pps2\fP [\fIvalue\fP] برآوردگر(ها) را بر اساس بایت یا بسته در ثانیه مقایسه کرده و با مقدار انتخاب‌شده می‌سنجد. لیست موارد بالا را برای اینکه کدام گزینه در چه موردی استفاده شود بررسی کنید. می‌توان از پسوند یکا (واحد) استفاده کرد \(em پسوندهای موجود عبارتند از: bit، [kmgt]bit، [KMGT]ibit، Bps، [KMGT]Bps و [KMGT]iBps. .PP مثال: نمونه‌ای از آنچه می‌توان برای مسیریابی اتصالات داده خروجی از یک سرور FTP بر روی دو خط ارتباطی بر اساس پهنای باند دردسترس در لحظه شروع اتصال داده استفاده کرد: .PP # تخمین نرخ‌های خروجی .PP iptables \-t mangle \-A POSTROUTING \-o eth0 \-j RATEEST \-\-rateest\-name eth0 \-\-rateest\-interval 250ms \-\-rateest\-ewma 0.5s .PP iptables \-t mangle \-A POSTROUTING \-o ppp0 \-j RATEEST \-\-rateest\-name ppp0 \-\-rateest\-interval 250ms \-\-rateest\-ewma 0.5s .PP # نشانه‌گذاری بر اساس پهنای باند دردسترس .PP 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 .PP 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 .PP iptables \-t mangle \-A balance \-j CONNMARK \-\-restore\-mark .SS realm (IPv4-specific) این گزینه قلمرو مسیریابی (Routing Realm) را تطبیق می‌دهد. قلمروهای مسیریابی در پیکربندی‌های پیچیده مسیریابی که شامل پروتکل‌های پویای مسیریابی مانند BGP هستند، به کار می‌روند. .TP [\fB!\fP] \fB\-\-realm\fP \fIvalue\fP[\fB/\fP\fImask\fP] شماره قلمرو داده‌شده (و به‌صورت اختیاری ماسک) را تطبیق می‌دهد. اگر یک عدد نباشد، مقدار می‌تواند نام یک قلمرو از مسیر /etc/iproute2/rt_realms باشد (در این صورت نمی‌توان از ماسک استفاده کرد). هر دو مقدار و ماسک اعداد صحیح بدون علامت چهار بایتی هستند و می‌توان آن‌ها را در مبنای ده (ده‌دهی)، مبنای شانزده (هگز با پیشوند "0x") یا مبنای هشت (اکتال در صورت درج یک صفر در ابتدا) مشخص کرد. .SS recent به شما امکان می‌دهد به صورت پویا فهرستی از نشانی‌های IP بسازید و سپس به روش‌های گوناگون بسته‌ها را با آن فهرست مطابقت دهید. .PP برای نمونه، می‌توانید فهرستی به نام "badguy" از افرادی که تلاش می‌کنند به درگاه ۱۳۹ فایروال شما متصل شوند بسازید و سپس بدون بررسی بیشتر، تمام بسته‌های آینده از مبدا آن‌ها را .B DROP کنید. .PP گزینه‌های \fB\-\-set\fP، \fB\-\-rcheck\fP، \fB\-\-update\fP و \fB\-\-remove\fP مانعة‌الجمع هستند (همزمان قابل استفاده نیستند). .TP \fB\-\-name\fP \fIname\fP فهرست مورد استفاده برای دستورات را مشخص می‌کند. اگر نامی تعیین نشود، از نام \fBDEFAULT\fP استفاده خواهد شد. .TP [\fB!\fP] \fB\-\-set\fP نشانی مبدا بسته را به فهرست اضافه می‌کند. اگر نشانی مبدا از قبل در فهرست وجود داشته باشد، ورودی موجود به‌روزرسانی می‌شود. این گزینه همیشه وضعیت موفقیت‌آمیز (یا در صورت استفاده از \fB!\fP ناموفق) بازمی‌گرداند. .TP \fB\-\-rsource\fP نشانی مبدا هر بسته را در جدول فهرست اخیر تطبیق می‌دهد یا ذخیره می‌کند. این حالت پیش‌فرض است. .TP \fB\-\-rdest\fP نشانی مقصد هر بسته را در جدول فهرست اخیر تطبیق می‌دهد یا ذخیره می‌کند. .TP \fB\-\-mask\fP \fInetmask\fP ماسک شبکه‌ای (netmask) که روی این فهرست اخیر اعمال خواهد شد. .TP [\fB!\fP] \fB\-\-rcheck\fP بررسی می‌کند که آیا نشانی مبدا بسته در حال حاضر در فهرست وجود دارد یا خیر. .TP [\fB!\fP] \fB\-\-update\fP مشابه \fB\-\-rcheck\fP است، با این تفاوت که در صورت تطابق، برچسب زمانی «آخرین مشاهده» (last seen) را نیز به‌روزرسانی می‌کند. .TP [\fB!\fP] \fB\-\-remove\fP بررسی می‌کند که آیا نشانی مبدا بسته در حال حاضر در فهرست وجود دارد یا خیر، و در این صورت، آن نشانی از فهرست حذف شده و قاعده مقدار درست (true) بازمی‌گرداند. اگر نشانی پیدا نشود، مقدار نادرست (false) بازگردانده می‌شود. .TP \fB\-\-seconds\fP \fIseconds\fP این گزینه باید همراه با یکی از گزینه‌های \fB\-\-rcheck\fP یا \fB\-\-update\fP به کار رود. در صورت استفاده، تطابق تنها زمانی رخ می‌دهد که نشانی در فهرست باشد و طی تعداد ثانیه‌های مشخص‌شده اخیر مشاهده شده باشد. .TP \fB\-\-reap\fP این گزینه تنها همراه با گزینه \fB\-\-seconds\fP قابل استفاده است. در صورت استفاده، ورودی‌هایی که قدیمی‌تر از تعداد ثانیه‌های مشخص‌شده باشند پاکسازی می‌شوند. .TP \fB\-\-hitcount\fP \fIhits\fP این گزینه باید همراه با یکی از گزینه‌های \fB\-\-rcheck\fP یا \fB\-\-update\fP به کار رود. با استفاده از آن، تطابق تنها زمانی برقرار می‌شود که نشانی در فهرست باشد و تعداد بسته‌های دریافت‌شده بزرگ‌تر یا مساوی مقدار مشخص‌شده باشد. این گزینه می‌تواند همراه با \fB\-\-seconds\fP استفاده شود تا تطابق دقیق‌تری با الزام تعداد مراجعات مشخص در یک بازه زمانی معین ایجاد گردد. .TP \fB\-\-rttl\fP این گزینه فقط همراه با یکی از گزینه‌های \fB\-\-rcheck\fP یا \fB\-\-update\fP قابل استفاده است. با فعال کردن آن، تطابق تنها در صورتی رخ می‌دهد که نشانی در فهرست باشد و مقدار TTL بسته فعلی با TTL بسته‌ای که قاعده \fB\-\-set\fP را فعال کرده بود مطابقت داشته باشد. این ویژگی برای مواردی مفید است که افراد با جعل نشانی مبدا و ارسال بسته‌های ساختگی، تلاش می‌کنند از طریق این ماژول مانع دسترسی دیگران به سایت شما شده و حمله محروم‌سازی از سرویس (DoS) ایجاد کنند. .PP مثال‌ها: .IP iptables \-A FORWARD \-m recent \-\-name badguy \-\-rcheck \-\-seconds 60 \-j DROP .IP iptables \-A FORWARD \-p tcp \-i eth0 \-\-dport 139 \-m recent \-\-name badguy \-\-set \-j DROP .PP فایل‌های \fB/proc/net/xt_recent/*\fP فهرست‌های کنونی نشانی‌ها و اطلاعات مربوط به هر ورودی در هر فهرست را نشان می‌دهند. .PP هر فایل در \fB/proc/net/xt_recent/\fP را می‌توان برای مشاهده فهرست جاری خواند یا با دستورات زیر برای ویرایش فهرست در آن نوشت: .TP \fBecho +\fP\fIaddr\fP\fB >/proc/net/xt_recent/DEFAULT\fP برای افزودن \fIaddr\fP به فهرست DEFAULT .TP \fBecho \-\fP\fIaddr\fP\fB >/proc/net/xt_recent/DEFAULT\fP برای حذف \fIaddr\fP از فهرست DEFAULT .TP \fBecho / >/proc/net/xt_recent/DEFAULT\fP برای تخلیه فهرست DEFAULT (حذف همه ورودی‌ها). .PP خود ماژول پارامترهایی را می‌پذیرد که مقادیر پیش‌فرض آن‌ها در ادامه نشان داده شده است: .TP \fBip_list_tot\fP=\fI100\fP تعداد نشانی‌های به خاطر سپرده شده در هر جدول. .TP \fBip_pkt_list_tot\fP=\fI0\fP تعداد بسته‌های ذخیره‌شده به ازای هر نشانی. این پارامتر از نسخه ۳.۱۹ هسته منسوخ شده است، زیرا اندازه جدول را بر اساس پارامتر \fB\-\-hitcount\fP داده‌شده محاسبه می‌کند. .TP \fBip_list_hash_size\fP=\fI0\fP اندازه جدول درهم‌سازی (Hash table). مقدار ۰ به معنای محاسبه آن بر اساس ip_list_tot و گرد کردن آن به توان بعدی ۲ است (با مقدار پیش‌فرض \fI100\fP برای \fBip_list_tot\fP، مقدار \fBip_list_hash_size\fP به صورت پیش‌فرض \fI128\fP محاسبه می‌شود). .TP \fBip_list_perms\fP=\fI0644\fP مجوزهای دسترسی فایل‌های /proc/net/xt_recent/*. .TP \fBip_list_uid\fP=\fI0\fP شناسه کاربری عددی (UID) برای مالکیت فایل‌های /proc/net/xt_recent/*. .TP \fBip_list_gid\fP=\fI0\fP شناسه گروهی عددی (GID) برای مالکیت فایل‌های /proc/net/xt_recent/*. .SS rpfilter آزمون فیلتر مسیر معکوس (reverse path filter) را روی بسته انجام می‌دهد. اگر پاسخی به این بسته از همان رابطی ارسال شود که بسته از آن وارد شده است، بسته مطابقت خواهد داشت. توجه داشته باشید که برخلاف rp_filter درون هسته، با بسته‌های محافظت‌شده توسط IPSec رفتار ویژه‌ای نمی‌شود. در صورت نیاز به این قابلیت، این تطابق را با تطابق policy ترکیب کنید. همچنین بسته‌هایی که از طریق رابط loopback دریافت می‌شوند همیشه مجاز هستند. این تطابق فقط در زنجیره PREROUTING از جدول‌های raw یا mangle قابل استفاده است. .TP \fB\-\-loose\fP برای مشخص کردن این به کار می‌رود که آزمون فیلتر مسیر معکوس حتی اگر دستگاه خروجی انتخاب‌شده همان دستگاه مورد انتظار نباشد نیز مطابقت پیدا کند. .TP \fB\-\-validmark\fP هنگام انجام جستجوی مسیر در فیلتر مسیر معکوس، از مقدار nfmark بسته نیز استفاده می‌کند. .TP \fB\-\-accept\-local\fP بسته‌های دریافت‌شده از شبکه را که نشانی مبدا آن‌ها به دستگاه محلی نیز اختصاص دارد، مجاز می‌شمارد. .TP \fB\-\-invert\fP منطق تطابق را معکوس می‌کند؛ به جای تطبیق بسته‌هایی که در آزمون فیلتر مسیر معکوس قبول شده‌اند، بسته‌هایی را تطبیق می‌دهد که در این آزمون رد شده‌اند. .PP مثال برای ثبت در لاگ و انداختن (DROP) بسته‌هایی که در آزمون فیلتر مسیر معکوس رد شده‌اند: .IP iptables \-t raw \-N RPFILTER .IP iptables \-t raw \-A RPFILTER \-m rpfilter \-j RETURN .IP iptables \-t raw \-A RPFILTER \-m limit \-\-limit 10/minute \-j NFLOG \-\-nflog\-prefix "rpfilter drop" .IP iptables \-t raw \-A RPFILTER \-j DROP .IP iptables \-t raw \-A PREROUTING \-j RPFILTER .PP مثال برای انداختن بسته‌های ردشده بدون ثبت در لاگ: .IP iptables \-t raw \-A RPFILTER \-m rpfilter \-\-invert \-j DROP .SS rt (IPv6-specific) تطابق روی هدر مسیریابی IPv6. .TP [\fB!\fP] \fB\-\-rt\-type\fP \fItype\fP تطبیق نوع (عددی). .TP [\fB!\fP] \fB\-\-rt\-segsleft\fP \fInum\fP[\fB:\fP\fInum\fP] تطبیق فیلد «بخش‌های باقیمانده» (`segments left`) (به صورت بازه). .TP [\fB!\fP] \fB\-\-rt\-len\fP \fIlength\fP تطبیق طول این هدر. .TP \fB\-\-rt\-0\-res\fP فیلد رزرو شده را نیز تطبیق می‌دهد (type=0). .TP \fB\-\-rt\-0\-addrs\fP \fIaddr\fP[\fB,\fP\fIaddr\fP...] تطبیق نشانی‌های نوع ۰ (فهرست). .TP \fB\-\-rt\-0\-not\-strict\fP فهرست نشانی‌های نوع ۰ یک فهرست سخت‌گیرانه (strict) نیست. .SS sctp این ماژول هدرهای پروتکل کنترل انتقال جریان (SCTP) را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-source\-port\fP,\fB\-\-sport\fP \fIport\fP[\fB:\fP\fIport\fP] .TP [\fB!\fP] \fB\-\-destination\-port\fP,\fB\-\-dport\fP \fIport\fP[\fB:\fP\fIport\fP] .TP [\fB!\fP] \fB\-\-chunk\-types\fP {\fBall\fP|\fBany\fP|\fBonly\fP} \fIchunktype\fP[\fB:\fP\fIflags\fP] [...] حرف بزرگ برای فلگ نشان‌دهنده تطابق در صورت فعال (set) بودن فلگ است، و حرف کوچک نشان‌دهنده تطابق در صورت غیرفعال (unset) بودن آن است. انواع تطابق: .TP all تطابق در صورتی که تمام انواع قطعات (chunk types) داده‌شده وجود داشته باشند و فلگ‌ها مطابقت کنند. .TP any تطابق در صورتی که هر یک از انواع قطعات داده‌شده با فلگ‌های مربوطه وجود داشته باشد. .TP 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 .nf 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 .fi (حروف کوچک به معنای خاموش بودن فلگ و حروف بزرگ به معنای روشن بودن آن است) .P مثال‌ها: .IP iptables \-A INPUT \-p sctp \-\-dport 80 \-j DROP .IP iptables \-A INPUT \-p sctp \-\-chunk\-types any DATA,INIT \-j DROP .IP iptables \-A INPUT \-p sctp \-\-chunk\-types any DATA:Be \-j ACCEPT .SS set این ماژول مجموعه‌های IP را که توسط .BR ipset (8) تعریف می‌شوند تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-match\-set\fP \fIsetname\fP \fIflag\fP[\fB,\fP\fIflag\fP]... که در آن فلگ‌ها فهرستی جداشده با کاما از مشخصه‌های .BR "src" و/یا .BR "dst" هستند و حداکثر می‌توانند شامل ۶ مورد باشند. بنابراین دستور .IP iptables \-A FORWARD \-m set \-\-match\-set test src,dst .IP بسته‌هایی را تطبیق می‌دهد که (در صورتی که نوع مجموعه ipportmap باشد) جفت نشانی مبدا و درگاه مقصد آن‌ها در مجموعه مشخص‌شده پیدا شود. اگر نوع مجموعه مشخص‌شده تک‌بُعدی باشد (برای نمونه ipmap)، دستور بسته‌هایی را مطابقت می‌دهد که نشانی مبدا آن‌ها در مجموعه مشخص‌شده یافت شود. .TP \fB\-\-return\-nomatch\fP اگر گزینه \fB\-\-return\-nomatch\fP مشخص شده باشد و نوع مجموعه از پرچم \fBnomatch\fP پشتیبانی کند، فرآیند تطبیق معکوس می‌شود: تطابق با عنصری که دارای پرچم \fBnomatch\fP است مقدار \fBtrue\fP بازمی‌گرداند، در حالی که تطابق با یک عنصر معمولی مقدار \fBfalse\fP می‌دهد. .TP \fB!\fP \fB\-\-update\-counters\fP اگر گزینه \fB\-\-update\-counters\fP نقیض شده باشد، شمارنده‌های بسته و بایتِ عنصر منطبق در مجموعه به‌روزرسانی نخواهند شد. به طور پیش‌فرض، شمارنده‌های بسته و بایت به‌روزرسانی می‌شوند. .TP \fB!\fP \fB\-\-update\-subcounters\fP اگر پرچم \fB\-\-update\-subcounters\fP نقیض شده باشد، شمارنده‌های بسته و بایت برای عنصر منطبق در مجموعه عضوِ یک مجموعه از نوع فهرست به‌روزرسانی نمی‌شوند. به طور پیش‌فرض، شمارنده‌های بسته و بایت به‌روزرسانی می‌شوند. .TP [\fB!\fP] \fB\-\-packets\-eq\fP \fIvalue\fP اگر بسته با عنصری در مجموعه تطبیق یابد، تنها در صورتی تطابق برقرار است که شمارنده بسته آن عنصر نیز با مقدار مشخص‌شده برابر باشد. .TP \fB\-\-packets\-lt\fP \fIvalue\fP اگر بسته با عنصری در مجموعه تطبیق یابد، تنها در صورتی تطابق برقرار است که شمارنده بسته آن عنصر کمتر از مقدار مشخص‌شده باشد. .TP \fB\-\-packets\-gt\fP \fIvalue\fP اگر بسته با عنصری در مجموعه تطبیق یابد، تنها در صورتی تطابق برقرار است که شمارنده بسته آن عنصر بزرگ‌تر از مقدار مشخص‌شده باشد. .TP [\fB!\fP] \fB\-\-bytes\-eq\fP \fIvalue\fP اگر بسته با عنصری در مجموعه تطبیق یابد، تنها در صورتی تطابق برقرار است که شمارنده بایت آن عنصر نیز با مقدار مشخص‌شده برابر باشد. .TP \fB\-\-bytes\-lt\fP \fIvalue\fP اگر بسته با عنصری در مجموعه تطبیق یابد، تنها در صورتی تطابق برقرار است که شمارنده بایت آن عنصر کمتر از مقدار مشخص‌شده باشد. .TP \fB\-\-bytes\-gt\fP \fIvalue\fP اگر بسته با عنصری در مجموعه تطبیق یابد، تنها در صورتی تطابق برقرار است که شمارنده بایت آن عنصر بزرگ‌تر از مقدار مشخص‌شده باشد. .PP گزینه‌ها و فلگ‌های مربوط به شمارنده‌های بسته و بایت در صورتی که مجموعه بدون پشتیبانی از شمارنده تعریف شده باشد نادیده گرفته می‌شوند. .PP گزینه \fB\-\-match\-set\fP می‌تواند با \fB\-\-set\fP جایگزین شود، به شرطی که با گزینه‌ای از دیگر افزونه‌ها تداخل نداشته باشد. .PP استفاده از .B \-m set نیازمند پشتیبانی هسته از ipset است که در هسته‌های استاندارد از لینوکس 2.6.39 به بعد ارائه شده است. .SS socket این ماژول در صورتی تطبیق می‌یابد که با جستجوی سوکت برای بسته، یک سوکت باز TCP/UDP یافت شود. اگر یک سوکت شنونده متصل (bound) غیر صفر یا برقرارشده (established) وجود داشته باشد (احتمالاً با یک نشانی غیر محلی)، تطابق صورت می‌گیرد. این جستجو با استفاده از چندتایی (tuple) بسته برای بسته‌های TCP/UDP یا هدر اصلی TCP/UDP جاسازی‌شده (\fBembedded\fP) درون یک بسته خطای ICMP/ICMPv6 انجام می‌شود. .TP \fB\-\-transparent\fP سوکت‌های غیرشفاف (non-transparent) را نادیده می‌گیرد. .TP \fB\-\-nowildcard\fP سوکت‌های متصل به نشانی عمومی ('any' address یا 0.0.0.0) را نادیده نمی‌گیرد. تطابق سوکت به صورت پیش‌فرض شنوندگان متصل به صفر (zero-bound) را نمی‌پذیرد، زیرا در این صورت سرویس‌های محلی می‌توانند ترافیکی را که باید هدایت (forward) می‌شد شنود و رهگیری کنند. از این رو، این گزینه هنگام تطبیق ترافیک در حال هدایت برای تغییر مسیر چنین بسته‌هایی به ماشین محلی از طریق مسیریابی مبتنی بر پالیسی (policy routing)، پیامدهای امنیتی دارد. هنگام استفاده از تطابق سوکت برای پیاده‌سازی پروکسی‌های کاملاً شفاف متصل به نشانی‌های غیرمحلی، توصیه می‌شود به جای آن از گزینه .B \-\-transparent استفاده کنید. .PP مثال (با این فرض که بسته‌های دارای نشان ۱ به صورت محلی تحویل داده می‌شوند): .IP \-t mangle \-A PREROUTING \-m socket \-\-transparent \-j MARK \-\-set\-mark 1 .TP \fB\-\-restore\-skmark\fP نشان بسته را به نشان سوکت منطبق تنظیم می‌کند. می‌تواند با گزینه‌های \fB\-\-transparent\fP و \fB\-\-nowildcard\fP ترکیب شود تا سوکت‌های قابل تطبیق در هنگام بازگردانی نشان بسته محدود شوند. .PP مثال: برنامه‌ای ۲ سوکت شفاف (\fBIP_TRANSPARENT\fP) باز کرده و با استفاده از گزینه سوکت \fBSO_MARK\fP روی آن‌ها نشان می‌گذارد. می‌توانیم بسته‌های منطبق را فیلتر کنیم: .IP \-t mangle \-I PREROUTING \-m socket \-\-transparent \-\-restore\-skmark \-j action .IP \-t mangle \-A action \-m mark \-\-mark 10 \-j action2 .IP \-t mangle \-A action \-m mark \-\-mark 11 \-j action3 .SS state افزونه «state» زیرمجموعه‌ای از ماژول «conntrack» است. «state» امکان دسترسی به وضعیت ردیابی اتصال (connection tracking) را برای این بسته فراهم می‌کند. .TP [\fB!\fP] \fB\-\-state\fP \fIstate\fP که در آن state فهرستی جداشده با کاما از وضعیت‌های اتصال برای تطابق است. تنها زیرمجموعه‌ای از وضعیت‌های شناخته‌شده توسط «conntrack» در اینجا شناسایی می‌شوند: \fBINVALID\fP، \fBESTABLISHED\fP، \fBNEW\fP، \fBRELATED\fP یا \fBUNTRACKED\fP. برای شرح هر یک از آن‌ها، به بخش «conntrack» در همین صفحه راهنما مراجعه کنید. .SS statistic این ماژول بسته‌ها را بر اساس یک شرط آماری تطبیق می‌دهد. از دو حالت مجزا پشتیبانی می‌کند که با گزینه \fB\-\-mode\fP تعیین می‌شوند. .PP گزینه‌های پشتیبانی‌شده: .TP \fB\-\-mode\fP \fImode\fP حالت تطبیق قاعده را تعیین می‌کند؛ حالت‌های پشتیبانی‌شده عبارتند از .B random و .BR nth . .TP [\fB!\fP] \fB\-\-probability\fP \fIp\fP احتمال تطابق تصادفی یک بسته را تعیین می‌کند. این گزینه فقط در حالت \fBrandom\fP کار می‌کند. مقدار \fIp\fP باید بین 0.0 و 1.0 باشد. تفکیک‌پذیری پشتیبانی‌شده در گام‌های 1/2147483648 است. .TP [\fB!\fP] \fB\-\-every\fP \fIn\fP از هر n بسته، یک بسته را تطبیق می‌دهد. این گزینه تنها در حالت .B nth کار می‌کند (همچنین به گزینه \fB\-\-packet\fP نگاه کنید). .TP \fB\-\-packet\fP \fIp\fP مقدار اولیه شمارنده (0 <= p <= n\-1، پیش‌فرض 0) را برای حالت .B nth تنظیم می‌کند. .SS string این ماژول با استفاده از یک راهبرد انطباق الگو، رشته داده‌شده را مطابقت می‌دهد. این ماژول به هسته لینوکس نسخه 2.6.14 یا بالاتر نیاز دارد. .TP \fB\-\-algo\fP {\fBbm\fP|\fBkmp\fP} راهبرد انطباق الگو را انتخاب می‌کند. (bm = Boyer-Moore و kmp = Knuth-Pratt-Morris) .TP \fB\-\-from\fP \fIoffset\fP آفستی (مبدا جابجایی) را که جستجو برای انطباق از آنجا آغاز می‌شود تعیین می‌کند. در صورت عدم تعیین، مقدار پیش‌فرض ۰ است. .TP \fB\-\-to\fP \fIoffset\fP آفستی را که بررسی باید تا آن انجام شود تعیین می‌کند؛ به این معنا که بایت \fIoffset\fP (شمارش‌شده از ۰) آخرین بایتی است که اسکن می‌شود و بیشترین موقعیت آخرین نویسه \fIpattern\fP خواهد بود. در صورت عدم تعیین، پیش‌فرض اندازه کل بسته است. .TP [\fB!\fP] \fB\-\-string\fP \fIpattern\fP الگوی داده‌شده را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-hex\-string\fP \fIpattern\fP الگوی داده‌شده را در قالب نمادگذاری هگزادسیمال (hex) تطبیق می‌دهد. .TP \fB\-\-icase\fP نادیده گرفتن بزرگی و کوچکی حروف هنگام جستجو. .TP مثال‌ها: .IP # الگوی رشته‌ای می‌تواند برای نویسه‌های متنی ساده استفاده شود. .br iptables \-A INPUT \-p tcp \-\-dport 80 \-m string \-\-algo bm \-\-string 'GET /index.html' \-j LOG .IP # الگوی رشته‌ای هگز می‌تواند برای نویسه‌های غیرقابل‌چاپ استفاده شود، مانند |0D 0A| یا |0D0A|. .br iptables \-p udp \-\-dport 53 \-m string \-\-algo bm \-\-from 40 \-\-to 57 \-\-hex\-string '|03|www|09|netfilter|03|org|00|' .P نکته: از آنجا که الگوریتم بایر\-مور (BM) جستجوی انطباق‌ها را از راست به چپ انجام می‌دهد و هسته ممکن است یک بسته را در چندین بلوک ناپیوسته ذخیره کند، این احتمال وجود دارد که یک مورد منطبق در چندین بلوک پراکنده شده باشد؛ در چنین حالتی این الگوریتم قادر به یافتن آن نخواهد بود. .P اگر می‌خواهید مطمئن شوید که چنین اتفاقی هرگز رخ نمی‌دهد، به جای آن از الگوریتم کنوت\-پرات\-موریس (KMP) استفاده کنید. در نتیجه، الگوریتم جستجوی رشته مناسب را بسته به مورد کاربرد خود انتخاب نمایید. .P برای نمونه، اگر از این ماژول برای فیلترسازی، سیستم تشخیص نفوذ مبتنی بر شبکه (NIDS) یا هر هدف امنیتی مشابه دیگر استفاده می‌کنید، الگوریتم KMP را انتخاب کنید. از سوی دیگر، اگر کارایی و عملکرد برای شما اولویت اصلی است \(em برای مثال در حال دسته‌بندی بسته‌ها برای اعمال سیاست‌های کیفیت خدمات (QoS) هستید \(em و نادیده گرفته شدن انطباق‌های احتمالی پراکنده در چندین قطعه برایتان اهمیتی ندارد، BM را انتخاب کنید. .SS tcp این افزونه‌ها در صورت مشخص شدن .B \-\-protocol tcp قابل استفاده هستند و گزینه‌های زیر را فراهم می‌کنند: .TP [\fB!\fP] \fB\-\-source\-port\fP,\fB\-\-sport\fP \fIport\fP[\fB:\fP\fIport\fP] مشخص کردن درگاه (پورت) یا بازه‌ای از پورت‌های مبدا. این مقدار می‌تواند نام یک سرویس یا شماره پورت باشد. همچنین می‌توان یک بازه فراگیر (شامل ابتدا و انتها) را با قالب \fIfirst\fP\fB:\fP\fIlast\fP مشخص کرد. اگر پورت اول ذکر نشود، مقدار «0» و اگر پورت آخر ذکر نشود، مقدار «65535» در نظر گرفته می‌شود. فلگ .B \-\-sport یک نام مستعار راحت برای این گزینه است. .TP [\fB!\fP] \fB\-\-destination\-port\fP,\fB\-\-dport\fP \fIport\fP[\fB:\fP\fIport\fP] مشخص کردن درگاه (پورت) یا بازه‌ای از پورت‌های مقصد. فلگ .B \-\-dport یک نام مستعار راحت برای این گزینه است. .TP [\fB!\fP] \fB\-\-tcp\-flags\fP \fImask\fP \fIcomp\fP تطبیق در صورتی که فلگ‌های TCP مطابق موارد مشخص‌شده باشند. آرگومان نخست \fImask\fP فلگ‌هایی است که باید بررسی شوند (به‌صورت فهرستی که با کاما جدا شده‌اند)، و آرگومان دوم \fIcomp\fP فهرستی از فلگ‌ها است که حتماً باید تنظیم (set) شده باشند. این فلگ‌ها عبارتند از: .BR "SYN ACK FIN RST URG PSH ALL NONE" . بنابراین دستور .nf iptables \-A FORWARD \-p tcp \-\-tcp\-flags SYN,ACK,FIN,RST SYN .fi تنها با بسته‌هایی تطبیق می‌یابد که فلگ SYN در آن‌ها تنظیم شده و فلگ‌های ACK، FIN و RST تنظیم نشده باشند. .TP [\fB!\fP] \fB\-\-syn\fP تنها با بسته‌های TCP تطبیق می‌یابد که بیت SYN آن‌ها تنظیم شده و بیت‌های ACK، RST و FIN پاک (صفر) باشند. چنین بسته‌هایی برای درخواست برقراری اتصال TCP استفاده می‌شوند؛ برای نمونه، مسدود کردن این بسته‌ها در یک رابط ورودی از اتصالات ورودی TCP جلوگیری می‌کند، اما بر اتصالات خروجی TCP اثری نخواهد داشت. این گزینه معادل \fB\-\-tcp\-flags SYN,RST,ACK,FIN SYN\fP است. اگر فلگ «!» پیش از .B \-\-syn قرار گیرد، مفهوم گزینه معکوس می‌شود. .TP [\fB!\fP] \fB\-\-tcp\-option\fP \fInumber\fP تطبیق در صورتی که گزینه (option) پروتکل TCP تنظیم شده باشد. .SS tcpmss این افزونه فیلد TCP MSS (بزرگ‌ترین اندازه سگمنت) در هدر TCP را تطبیق می‌دهد. از این گزینه تنها می‌توانید روی بسته‌های TCP SYN یا SYN/ACK استفاده کنید، چرا که MSS تنها در طول دست‌تکانی (handshake) پروتکل TCP در زمان آغاز اتصال مذاکره می‌شود. .TP [\fB!\fP] \fB\-\-mss\fP \fIvalue\fP[\fB:\fP\fIvalue\fP] تطبیق با مقدار یا بازه مشخصی از TCP MSS. در صورت مشخص کردن یک بازه، \fIvalue\fP دوم باید بزرگ‌تر یا مساوی با \fIvalue\fP اول باشد. .SS time این افزونه در صورتی تطبیق می‌یابد که زمان/تاریخ رسیدن بسته در یک بازه مشخص قرار داشته باشد. تمامی گزینه‌ها اختیاری هستند، اما در صورت مشخص شدن با عملگر منطقی AND با یکدیگر ترکیب می‌شوند. همه زمان‌ها به‌طور پیش‌فرض بر مبنای UTC تفسیر می‌شوند. .TP \fB\-\-datestart\fP \fIYYYY\fP[\fB\-\fP\fIMM\fP[\fB\-\fP\fIDD\fP[\fBT\fP\fIhh\fP[\fB:\fP\fImm\fP[\fB:\fP\fIss\fP]]]]] .TP \fB\-\-datestop\fP \fIYYYY\fP[\fB\-\fP\fIMM\fP[\fB\-\fP\fIDD\fP[\fBT\fP\fIhh\fP[\fB:\fP\fImm\fP[\fB:\fP\fIss\fP]]]]] تنها در بازه زمانی داده‌شده تطبیق می‌یابد، که باید بر اساس قالب "T" استاندارد ISO 8601 باشد. بازه زمانی مجاز از 1970-01-01T00:00:00 تا 2038-01-19T04:17:07 است. .IP اگر .B \-\-datestart یا .B \-\-datestop مشخص نشوند، به ترتیب مقادیر پیش‌فرض 1970-01-01 و 2038-01-19 در نظر گرفته خواهند شد. .TP \fB\-\-timestart\fP \fIhh\fP\fB:\fP\fImm\fP[\fB:\fP\fIss\fP] .TP \fB\-\-timestop\fP \fIhh\fP\fB:\fP\fImm\fP[\fB:\fP\fIss\fP] تنها در طول ساعات مشخص‌شده از روز تطبیق می‌یابد. بازه زمانی ممکن 00:00:00 تا 23:59:59 است. صفرهای ابتدایی مجاز هستند (مانند "06:03") و به درستی در مبنای ۱۰ تفسیر می‌شوند. .TP [\fB!\fP] \fB\-\-monthdays\fP \fIday\fP[\fB,\fP\fIday\fP...] تنها در روزهای مشخص‌شده از ماه تطبیق می‌یابد. مقادیر ممکن از \fB1\fP تا \fB31\fP هستند. توجه داشته باشید که مشخص کردن \fB31\fP بدیهی است که در ماه‌هایی که روز سی‌ویکم ندارند تطبیق داده نخواهد شد؛ همین امر برای ماه فوریه ۲۸ یا ۲۹ روزه نیز صادق است. .TP [\fB!\fP] \fB\-\-weekdays\fP \fIday\fP[\fB,\fP\fIday\fP...] تنها در روزهای مشخص‌شده از هفته تطبیق می‌یابد. مقادیر ممکن عبارتند از: \fBMon\fP، \fBTue\fP، \fBWed\fP، \fBThu\fP، \fBFri\fP، \fBSat\fP، \fBSun\fP یا به ترتیب مقادیر عددی از \fB1\fP تا \fB7\fP. همچنین می‌توانید از حالت‌های دو حرفی (\fBMo\fP، \fBTu\fP و غیره) استفاده کنید. .TP \fB\-\-contiguous\fP زمانی که مقدار \fB\-\-timestop\fP کوچک‌تر از مقدار \fB\-\-timestart\fP باشد، این بازه را به جای فواصل زمانی جداگانه، به عنوان یک دوره زمانی پیوسته در نظر می‌گیرد. بخش مثال‌ها (EXAMPLES) را ببینید. .TP \fB\-\-kerneltz\fP استفاده از منطقه زمانی هسته (kernel timezone) به جای UTC برای تعیین اینکه آیا بسته مطابق با قوانین زمانی است یا خیر. .PP درباره مناطق زمانی هسته: لینوکس زمان سیستم را همواره بر مبنای UTC نگه می‌دارد. در هنگام بوت، زمان سیستم از یک منبع مرجع زمانی مقداردهی اولیه می‌شود. در صورتی که این منبع فاقد اطلاعات منطقه زمانی باشد (مانند ساعت سخت‌افزاری CMOS RTC در معماری x86)، زمان بر مبنای UTC در نظر گرفته می‌شود. اما اگر منبع زمانی بر مبنای UTC نباشد، فضای کاربری (userspace) باید پس از دسترسی به اطلاعات، زمان دقیق سیستم و منطقه زمانی را در اختیار هسته قرار دهد. .PP زمان محلی (Local time) قابلیتی بر فراز زمان سیستم (که مستقل از منطقه زمانی است) به شمار می‌رود. هر فرآیند درک خاص خود را از زمان محلی دارد که از طریق متغیر محیطی TZ تعیین می‌شود. هسته نیز متغیر آفست منطقه زمانی خاص خود را دارد. متغیر محیطی TZ در فضای کاربری تعیین می‌کند که زمان سیستم مبتنی بر UTC چگونه نمایش داده شود، برای نمونه هنگام اجرای date(1) یا آنچه روی ساعت میزکار می‌بینید. رشته TZ ممکن است در تاریخ‌های مختلف به آفست‌های متفاوتی ترجمه شود، که این امر امکان تغییر خودکار ساعت در فضای کاربری را با آغاز یا پایان ساعت تابستانی (DST) فراهم می‌کند. متغیر آفست منطقه زمانی هسته زمانی به کار می‌رود که نیاز به تبدیل داده‌ها میان منابع غیر UTC (مانند فایل‌سیستم‌های FAT) و UTC (که مابقی بخش‌های سیستم از آن استفاده می‌کنند) باشد. .PP نکته مهم در رابطه با منطقه زمانی هسته این است که توزیع‌های لینوکس ممکن است از تنظیم منطقه زمانی هسته صرف‌نظر کرده و تنها زمان سیستم را تنظیم کنند. حتی اگر یک توزیع خاص در هنگام بوت منطقه زمانی را تنظیم کند، معمولاً آفست منطقه زمانی هسته را که در زمان تغییر ساعت تابستانی تغییر می‌کند به‌روز نگه نمی‌دارد. سرویس ntpd نیز منطقه زمانی هسته را دستکاری نمی‌کند، بنابراین اجرای آن این مشکل را حل نخواهد کرد. در نتیجه ممکن است با یک منطقه زمانی مواجه شوید که همیشه ‎+0000 است، یا در نیمی از سال اشتباه کار می‌کند. بنابراین، .B استفاده از \-\-kerneltz به هیچ‌وجه توصیه نمی‌شود. .PP مثال‌ها (EXAMPLES): برای تطبیق در روزهای آخر هفته: .IP \-m time \-\-weekdays Sa,Su .PP یا برای تطبیق (یکباره) در یک دوره تعطیلات ملی: .IP \-m time \-\-datestart 2007\-12\-24 \-\-datestop 2007\-12\-27 .PP از آنجا که زمان پایان فراگیر (inclusive) است، برای اینکه ثانیه اول روز بعد را شامل نشود، به زمان پایانی مانند زیر نیاز خواهید داشت: .IP \-m time \-\-datestart 2007\-01\-01T17:00 \-\-datestop 2007\-01\-01T23:59:59 .PP در طول ساعت ناهار: .IP \-m time \-\-timestart 12:30 \-\-timestop 13:30 .PP چهارمین جمعه ماه: .IP \-m time \-\-weekdays Fr \-\-monthdays 22,23,24,25,26,27,28 .PP (توجه داشته باشید که این دستور از یک ویژگی خاص ریاضی استفاده می‌کند. گفتن «چهارمین پنج‌شنبه یا چهارمین جمعه» در قالب یک قاعده ممکن نیست، اگرچه با چندین قاعده امکان‌پذیر است.) .PP تطبیق در طول چند روز متوالی ممکن است مطابق انتظار عمل نکند. برای مثال: .IP \-m time \-\-weekdays Mo \-\-timestart 23:00 \-\-timestop 01:00 .PP این دستور در روز دوشنبه به مدت یک ساعت از نیمه‌شب تا ۱ بامداد، و سپس دوباره به مدت یک ساعت دیگر از ۲۳:۰۰ به بعد تطبیق خواهد یافت. اگر این رفتار مورد نظر نیست (مثلاً اگر می‌خواهید «به مدت دو ساعت از ساعت ۲۳:۰۰ روز دوشنبه به بعد» تطبیق داده شود)، باید در مثال بالا گزینه .B \-\-contiguous را نیز مشخص کنید. .SS tos این ماژول فیلد ۸ بیتی Type of Service (نوع سرویس) در هدر IPv4 (یعنی شامل بیت‌های "Precedence") یا فیلد اولویت (Priority - که آن هم ۸ بیتی است) در هدر IPv6 را تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-tos\fP \fIvalue\fP[\fB/\fP\fImask\fP] تطبیق بسته‌ها با مقدار نشانه (mark) داده‌شده برای TOS. در صورت مشخص شدن ماسک (mask)، پیش از مقایسه، با نشانه TOS به‌صورت منطقی AND می‌شود. .TP [\fB!\fP] \fB\-\-tos\fP \fIsymbol\fP هنگام استفاده از تطبیق tos در IPv4 می‌توانید یک نام نمادین (سیمبولیک) مشخص کنید. فهرست نام‌های شناخته‌شده TOS را می‌توان با فراخوانی iptables با \fB\-m tos \-h\fP به دست آورد. توجه داشته باشید که این گزینه مستلزم ماسک 0x3F است (یعنی تمامی بیت‌ها به جز بیت‌های ECN). .SS ttl (IPv4-specific) این ماژول فیلد TTL (طول عمر یا Time To Live) را در هدر IP تطبیق می‌دهد. .TP [\fB!\fP] \fB\-\-ttl\-eq\fP \fIttl\fP تطبیق با مقدار داده‌شده برای TTL. .TP \fB\-\-ttl\-gt\fP \fIttl\fP تطبیق در صورتی که TTL بزرگ‌تر از مقدار داده‌شده باشد. .TP \fB\-\-ttl\-lt\fP \fIttl\fP تطبیق در صورتی که TTL کمتر از مقدار داده‌شده باشد. .SS u32 افزونه U32 بررسی می‌کند که آیا مقادیر تا سقف ۴ بایت استخراج‌شده از یک بسته، دارای مقادیر مشخص‌شده هستند یا خیر. قواعد تعیین آنچه باید استخراج شود به اندازه کافی کلی است که بتوان داده‌ها را در آفست‌های مشخصی از هدرهای TCP یا بدنه داده‌ها (payload) پیدا کرد. .TP [\fB!\fP] \fB\-\-u32\fP \fItests\fP آرگومان این گزینه معادل برنامه‌ای در یک زبان کوچک است که در زیر شرح داده شده است. .IP tests := location "=" value | tests "&&" location "=" value .IP value := range | value "," range .IP range := number | number ":" number .PP یک عدد منفرد \fIn\fP به همان صورت \fIn:n\fP تفسیر می‌شود. \fIn:m\fP نیز به عنوان بازه عددی \fB>=n\fP و \fB<=m\fP تفسیر می‌گردد. .IP "" 4 location := number | location operator number .IP "" 4 operator := "&" | "<<" | ">>" | "@" .PP عملگرهای \fB&\fP، \fB<<\fP، \fB>>\fP و \fB&&\fP همانند زبان C عمل می‌کنند. عملگر \fB=\fP در واقع عملگر عضویت در مجموعه است و نحو (syntax) مقدار، یک مجموعه را توصیف می‌کند. عملگر \fB@\fP امکان حرکت به هدر بعدی را فراهم می‌سازد و در ادامه بیشتر توضیح داده شده است. .PP در حال حاضر برخی محدودیت‌های پیاده‌سازی روی اندازه آزمون‌ها (tests) وجود دارد: .IP " *" حداکثر ۱۰ مورد «\fB=\fP» (و ۹ مورد «\fB&&\fP») در آرگومان u32 .IP " *" حداکثر ۱۰ بازه (و ۹ کاما) به ازای هر مقدار (value) .IP " *" حداکثر ۱۰ عدد (و ۹ عملگر) به ازای هر مکان (location) .PP برای توصیف مفهوم مکان (location)، ماشینی فرضی را در نظر بگیرید که آن را تفسیر می‌کند. این ماشین سه ثبات (رجیستر) دارد: .IP ثبات A از نوع \fBchar *\fP است و در ابتدا نشانی هدر IP را نگه می‌دارد .IP ثبات‌های B و C اعداد صحیح ۳۲ بیتی بدون علامت هستند و در ابتدا صفر هستند .PP دستورالعمل‌ها عبارتند از: .TP .B number B = number; .IP C = (*(A+B)<<24) + (*(A+B+1)<<16) + (*(A+B+2)<<8) + *(A+B+3) .TP .B &number C = C & number .TP .B << number C = C << number .TP .B >> number C = C >> number .TP .B @number A = A + C; then do the instruction number .PP هرگونه دسترسی به حافظه خارج از محدوده [skb\->data,skb\->end] موجب عدم تطبیق (fail) می‌شود. در غیر این صورت، نتیجه محاسبات مقدار نهایی رجیستر C خواهد بود. .PP استفاده از فاصله‌های خالی (whitespace) در آزمون‌ها مجاز است اما اجباری نیست. با این حال، کاراکترهایی که در آنجا به کار می‌روند معمولاً نیاز به نقل‌قول شل (quoting) دارند، بنابراین بهتر است آرگومان‌ها داخل علامت‌های نقل‌قول (کوتیشن) قرار گیرند. .PP مثال: .IP تطبیق بسته‌های IP با طول کل >= 256 .IP هدر IP شامل یک فیلد طول کل در بایت‌های ۲ تا ۳ است (bytes 2\(en3). .IP \-\-u32 "\fB0 & 0xFFFF = 0x100:0xFFFF\fP" .IP بایت‌های ۰ تا ۳ (bytes 0\(en3) را بخوان .IP آن را با 0xFFFF منطقی AND کن (که بایت‌های ۲ تا ۳ را به دست می‌دهد)، و بررسی کن که آیا در بازه [0x100:0xFFFF] قرار دارد یا خیر .PP مثال: (واقع‌گرایانه‌تر، بنابراین پیچیده‌تر) .IP تطبیق بسته‌های ICMP با نوع icmp برابر با 0 .IP ابتدا بررسی کن که آیا بسته یک بسته ICMP است، که شرط آن بایت ۹ (پروتکل) = ۱ است .IP \-\-u32 "\fB6 & 0xFF = 1 &&\fP ... .IP بایت‌های ۶ تا ۹ را بخوان، از \fB&\fP برای دور انداختن بایت‌های ۶ تا ۸ استفاده کن و نتیجه را با ۱ مقایسه کن. سپس بررسی کن که بسته قطعه‌قطعه (fragment) نباشد. (اگر چنین باشد، ممکن است بخشی از یک بسته باشد اما ما همیشه نمی‌توانیم تشخیص دهیم.) توجه: اگر می‌خواهید هر چیزی فراتر از هدر IP را تطبیق دهید، عموماً به این بررسی نیاز خواهید داشت. ۶ بیت آخر بایت ۶ و تمام بایت ۷ برابر با ۰ هستند اگر و تنها اگر این یک بسته کامل باشد (نه یک فرگمنت). در غیر این صورت، می‌توانید فقط با بررسی ۵ بیت آخر بایت ۶، فرگمنت‌های اول را مجاز کنید. .IP ... \fB4 & 0x3FFF = 0 &&\fP ... .IP آزمون پایانی: نخستین بایت پس از هدر IP (همان type) برابر با ۰ باشد. اینجاست که باید از نحو @ استفاده کنیم. طول هدر IP (بر حسب IHL در کلمات ۳۲ بیتی) در نیمه راست بایت ۰ خود هدر IP ذخیره شده است. .IP ... \fB0 >> 22 & 0x3C @ 0 >> 24 = 0\fP" .IP عدد ۰ نخست به معنای خواندن بایت‌های ۰ تا ۳ است، \fB>>22\fP یعنی آن را ۲۲ بیت به راست شیفت بده. شیفت دادن ۲۴ بیت نخستین بایت را می‌داد، بنابراین ۲۲ بیت چهار برابر آن به علاوه چند بیت بیشتر است. سپس \fB&3C\fP دو بیت اضافی در سمت راست و چهار بیت نخستِ بایت اول را حذف می‌کند. برای نمونه، اگر IHL=5 باشد، طول هدر IP برابر ۲۰ بایت (۴ × ۵) است. در این حالت بایت‌های ۰ تا ۱ (در باینری) xxxx0101 yyzzzzzz هستند، \fB>>22\fP مقدار ۱۰ بیتی xxxx0101yy را می‌دهد و \fB&3C\fP مقدار 010100 را نتیجه می‌دهد. علامت \fB@\fP به معنای استفاده از این عدد به عنوان آفست جدید درون بسته است و خواندن چهار بایت از آنجا را آغاز می‌کند. این ۴ بایت نخست بدنه (payload) بسته ICMP است که بایت ۰ آن نوع ICMP (همان ICMP type) است. بنابراین، ما مقدار را ۲۴ بیت به راست شیفت می‌دهیم تا همه چیز به جز بایت نخست حذف شود و نتیجه را با ۰ مقایسه می‌کنیم. .PP مثال: .IP بایت‌های ۸ تا ۱۲ از بدنه TCP (یعنی TCP payload) یکی از مقادیر ۱، ۲، ۵ یا ۸ باشد .IP ابتدا بررسی می‌کنیم که بسته یک بسته TCP باشد (مشابه ICMP). .IP \-\-u32 "\fB6 & 0xFF = 6 &&\fP ... .IP سپس بررسی می‌کنیم که قطعه‌قطعه (fragment) نباشد (مشابه بالا). .IP ... \fB0 >> 22 & 0x3C @ 12 >> 26 & 0x3C @ 8 = 1,2,5,8\fP" .IP عبارت \fB0>>22&3C\fP همانند بالا تعداد بایت‌های هدر IP را محاسبه می‌کند. عملگر \fB@\fP این مقدار را به آفست جدید درون بسته تبدیل می‌کند که ابتدای هدر TCP است. طول هدر TCP (باز هم در کلمات ۳۲ بیتی) نیمه سمت چپ بایت ۱۲ هدر TCP است. عبارت \fB12>>26&3C\fP این طول را بر حسب بایت محاسبه می‌کند (مشابه هدر IP در مرحله پیش). عملگر "@" این مقدار را به آفست جدید تبدیل می‌کند که آغاز بدنه TCP است. در نهایت، 8 بایت‌های ۸ تا ۱۲ بدنه را می‌خواند و \fB=\fP بررسی می‌کند که آیا نتیجه یکی از اعداد ۱، ۲، ۵ یا ۸ است یا خیر. .SS udp این افزونه‌ها در صورت مشخص شدن .B \-\-protocol udp قابل استفاده هستند و گزینه‌های زیر را فراهم می‌کنند: .TP [\fB!\fP] \fB\-\-source\-port\fP,\fB\-\-sport\fP \fIport\fP[\fB:\fP\fIport\fP] مشخص کردن درگاه (پورت) یا بازه‌ای از پورت‌های مبدا. برای جزئیات بیشتر به توضیحات گزینه .B \-\-source\-port در افزونه TCP مراجعه کنید. .TP [\fB!\fP] \fB\-\-destination\-port\fP,\fB\-\-dport\fP \fIport\fP[\fB:\fP\fIport\fP] مشخص کردن درگاه (پورت) یا بازه‌ای از پورت‌های مقصد. برای جزئیات بیشتر به توضیحات گزینه .B \-\-destination\-port در افزونه TCP مراجعه کنید. .SH "افزونههای هدف (TARGET EXTENSIONS)" دستور .B iptables می‌تواند از ماژول‌های هدف گسترش‌یافته استفاده کند؛ موارد زیر در توزیع استاندارد گنجانده شده‌اند. .\" @TARGET@ .SS AUDIT این هدف برای بسته‌هایی که با این هدف مطابقت پیدا می‌کنند، رکوردهای حسابرسی (audit) ایجاد می‌کند. از آن می‌توان برای ثبت بسته‌های پذیرفته‌شده (accepted)، دور ریخته‌شده (dropped) و رد شده (rejected) استفاده کرد. برای جزئیات بیشتر به .BR auditd (8) مراجعه کنید. .TP \fB\-\-type\fP {\fBaccept\fP|\fBdrop\fP|\fBreject\fP} نوع رکورد حسابرسی را تعیین می‌کند. از لینوکس ۴.۱۲ به بعد، این گزینه دیگر تأثیری بر پیام‌های حسابرسی ایجادشده ندارد. همچنان برای حفظ سازگاری توسط .B iptables پذیرفته می‌شود، اما نادیده گرفته خواهد شد. .PP مثال: .IP iptables \-N AUDIT_DROP .IP iptables \-A AUDIT_DROP \-j AUDIT .IP iptables \-A AUDIT_DROP \-j DROP .SS CHECKSUM این هدف به‌صورت انتخابی برای رفع مشکل برنامه‌های قدیمی یا معیوب به کار می‌رود. تنها در جدول .B mangle قابل استفاده است. .TP \fB\-\-checksum\-fill\fP چک‌سام را در بسته‌ای که فاقد چک‌سام است محاسبه و درج می‌کند. این مورد به‌ویژه زمانی مفید است که بخواهید مشکل برنامه‌های کاربردی قدیمی مانند کلاینت‌های DHCP را که با باراندازی چک‌سام (checksum offloads) به‌درستی کار نمی‌کنند دور بزنید، اما نخواهید تخلیه بار چک‌سام را در دستگاه خود غیرفعال کنید. .SS CLASSIFY این ماژول به شما اجازه می‌دهد مقدار .B skb\->priority را تنظیم کنید (و در نتیجه بسته را در یک کلاس خاص CBQ طبقه‌بندی نمایید). .TP \fB\-\-set\-class\fP \fImajor\fP\fB:\fP\fIminor\fP مقدار کلاس اصلی (major) و فرعی (minor) را تنظیم می‌کند. مقادیر همیشه به‌صورت هگزادسیمال (شانزده‌شانزدهی) تفسیر می‌شوند، حتی اگر پیشوند 0x مشخص نشده باشد. .SS CLUSTERIP (IPv4-specific) این ماژول امکان پیکربندی یک کلاستر ساده از گره‌ها را فراهم می‌کند که یک آدرس IP و MAC مشخص را بدون نیاز به یک توازن‌بخش بار (load balancer) صریح در برابر آن‌ها به اشتراک می‌گذارند. اتصالات به‌صورت ایستا میان گره‌های این کلاستر توزیع می‌شوند. .PP لطفاً توجه داشته باشید که هدف CLUSTERIP منسوخ در نظر گرفته شده و استفاده از تطبیق cluster که انعطاف‌پذیرتر بوده و محدود به IPv4 نیست توصیه می‌شود. .TP \fB\-\-new\fP یک ClusterIP جدید ایجاد می‌کند. این گزینه را همیشه باید روی اولین قاعده برای یک ClusterIP مشخص تنظیم کنید. .TP \fB\-\-hashmode\fP \fImode\fP حالت درهم‌سازی (hashing) را مشخص می‌کند. باید یکی از موارد \fBsourceip\fP، \fBsourceip\-sourceport\fP، یا \fBsourceip\-sourceport\-destport\fP باشد. .TP \fB\-\-clustermac\fP \fImac\fP آدرس MAC مربوط به ClusterIP را مشخص می‌کند. باید یک آدرس چندپخشی لایه پیوند (link\-layer multicast) باشد. .TP \fB\-\-total\-nodes\fP \fInum\fP تعداد کل گره‌های درون این کلاستر. .TP \fB\-\-local\-node\fP \fInum\fP شماره گره محلی درون این کلاستر. .TP \fB\-\-hash\-init\fP \fIrnd\fP مقدار تصادفی (seed) اولیه مورد استفاده برای مقداردهی اولیه درهم‌سازی را تعیین می‌کند. .SS CONNMARK این ماژول مقدار نشان (mark) نت‌فیلتر مرتبط با یک اتصال را تنظیم می‌کند. عرض این نشان ۳۲ بیت است. .TP \fB\-\-set\-xmark\fP \fIvalue\fP[\fB/\fP\fImask\fP] بیت‌های مشخص‌شده توسط \fImask\fP را صفر می‌کند و \fIvalue\fP را با ctmark عملیات XOR می‌نماید. .TP \fB\-\-save\-mark\fP [\fB\-\-nfmask\fP \fInfmask\fP] [\fB\-\-ctmask\fP \fIctmask\fP] با استفاده از ماسک‌های داده‌شده، نشان بسته (nfmark) را در نشان اتصال (ctmark) کپی می‌کند. مقدار جدید ctmark به این صورت تعیین می‌شود: .IP ctmark = (ctmark & \(tictmask) \(ha (nfmark & nfmask) .IP یعنی \fIctmask\fP مشخص می‌کند چه بیت‌هایی پاک شوند و \fInfmask\fP تعیین می‌کند چه بیت‌هایی از nfmark با ctmark عمل XOR شوند. مقادیر پیش‌فرض \fIctmask\fP و \fInfmask\fP برابر با 0xFFFFFFFF است. .TP \fB\-\-restore\-mark\fP [\fB\-\-nfmask\fP \fInfmask\fP] [\fB\-\-ctmask\fP \fIctmask\fP] با استفاده از ماسک‌های مشخص‌شده، نشان اتصال (ctmark) را در نشان بسته (nfmark) کپی می‌کند. مقدار جدید nfmark به این صورت تعیین می‌شود: .IP nfmark = (nfmark & \(ti\fInfmask\fP) \(ha (ctmark & \fIctmask\fP); .IP یعنی \fInfmask\fP مشخص می‌کند چه بیت‌هایی پاک شوند و \fIctmask\fP تعیین می‌کند چه بیت‌هایی از ctmark با nfmark عمل XOR شوند. مقادیر پیش‌فرض \fIctmask\fP و \fInfmask\fP برابر با 0xFFFFFFFF است. .IP گزینه .B \-\-restore\-mark تنها در جدول .B mangle معتبر است. .PP یادافزاهای (mnemonics) زیر برای .B \-\-set\-xmark در دسترس هستند: .TP \fB\-\-and\-mark\fP \fIbits\fP عمل AND بیتی بین ctmark و \fIbits\fP انجام می‌دهد. (یادافزایی برای \fB\-\-set\-xmark 0/\fP\fIinvbits\fP که در آن \fIinvbits\fP نقیض دودویی \fIbits\fP است.) .TP \fB\-\-or\-mark\fP \fIbits\fP عمل OR بیتی بین ctmark و \fIbits\fP انجام می‌دهد. (یادافزایی برای \fB\-\-set\-xmark\fP \fIbits\fP\fB/\fP\fIbits\fP.) .TP \fB\-\-xor\-mark\fP \fIbits\fP عمل XOR بیتی بین ctmark و \fIbits\fP انجام می‌دهد. (یادافزایی برای \fB\-\-set\-xmark\fP \fIbits\fP\fB/0\fP.) .TP \fB\-\-set\-mark\fP \fIvalue\fP[\fB/\fP\fImask\fP] نشان اتصال را تنظیم می‌کند. اگر ماسکی مشخص شده باشد، تنها آن بیت‌هایی که در ماسک تنظیم شده‌اند تغییر می‌یابند. .TP \fB\-\-save\-mark\fP [\fB\-\-mask\fP \fImask\fP] نشان nfmark را در ctmark کپی می‌کند. اگر ماسکی مشخص شده باشد، تنها آن بیت‌ها کپی می‌شوند. .TP \fB\-\-restore\-mark\fP [\fB\-\-mask\fP \fImask\fP] نشان ctmark را در nfmark کپی می‌کند. اگر ماسکی مشخص شده باشد، تنها آن بیت‌ها کپی می‌شوند. این گزینه تنها در جدول .B mangle معتبر است. .SS CONNSECMARK این ماژول نشانه‌های امنیتی را از بسته‌ها به اتصالات (در صورت بدون برچسب بودن) و از اتصالات مجدداً به بسته‌ها (باز هم تنها در صورت بدون برچسب بودن) کپی می‌کند. معمولاً در ترکیب با SECMARK استفاده می‌شود و در جدول .B security معتبر است (برای سازگاری رو به عقب با کرنل‌های قدیمی‌تر، در جدول .B mangle نیز معتبر است). .TP \fB\-\-save\fP اگر بسته دارای نشانه امنیتی باشد و اتصال نشانه‌گذاری نشده باشد، آن را در اتصال کپی می‌کند. .TP \fB\-\-restore\fP اگر بسته فاقد نشانه امنیتی باشد ولی اتصال دارای آن باشد، نشانه امنیتی را از اتصال به بسته کپی می‌کند. .SS CT هدف CT پارامترهایی را برای یک بسته یا اتصال مرتبط با آن تعیین می‌کند. این هدف یک ورودی رهگیری اتصال «الگو» (template) را به بسته الصاق می‌کند که سپس هنگام مقداردهی اولیه یک ورودی جدید ct توسط هسته conntrack به کار می‌رود. بنابراین این هدف تنها در جدول «raw» معتبر است. .TP \fB\-\-notrack\fP رهگیری اتصال را برای این بسته غیرفعال می‌کند. .TP \fB\-\-helper\fP \fIname\fP از کمک‌رسان (helper) مشخص‌شده با \fIname\fP برای اتصال استفاده می‌کند. این روش انعطاف‌پذیرتر از بارگذاری ماژول‌های کمکی conntrack با پورت‌های از پیش تعیین‌شده است. .TP \fB\-\-ctevents\fP \fIevent\fP[\fB,\fP...] تنها رویدادهای conntrack مشخص‌شده را برای این اتصال تولید می‌کند. انواع رویدادهای ممکن عبارتند از: \fBnew\fP، \fBrelated\fP، \fBdestroy\fP، \fBreply\fP، \fBassured\fP، \fBprotoinfo\fP، \fBhelper\fP، \fBmark\fP (این مورد به ctmark اشاره دارد نه nfmark)، \fBnatseqinfo\fP، \fBsecmark\fP (ctsecmark). .TP \fB\-\-expevents\fP \fIevent\fP[\fB,\fP...] تنها رویدادهای انتظار (expectation) مشخص‌شده را برای این اتصال تولید می‌کند. انواع رویدادهای ممکن عبارتند از: \fBnew\fP. .TP \fB\-\-zone\-orig\fP {\fIid\fP|\fBmark\fP} برای ترافیکی که از جهت ORIGINAL (اصلی) می‌آید، این بسته را به ناحیه (zone) \fIid\fP اختصاص می‌دهد و جستجوها را فقط در آن ناحیه انجام می‌دهد. اگر به‌جای \fIid\fP از \fBmark\fP استفاده شود، ناحیه از nfmark بسته مشتق می‌شود. .TP \fB\-\-zone\-reply\fP {\fIid\fP|\fBmark\fP} برای ترافیکی که از جهت REPLY (پاسخ) می‌آید، این بسته را به ناحیه \fIid\fP اختصاص می‌دهد و جستجوها را فقط در آن ناحیه انجام می‌دهد. اگر به‌جای \fIid\fP از \fBmark\fP استفاده شود، ناحیه از nfmark بسته مشتق می‌شود. .TP \fB\-\-zone\fP {\fIid\fP|\fBmark\fP} این بسته را به ناحیه \fIid\fP اختصاص می‌دهد و جستجوها را فقط در آن ناحیه انجام می‌دهد. اگر به‌جای \fIid\fP از \fBmark\fP استفاده شود، ناحیه از nfmark بسته مشتق می‌شود. به‌طور پیش‌فرض، بسته‌ها ناحیه ۰ دارند. این گزینه برای هر دو جهت اعمال می‌شود. .TP \fB\-\-timeout\fP \fIname\fP از سیاست مهلت زمانی (timeout) مشخص‌شده با \fIname\fP برای اتصال استفاده می‌کند. این گزینه تعریف سیاست مهلت زمانی منعطف‌تری را نسبت به مقادیر سراسری موجود در /proc/sys/net/netfilter/nf_conntrack_*_timeout_* ارائه می‌دهد. .SS DNAT این هدف تنها در جدول .B nat و در زنجیره‌های .B PREROUTING و .B OUTPUT و زنجیره‌های تعریف‌شده توسط کاربر که فقط از این زنجیره‌ها فراخوانی می‌شوند، معتبر است. این هدف مشخص می‌کند که آدرس مقصد بسته باید اصلاح شود (و تمام بسته‌های بعدی در این اتصال نیز دستکاری خواهند شد)، و بررسی قواعد باید متوقف گردد. گزینه‌های زیر را می‌پذیرد: .TP \fB\-\-to\-destination\fP [\fIipaddr\fP[\fB\-\fP\fIipaddr\fP]][\fB:\fP\fIport\fP[\fB\-\fP\fIport\fP[\fB/\fIbaseport\fP]]] می‌تواند یک آدرس IP مقصد جدید، یا یک بازه فراگیر از آدرس‌های IP را مشخص کند. همچنین در صورتی که قاعده یکی از پروتکل‌های \fBtcp\fP، \fBudp\fP، \fBdccp\fP یا \fBsctp\fP را مشخص کرده باشد، می‌تواند به‌صورت اختیاری یک بازه پورت را تعیین کند. اگر هیچ بازه پورتی مشخص نشود، پورت مقصد هرگز تغییر نخواهد کرد. اگر هیچ آدرس IP مشخص نشود، تنها پورت مقصد تغییر داده می‌شود. اگر \fBbaseport\fP داده شود، تفاضل پورت مقصد اصلی و مقدار آن به‌عنوان آفست در بازه نگاشت پورت استفاده می‌شود. این قابلیت امکان ایجاد محدوده‌های نگاشت پورت جابجا شده (shifted portmap) را فراهم می‌کند و از نسخه ۴.۱۸ هسته لینوکس در دسترس است. برای یک تک پورت یا \fIbaseport\fP، می‌توان از نام یک سرویس به شرح مندرج در \fB/etc/services\fP استفاده کرد. .TP \fB\-\-random\fP نگاشت پورت منبع را تصادفی می‌کند (هسته >= 2.6.22). .TP \fB\-\-persistent\fP برای هر اتصال، همان آدرس مبدأ/مقصد را به یک کلاینت اختصاص می‌دهد. این گزینه جایگزین هدف SAME شده است. پشتیبانی از نگاشت‌های پایدار از نسخه 2.6.29-rc2 در دسترس است. .TP پشتیبانی از IPv6 از نسخه‌های هسته لینوکس >= 3.7 در دسترس است. .SS DNPT (IPv6-specific) ترجمه بدون وضعیت پیشوند شبکه IPv6-به-IPv6 مقصد (stateless destination IPv6-to-IPv6 Network Prefix Translation، همان‌طور که در RFC 6296 توصیف شده) را فراهم می‌کند. .PP باید از این هدف در جدول .B mangle استفاده کنید، نه در جدول .BR nat . گزینه‌های زیر را می‌پذیرد: .TP \fB\-\-src\-pfx\fP [\fIprefix/\fP\fIlength] پیشوند مبدأ که قصد ترجمه آن را دارید و طول آن را تعیین می‌کند. .TP \fB\-\-dst\-pfx\fP [\fIprefix/\fP\fIlength] پیشوند مقصد که قصد استفاده از آن را در ترجمه دارید و طول آن را تعیین می‌کند. .PP برای معکوس کردن ترجمه باید از هدف SNPT استفاده کنید. مثال: .IP ip6tables \-t mangle \-I POSTROUTING \-s fd00::/64 ! \-o vboxnet0 \-j SNPT \-\-src-pfx fd00::/64 \-\-dst-pfx 2001:e20:2000:40f::/64 .IP 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 .PP ممکن است نیاز به فعال‌سازی پروکسی همسایه IPv6 داشته باشید: .IP sysctl \-w net.ipv6.conf.all.proxy_ndp=1 .PP همچنین باید از هدف .B NOTRACK برای غیرفعال کردن رهگیری اتصال برای جریان‌های ترجمه‌شده استفاده کنید. .SS DSCP این هدف مقدار بیت‌های DSCP درون هدر TOS بسته IPv4 را تغییر می‌دهد. از آنجا که بسته را دستکاری می‌کند، تنها در جدول .B mangle قابل استفاده است. .TP \fB\-\-set\-dscp\fP \fIvalue\fP فیلد DSCP را روی یک مقدار عددی (می‌تواند ده‌دهی یا هگزادسیمال باشد) تنظیم می‌کند. .TP \fB\-\-set\-dscp\-class\fP \fIclass\fP فیلد DSCP را روی یک کلاس DiffServ تنظیم می‌کند. .SS ECN (IPv4-specific) این هدف به‌صورت انتخابی سیاهچاله‌های شناخته‌شده ECN را دور می‌زند. تنها در جدول .B mangle قابل استفاده است. .TP \fB\-\-ecn\-tcp\-remove\fP تمام بیت‌های ECN را از هدر TCP حذف می‌کند. البته، این گزینه تنها در ترکیب با .B \-p tcp قابل استفاده است. .SS HL (IPv6-specific) این هدف برای تغییر فیلد محدودیت پرش (Hop Limit) در هدر IPv6 استفاده می‌شود. فیلد Hop Limit مشابه مقداری است که در IPv4 به عنوان TTL شناخته می‌شود. تنظیم یا افزایش فیلد Hop Limit بالقوه می‌تواند بسیار خطرناک باشد، بنابراین باید به هر قیمتی از آن اجتناب شود. این هدف تنها در جدول .B mangle معتبر است. .PP .B هرگز این مقدار را روی بسته‌هایی که شبکه محلی شما را ترک می‌کنند تنظیم نکرده یا افزایش ندهید! .TP \fB\-\-hl\-set\fP \fIvalue\fP فیلد Hop Limit را روی «value» تنظیم می‌کند. .TP \fB\-\-hl\-dec\fP \fIvalue\fP فیلد Hop Limit را به میزان «value» بار کاهش می‌دهد. .TP \fB\-\-hl\-inc\fP \fIvalue\fP فیلد Hop Limit را به میزان «value» بار افزایش می‌دهد. .SS HMARK مانند MARK است، یعنی fwmark را تنظیم می‌کند، اما نشان از طریق درهم‌سازی گزینشگرهای انتخابی بسته محاسبه می‌شود. همچنین باید بازه نشان و به‌صورت اختیاری، آفست شروع را مشخص کنید. پیام‌های خطای ICMP بازرسی شده و برای محاسبه درهم‌سازی استفاده می‌شوند. .PP گزینه‌های موجود عبارتند از: .TP \fB\-\-hmark\-tuple\fP \fItuple\fP اعضای ممکن تاپل عبارتند از: .B src به معنی آدرس مبدأ (آدرس IPv4 یا IPv6)، .B dst به معنی آدرس مقصد (آدرس IPv4 یا IPv6)، .B sport به معنی پورت مبدأ (TCP، UDP، UDPlite، SCTP، DCCP)، .B dport به معنی پورت مقصد (TCP، UDP، UDPlite، SCTP، DCCP)، .B spi به معنی شاخص پارامتر امنیتی یا Security Parameter Index (در AH، ESP)، و .B ct به معنی استفاده از تاپل conntrack به جای گزینشگرهای بسته. .TP \fB\-\-hmark\-mod\fP \fIvalue (must be > 0)\fP پیمانه (Modulus) برای محاسبه درهم‌سازی (جهت محدود کردن بازه نشان‌های ممکن). .TP \fB\-\-hmark\-offset\fP \fIvalue\fP آفست برای شروع نشان‌ها. .TP برای استفاده‌های پیشرفته، به‌جای استفاده از .BR \-\-hmark\-tuple ، می‌توانید پیشوندها و ماسک‌های سفارشی را مشخص کنید: .TP \fB\-\-hmark\-src\-prefix\fP \fIcidr\fP ماسک آدرس مبدأ در نمادگذاری CIDR. .TP \fB\-\-hmark\-dst\-prefix\fP \fIcidr\fP ماسک آدرس مقصد در نمادگذاری CIDR. .TP \fB\-\-hmark\-sport\-mask\fP \fIvalue\fP یک ماسک ۱۶ بیتی پورت مبدأ به‌صورت هگزادسیمال. .TP \fB\-\-hmark\-dport\-mask\fP \fIvalue\fP یک ماسک ۱۶ بیتی پورت مقصد به‌صورت هگزادسیمال. .TP \fB\-\-hmark\-spi\-mask\fP \fIvalue\fP یک فیلد ۳۲ بیتی با ماسک spi. .TP \fB\-\-hmark\-proto\-mask\fP \fIvalue\fP یک فیلد ۸ بیتی با شماره پروتکل لایه ۴. .TP \fB\-\-hmark\-rnd\fP \fIvalue\fP یک مقدار تصادفی سفارشی ۳۲ بیتی برای ورودی محاسبه درهم‌سازی. .PP \fIمثال‌ها:\fP .PP 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 .PP iptables \-t mangle \-A PREROUTING \-j HMARK \-\-hmark\-offset 10000 \-\-hmark-tuple src,dst,proto \-\-hmark-mod 10 \-\-hmark\-rnd 0xdeafbeef .SS IDLETIMER این هدف می‌تواند برای تشخیص زمانی که رابط‌ها برای مدت زمان معینی غیرفعال (idle) بوده‌اند، استفاده شود. تایمرها با برچسب‌ها شناسایی می‌شوند و زمانی ایجاد می‌گردند که یک قاعده با یک برچسب جدید تنظیم شود. قواعد همچنین یک مقدار مهلت زمانی (بر حسب ثانیه) را به‌عنوان گزینه می‌پذیرند. اگر بیش از یک قاعده از همان برچسب تایمر استفاده کند، هر زمان که هر یک از این قواعد مطابقت پیدا کند، تایمر دوباره راه‌اندازی می‌شود. یک ورودی برای هر تایمر در sysfs ایجاد می‌شود. این مشخصه شامل زمان باقی‌مانده تا منقضی شدن تایمر است. این مشخصه‌ها در زیر کلاس xt_idletimer قرار دارند: .PP /sys/class/xt_idletimer/timers/