IPSET(8) IPSET(8)

ipset - ابزار مدیریت مجموعه‌های IP (IP sets)

ipset [ OPTIONS ] COMMAND [ COMMAND-OPTIONS ]

COMMANDS := { create | add | del | test | destroy | list | save | restore | flush | rename | swap | help | version | - }

OPTIONS := { -exist | -output { plain | save | xml } | json } | -quiet | -resolve | -sorted | -name | -terse | -file filename }

ipset create SETNAME TYPENAME [ CREATE-OPTIONS ]

ipset add SETNAME ADD-ENTRY [ ADD-OPTIONS ]

ipset del SETNAME DEL-ENTRY [ DEL-OPTIONS ]

ipset test SETNAME TEST-ENTRY [ TEST-OPTIONS ]

ipset destroy [ SETNAME ]

ipset list [ SETNAME ]

ipset save [ SETNAME ]

ipset restore

ipset flush [ SETNAME ]

ipset rename SETNAME-FROM SETNAME-TO

ipset swap SETNAME-FROM SETNAME-TO

ipset help [ TYPENAME ]

ipset version

ipset -

دستور ipset برای راه‌اندازی، نگهداری و بررسی مجموعه‌های IP (موسوم به IP sets) در هسته لینوکس به کار می‌رود. بسته به نوع مجموعه، یک مجموعه IP می‌تواند آدرس‌های IP(v4/v6)، شماره پورت‌های (TCP/UDP)، جفت‌های آدرس IP و MAC، جفت‌های آدرس IP و شماره پورت و موارد دیگر را در خود ذخیره کند. تعاریف انواع مجموعه را در ادامه مشاهده کنید.

تطابق‌ها و اهداف در Iptables که به مجموعه‌ها ارجاع می‌دهند، ارجاعاتی (references) ایجاد می‌کنند که از مجموعه‌های مشخص‌شده در هسته محافظت می‌نمایند. تا زمانی که حتی یک ارجاع به یک مجموعه اشاره داشته باشد، آن مجموعه را نمی‌توان حذف کرد (destroy).

گزینه‌هایی که توسط ipset شناسایی می‌شوند را می‌توان به چند گروه مختلف تقسیم کرد.

این گزینه‌ها عملیات مورد نظر برای اجرا را مشخص می‌کنند. در خط فرمان تنها یکی از آن‌ها را می‌توان مشخص کرد، مگر اینکه در زیر خلاف آن ذکر شده باشد. برای نسخه کامل نام دستورات، تنها کافی است به اندازه‌ای از حروف استفاده کنید که ipset بتواند آن را از سایر دستورات متمایز کند. تجزیه‌کننده ipset هنگام جستجو برای کوتاه‌ترین تطابق در نام‌های بلند دستورات، از ترتیبی که در اینجا آمده پیروی می‌کند.

ایجاد یک مجموعه مشخص‌شده با setname و نوع تعیین‌شده (typename). ممکن است نوع مجموعه به گزینه‌های اختصاصی خود نیاز داشته باشد. اگر گزینه -exist مشخص شود، ipset از خطایی که در صورت وجود داشتن مجموعه‌ای با همان نام و پارامترهای ساخت یکسان رخ می‌دهد، صرف‌نظر می‌کند.
افزودن یک مدخل معین به مجموعه. اگر گزینه -exist مشخص شده باشد، ipset در صورتی که مدخل از قبل به مجموعه افزوده شده باشد، از خطا چشم‌پوشی می‌کند.
حذف یک مدخل از مجموعه. اگر گزینه -exist مشخص شده باشد و مدخل در مجموعه وجود نداشته باشد (شاید قبلاً منقضی شده باشد)، از اجرای دستور چشم‌پوشی می‌شود.
بررسی وجود یک مدخل در مجموعه. در صورتی که مدخل آزموده‌شده در مجموعه وجود داشته باشد وضعیت خروج صفر، و اگر در مجموعه یافت نشود مقداری غیرصفر خواهد بود.
نابودسازی (حذف) مجموعه مشخص‌شده، یا تمام مجموعه‌ها در صورتی که نامی ارائه نشده باشد.

اگر مجموعه دارای ارجاع (reference) باشد، هیچ عملیاتی انجام نمی‌شود و هیچ مجموعه‌ای حذف نخواهد شد.

فهرست کردن داده‌های هدر و مدخل‌های مجموعه مشخص‌شده، یا برای تمام مجموعه‌ها در صورتی که نامی ارائه نشده باشد. گزینه -resolve را می‌توان برای اجبار به وضوح‌یابی نام‌ها (که ممکن است کند باشد) به کار برد. هنگامی که گزینه -sorted داده شود، مدخل‌ها به صورت مرتب‌شده فهرست یا ذخیره می‌شوند (که ممکن است کند باشد). گزینه -output می‌تواند برای کنترل قالب نمایش خروجی استفاده شود: plain، save، xml یا json. (حالت پیش‌فرض plain است). اگر گزینه -name مشخص شود، فقط نام مجموعه‌های موجود فهرست می‌شود. اگر گزینه -terse مشخص شود، فقط نام مجموعه‌ها و هدرهای آن‌ها فهرست می‌شود. خروجی در خروجی استاندارد چاپ می‌شود، و گزینه -file را می‌توان برای مشخص کردن نام یک فایل به جای خروجی استاندارد به کار برد.
ذخیره مجموعه معین یا تمام مجموعه‌ها (در صورت مشخص نشدن نام) در خروجی استاندارد در قالبی که دستور restore بتواند آن را بخواند. گزینه -file می‌تواند برای مشخص کردن نام فایل به جای خروجی استاندارد استفاده شود.
بازیابی یک نشست ذخیره‌شده که توسط دستور save تولید شده است. نشست ذخیره‌شده می‌تواند از ورودی استاندارد تغذیه شود یا از گزینه -file برای مشخص کردن نام فایل به جای ورودی استاندارد استفاده شود.

لطفاً توجه داشته باشید که مجموعه‌ها و عناصر موجود توسط restore پاک نمی‌شوند مگر اینکه در فایل بازیابی صریحاً چنین قید شده باشد. تمام دستورات در حالت بازیابی مجاز هستند به جز list، help، version، حالت تعاملی و خود دستور restore.

تخلیه تمام مدخل‌ها از مجموعه مشخص‌شده، یا تخلیه تمام مجموعه‌ها در صورت مشخص نشدن نام.
تغییر نام یک مجموعه. مجموعه‌ای که با SETNAME-TO مشخص می‌شود نباید از قبل وجود داشته باشد.
تعویض محتوای دو مجموعه با یکدیگر، یا به عبارت دیگر جابجایی نام دو مجموعه. مجموعه‌های ارجاع‌شده باید از قبل وجود داشته باشند و تنها مجموعه‌هایی با انواع سازگار را می‌توان با یکدیگر تعویض کرد.
چاپ راهنما، و در صورت مشخص شدن TYPENAME چاپ راهنمای اختصاصی نوع مجموعه.
چاپ نسخه برنامه.
-
اگر یک خط تیره به عنوان دستور مشخص شود، ipset وارد یک حالت تعاملی ساده می‌شود و دستورات را از ورودی استاندارد می‌خواند. حالت تعاملی را می‌توان با وارد کردن شبه‌دستور quit به پایان رساند.

گزینه‌های تکمیلی زیر را می‌توان مشخص کرد. نام‌های بلند گزینه‌ها را نمی‌توان به صورت مخفف به کار برد.

-!, -exist
صرف‌نظر کردن از خطاها در حالتی که مجموعه‌ای دقیقاً یکسان قرار است ایجاد شود، مدخلی که از قبل اضافه شده مجدداً افزوده می‌شود، یا مدخلی که وجود ندارد حذف می‌گردد.
انتخاب قالب خروجی برای دستور list.
خاموش‌سازی هرگونه خروجی در خروجی استاندارد و خطای استاندارد. با این حال اگر ipset نتواند به کار خود ادامه دهد، همچنان با کد خطا خارج می‌شود.
هنگام فهرست کردن مجموعه‌ها، وضوح‌یابی نام‌ها را اجباری می‌کند. برنامه تلاش خواهد کرد تا مدخل‌های IP را به صورت نام میزبان حل کند که نیازمند جستجوهای کند DNS است.
خروجی مرتب‌شده. هنگام فهرست کردن یا ذخیره مجموعه‌ها، مدخل‌ها به صورت مرتب‌شده نمایش داده می‌شوند.
تنها فهرست کردن نام‌های مجموعه‌های موجود؛ یعنی جلوگیری از نمایش هدرها و اعضای مجموعه.
فهرست کردن نام مجموعه‌ها و هدرها؛ یعنی جلوگیری از نمایش اعضای مجموعه.
مشخص کردن نام یک فایل برای نوشتن در آن به جای خروجی استاندارد (در دستورهای list یا save) یا خواندن از آن به جای ورودی استاندارد (در دستور restore).

یک نوع مجموعه متشکل از روش ذخیره‌سازی که داده‌ها توسط آن ذخیره می‌شوند و نوع (یا انواع) داده‌هایی است که در مجموعه نگهداری می‌شوند. بنابراین پارامتر TYPENAME در دستور create از نحو زیر پیروی می‌کند:

TYPENAME := method:datatype[,datatype[,datatype]]

که در آن فهرست فعلی روش‌ها شامل bitmap، hash و list بوده و انواع داده مجاز عبارتند از: ip، net، mac، port و iface. بُعد یک مجموعه برابر با تعداد انواع داده در نام نوع آن است.

هنگام افزودن، حذف یا بررسی مدخل‌ها در یک مجموعه، باید از همان نحو داده‌های جداشده با کاما برای پارامتر entry دستورات استفاده شود؛ یعنی:

ipset add foo ipaddr,portnum,ipaddr

اگر به جای آدرس‌های IP یا شماره سرویس‌ها از نام میزبان یا نام سرویسی استفاده شود که دارای خط تیره در نام خود است، آن نام میزبان یا نام سرویس باید در داخل براکت قرار گیرد. مثال:

ipset add foo [test-hostname],[ftp-data]

در مورد نام میزبان‌ها، تفکیک‌کننده DNS به صورت داخلی توسط ipset فراخوانی می‌شود، اما اگر چندین آدرس IP برگرداند، تنها نخستین مورد استفاده خواهد شد.

انواع bitmap و list از ذخیره‌سازی با اندازه ثابت استفاده می‌کنند. انواع hash برای ذخیره عناصر از یک جدول درهم‌سازی (هش) استفاده می‌نمایند. به منظور جلوگیری از تداخل (clash) در جدول درهم‌سازی، تعداد محدودی زنجیره‌بندی (chaining) انجام می‌شود و در صورت پر شدن آن، هنگام افزودن مدخل‌ها توسط دستور ipset اندازه جدول درهم‌سازی دو برابر می‌شود. هنگامی که مدخل‌ها توسط هدف (target) SET در iptables/ip6tables اضافه شوند، اندازه جدول درهم‌سازی ثابت می‌ماند و حتی اگر مدخل جدید نتواند به مجموعه افزوده شود، اندازه آن دو برابر نخواهد شد.

تمام انواع مجموعه از پارامتر اختیاری timeout هنگام ایجاد یک مجموعه و افزودن مدخل‌ها پشتیبانی می‌کنند. مقدار پارامتر timeout برای دستور create بیانگر مقدار پیش‌فرض زمان انقضا (به ثانیه) برای مدخل‌های جدید است. اگر مجموعه‌ای با پشتیبانی از timeout ایجاد شود، همان گزینه timeout را می‌توان برای مشخص کردن مقادیر غیرپیش‌فرض زمان انقضا در هنگام افزودن مدخل‌ها به کار برد. مقدار زمان انقضای صفر به این معناست که مدخل به صورت دائمی به مجموعه افزوده می‌شود. مقدار timeout عناصر از قبل اضافه‌شده را می‌توان با افزودن مجدد آن عنصر با استفاده از گزینه -exist تغییر داد. بزرگ‌ترین مقدار ممکن برای timeout عدد 2147483 (به ثانیه) است. مثال:

ipset create test hash:ip timeout 300
ipset add test 192.168.0.1 timeout 60
ipset -exist add test 192.168.0.1 timeout 600

هنگام فهرست کردن مجموعه، تعداد مدخل‌های چاپ‌شده در هدر ممکن است از تعداد مدخل‌های فهرست‌شده برای مجموعه‌های دارای افزونه‌های timeout بزرگ‌تر باشد: تعداد مدخل‌های مجموعه هنگام اضافه یا حذف شدن عناصر به مجموعه، و همچنین به صورت دوره‌ای زمانی که زباله‌روب (garbage collector) مدخل‌های منقضی‌شده را حذف می‌کند، به‌روزرسانی می‌شود.

تمام انواع مجموعه از گزینه اختیاری counters هنگام ایجاد یک مجموعه پشتیبانی می‌کنند. اگر این گزینه مشخص شود، مجموعه با پشتیبانی از شمارنده‌های بسته (packet) و بایت (byte) به ازای هر عنصر ایجاد می‌شود. شمارنده‌های بسته و بایت هنگام افزودن (یا افزودن مجدد) عناصر به مجموعه صفر می‌شوند، مگر اینکه مقادیر شمارنده بسته و بایت صراحتاً با گزینه‌های packets و bytes مشخص شده باشند. مثالی از افزودن یک عنصر به مجموعه با مقادیر شمارنده غیرصفر:

ipset create foo hash:ip counters
ipset add foo 192.168.1.1 packets 42 bytes 1024

تمام انواع مجموعه از افزونه اختیاری comment (یادداشت) پشتیبانی می‌کنند. فعال کردن این افزونه روی یک ipset به شما امکان می‌دهد تا یک مدخل ipset را با یک رشته دلخواه یادداشت‌گذاری و مستند کنید. این رشته هم توسط هسته و هم توسط خود ipset کاملاً نادیده گرفته می‌شود و صرفاً ابزاری برای ارائه روشی مناسب جهت مستندسازی دلیل وجود یک مدخل است. یادداشت‌ها نباید حاوی هیچ علامت نقل‌قولی باشند و کاراکتر معمول گریز (\) نیز معنایی ندارد. برای مثال، دستور پوسته زیر غیرمجاز است:

ipset add foo 1.1.1.1 comment "this comment is \"bad\""

در دستور بالا، پوسته شما طبیعتاً علامت‌های نقل‌قول را اسکیپ می‌کند و ipset علامت‌های کوتیشن را در آرگومان comment مشاهده خواهد کرد که منجر به خطای تجزیه می‌شود. اگر در حال نوشتن سیستم اختصاصی خود هستید، در صورتی که نمی‌خواهید کارایی "ipset save" و "ipset restore" مختل شود، باید از ایجاد یادداشت‌های حاوی علامت نقل‌قول خودداری نمایید؛ با این حال، هسته مانع از انجام این کار توسط شما نخواهد شد. دستورات زیر کاملاً قابل قبول هستند:

ipset create foo hash:ip comment
ipset add foo 192.168.1.1/24 comment "allow access to SMB share on \\\\fileserv\\"
مورد بالا به این صورت ظاهر می‌شود: "allow access to SMB share on \\fileserv\"

تمام انواع مجموعه از افزونه اختیاری skbinfo پشتیبانی می‌کنند. این افزونه به شما امکان می‌دهد تا فراداده‌ها (علامت فایروال یا firewall mark، کلاس tc و صف سخت‌افزاری) را به همراه هر مدخل ذخیره کرده و با استفاده از هدف نت‌فیلتر SET همراه با گزینه --map-set آن را به بسته‌ها نگاشت کنید. قالب گزینه skbmark: به صورت MARK یا MARK/MASK است، که در آن MARK و MASK اعداد هگزادسیمال ۳۲ بیتی با پیشوند 0x هستند. اگر تنها mark مشخص شود، ماسک 0xffffffff به کار گرفته می‌شود. گزینه skbprio دارای قالب کلاس tc است: MAJOR:MINOR، که در آن اعداد major و minor هگزادسیمال بدون پیشوند 0x هستند. گزینه skbqueue صرفاً یک عدد ده‌دهی است.

ipset create foo hash:ip skbinfo
ipset add foo 192.168.0.1 skbmark 0x1111/0xff00ffff skbprio 1:10 skbqueue 10

این پارامتر برای دستور create در تمام مجموعه‌های نوع hash معتبر است. اندازه اولیه جدول درهم‌سازی را برای مجموعه تعریف می‌کند که مقدار پیش‌فرض آن 1024 است. اندازه جدول باید توانی از دو باشد؛ هسته به طور خودکار اندازه‌هایی را که توان دو نیستند به نخستین مقدار معتبر بعدی گرد می‌کند. مثال:

ipset create test hash:ip hashsize 1536

این پارامتر برای دستور create در تمام مجموعه‌های نوع hash معتبر است. حداکثر تعداد عناصری را که می‌توان در مجموعه ذخیره کرد تعیین می‌کند که پیش‌فرض آن 65536 است. مثال:

ipset create test hash:ip maxelem 2048

این پارامتر برای دستور create در تمام مجموعه‌های نوع hash معتبر است. حداکثر تعداد عناصری را که می‌توان در یک سطل (bucket) جدول درهم‌سازی ذخیره کرد مشخص می‌کند. مقادیر مجاز هر عدد زوج بین 2 تا 14 است و مقدار پیش‌فرض 14 می‌باشد. تنظیم این مقدار بر روی مقادیر کوچک‌تر، ipset را وادار به ایجاد جداول درهم‌سازی بزرگ‌تر می‌کند که حافظه بیشتری مصرف می‌نمایند اما سرعت تطابق در مجموعه را افزایش می‌دهند. مثال:

ipset create test hash:ip bucketsize 2

این پارامتر برای دستور create در تمام مجموعه‌های نوع hash به جز hash:mac معتبر است. خانواده پروتکل آدرس‌های IP ذخیره‌شونده در مجموعه را تعیین می‌کند. مقدار پیش‌فرض inet (یعنی IPv4) است. برای خانواده inet می‌توان با مشخص کردن یک محدوده یا یک شبکه از آدرس‌های IPv4 در بخش آدرس IP مدخل، چندین مدخل را به طور همزمان اضافه یا حذف کرد:

ipaddr := { ip | fromaddr-toaddr | ip/cidr }

netaddr := { fromaddr-toaddr | ip/cidr }

مثال:

ipset create test hash:ip family inet6

انواع مجموعه‌های hash که می‌توانند داده‌های نوع net را ذخیره کنند (یعنی hash:*net*) از گزینه اختیاری nomatch در هنگام افزودن مدخل‌ها پشتیبانی می‌نمایند. هنگام تطبیق عناصر در مجموعه، مدخل‌هایی که با nomatch علامت‌گذاری شده‌اند به گونه‌ای نادیده گرفته می‌شوند که گویی به مجموعه اضافه نشده‌اند؛ این ویژگی امکان ساخت مجموعه‌های دارای استثنا را فراهم می‌سازد. مثال مربوط به نوع درهم‌سازی hash:net را در زیر ببینید.

هنگامی که عناصر توسط ipset بررسی (test) می‌شوند، فلگ‌های nomatch لحاظ می‌گردند. اگر کسی بخواهد وجود عنصری با نشان nomatch را در یک مجموعه بیازماید، باید آن فلگ را نیز مشخص کند.

تمام انواع مجموعه‌های درهم‌سازی از پارامتر اختیاری forceadd هنگام ایجاد مجموعه پشتیبانی می‌کنند. هنگامی که مجموعه‌های ساخته‌شده با این گزینه پر شوند، افزودن بعدی به مجموعه ممکن است موفقیت‌آمیز باشد و یک مدخل تصادفی را از مجموعه بیرون براند.

ipset create foo hash:ip forceadd

این فلگ هنگام افزودن عناصر به مجموعه hash:net,iface معتبر است. اگر این فلگ تنظیم شود، هنگام مقایسه با این عنصر از تطابق پیشوندی استفاده می‌شود. برای مثال، عنصری که شامل نام رابط "eth" است، با هر نامی که این پیشوند را داشته باشد مطابقت خواهد داشت.

نوع مجموعه bitmap:ip از یک محدوده حافظه برای ذخیره آدرس‌های میزبان IPv4 (پیش‌فرض) یا آدرس‌های شبکه IPv4 استفاده می‌کند. مجموعه‌ای از نوع bitmap:ip می‌تواند تا 65536 مدخل را در خود ذخیره کند.

CREATE-OPTIONS := range fromip-toip|ip/cidr [ netmask cidr ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := { ip | fromip-toip | ip/cidr }

ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := { ip | fromip-toip | ip/cidr }

TEST-ENTRY := ip

گزینه‌های الزامی دستور create:

ایجاد مجموعه بر اساس محدوده فراگیر آدرس مشخص‌شده که در قالب یک بازه آدرس IPv4 یا یک شبکه بیان می‌شود. اندازه محدوده (بر حسب مدخل‌ها) نمی‌تواند از سقف حداکثر 65536 عنصر فراتر رود.

گزینه‌های اختیاری دستور create:

هنگامی که پارامتر اختیاری netmask مشخص شود، آدرس‌های شبکه به جای آدرس‌های میزبان IP در مجموعه ذخیره خواهند شد. مقدار پیشوند cidr باید بین 1 تا 32 باشد. اگر آدرس شبکه، که از اعمال ماسک روی آدرس با نت‌ماسک مشخص‌شده حاصل می‌شود، در مجموعه وجود داشته باشد، آن آدرس IP در مجموعه خواهد بود.

نوع bitmap:ip از افزودن یا حذف چندین مدخل در یک دستور پشتیبانی می‌کند.

مثال‌ها:

ipset create foo bitmap:ip range 192.168.0.0/16
ipset add foo 192.168.1/24
ipset test foo 192.168.1.1

نوع مجموعه bitmap:ip,mac از یک محدوده حافظه برای ذخیره جفت‌های آدرس IPv4 و MAC استفاده می‌کند. مجموعه‌ای از نوع bitmap:ip,mac می‌تواند تا 65536 مدخل را ذخیره نماید.

CREATE-OPTIONS := range fromip-toip|ip/cidr [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := ip[,macaddr]

ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := ip[,macaddr]

TEST-ENTRY := ip[,macaddr]

گزینه‌های الزامی برای استفاده هنگام ایجاد مجموعه‌ای از نوع bitmap:ip,mac:

ایجاد مجموعه از محدوده آدرس فراگیر مشخص‌شده که در قالب یک محدوده یا شبکه IPv4 بیان می‌شود. اندازه محدوده نمی‌تواند از سقف حداکثر 65536 مدخل فراتر رود.

نوع bitmap:ip,mac از این نظر استثنایی است که بخش MAC را می‌توان هنگام افزودن، حذف یا آزمودن مدخل‌ها در مجموعه نادیده گرفت. اگر مدخلی را بدون مشخص کردن آدرس MAC اضافه کنیم، نخستین باری که مدخل توسط هسته تطبیق داده شود، هسته به طور خودکار آدرس MAC ناموجود را با آدرس MAC موجود در بسته پر خواهد کرد. اگر مدخل به دلیل پارامتر src در تطابق set مطابقت یافته باشد، از آدرس MAC مبدأ استفاده می‌شود، و اگر به دلیل پارامتر dst مطابقت یافته باشد، در صورت موجود بودن از آدرس MAC مقصد استفاده می‌گردد. اگر برای مدخل یک مقدار timeout تعیین شده باشد، تایمر زمانی شروع به کار می‌کند که جفت آدرس IP و MAC کامل شود.

مجموعه‌های نوع bitmap:ip,mac به دو پارامتر src/dst از ماژول‌های هسته نت‌فیلتر تطابق set و هدف SET نیاز دارند. برای تطابق روی آدرس‌های MAC مقصد، به بخش «نکات و توضیحات» در زیر مراجعه کنید.

مثال‌ها:

ipset create foo bitmap:ip,mac range 192.168.0.0/16
ipset add foo 192.168.1.1,12:34:56:78:9A:BC
ipset test foo 192.168.1.1

نوع مجموعه bitmap:port از یک محدوده حافظه برای ذخیره شماره پورت‌ها استفاده می‌کند و چنین مجموعه‌ای می‌تواند تا 65536 پورت را در خود جای دهد.

CREATE-OPTIONS := range fromport-toport [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := { [proto:]port | [proto:]fromport-toport }

ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := { [proto:]port | [proto:]fromport-toport }

TEST-ENTRY := [proto:]port

گزینه‌های الزامی برای استفاده هنگام ایجاد مجموعه‌ای از نوع bitmap:port:

ایجاد مجموعه از محدوده پورت فراگیر مشخص‌شده.

ماژول‌های هسته نت‌فیلتر تطابق set و هدف SET شماره‌های ذخیره‌شده را به عنوان شماره پورت‌های TCP یا UDP تفسیر می‌کنند.

پارامتر proto تنها در صورتی نیاز به مشخص شدن دارد که از نام یک سرویس استفاده شود و آن نام به عنوان یک سرویس TCP وجود نداشته باشد. پروتکل هرگز در مجموعه ذخیره نمی‌شود، بلکه تنها شماره پورت سرویس نگهداری خواهد شد.

مثال‌ها:

ipset create foo bitmap:port range 0-1024
ipset add foo 80
ipset test foo 80
ipset del foo udp:[macon-udp]-[tn-tl-w2]

نوع مجموعه hash:ip از یک جدول درهم‌سازی برای ذخیره آدرس‌های میزبان IP (پیش‌فرض) یا آدرس‌های شبکه استفاده می‌کند. آدرس‌های IP با مقدار صفر را نمی‌توان در مجموعه‌ای از نوع hash:ip ذخیره کرد.

CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ netmask cidr ] [ bitmask mask ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := ipaddr

ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := ipaddr

TEST-ENTRY := ipaddr

گزینه‌های اختیاری دستور create:

هنگامی که پارامتر اختیاری netmask مشخص شود، آدرس‌های شبکه به جای آدرس‌های میزبان IP در مجموعه ذخیره خواهند شد. مقدار پیشوند cidr باید بین 1 تا 32 برای IPv4 و بین 1 تا 128 برای IPv6 باشد. اگر آدرس شبکه، که از ماسک کردن آدرس با نت‌ماسک حاصل می‌شود، در مجموعه یافت شود، آن آدرس IP در مجموعه در نظر گرفته می‌شود. مثال‌ها:
ipset create foo hash:ip netmask 30
ipset add foo 192.168.1.0/24
ipset test foo 192.168.1.2
این گزینه مشابه netmask عمل می‌کند اما هر آدرس معتبر IPv4/v6 را می‌پذیرد. لازم نیست که حتماً یک netmask معتبر باشد.

نوع مجموعه hash:mac از یک جدول درهم‌سازی برای ذخیره آدرس‌های MAC استفاده می‌کند. آدرس‌های MAC با مقدار صفر را نمی‌توان در مجموعه‌ای از نوع hash:mac ذخیره کرد. برای تطابق روی آدرس‌های MAC مقصد، به بخش «نکات و توضیحات» در زیر مراجعه کنید.

CREATE-OPTIONS := [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := macaddr

ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := macaddr

TEST-ENTRY := macaddr

مثال‌ها:

ipset create foo hash:mac
ipset add foo 01:02:03:04:05:06
ipset test foo 01:02:03:04:05:06

نوع مجموعه hash:ip,mac از یک جدول درهم‌سازی برای ذخیره جفت‌های آدرس IP و MAC استفاده می‌کند. آدرس‌های MAC با مقدار صفر را نمی‌توان در مجموعه‌ای از نوع hash:ip,mac ذخیره کرد. برای تطابق روی آدرس‌های MAC مقصد، به بخش «نکات و توضیحات» در زیر مراجعه کنید.

CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := ipaddr,macaddr

ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := ipaddr,macaddr

TEST-ENTRY := ipaddr,macaddr

مثال‌ها:

ipset create foo hash:ip,mac
ipset add foo 1.1.1.1,01:02:03:04:05:06
ipset test foo 1.1.1.1,01:02:03:04:05:06

نوع مجموعه hash:net از یک جدول درهم‌سازی برای ذخیره آدرس‌های شبکه IP با اندازه‌های مختلف استفاده می‌کند. آدرس شبکه با اندازه پیشوند صفر را نمی‌توان در این نوع مجموعه‌ها ذخیره کرد.

CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := netaddr

ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := netaddr

TEST-ENTRY := netaddr

که در آن

netaddr := ip[/cidr]

هنگام افزودن، حذف یا آزمودن مدخل‌ها، اگر پارامتر پیشوند cidr مشخص نشود، مقدار پیشوند میزبان فرض می‌شود. هنگام افزودن یا حذف مدخل‌ها، عنصر دقیق اضافه یا حذف می‌شود و عناصر هم‌پوشان توسط هسته بررسی نمی‌شوند. هنگام آزمودن مدخل‌ها، اگر یک آدرس میزبان آزموده شود، هسته تلاش می‌کند تا آدرس میزبان را در شبکه‌های افزوده‌شده به مجموعه تطبیق دهد و نتیجه را متناسب با آن گزارش نماید.

از نقطه نظر تطابق نت‌فیلتر set، جستجو برای تطابق همیشه از کوچک‌ترین اندازه بلوک شبکه (خاص‌ترین پیشوند) تا بزرگ‌ترین آن (عمومی‌ترین پیشوند) افزوده‌شده به مجموعه آغاز می‌شود. هنگام افزودن یا حذف آدرس‌های IP به مجموعه توسط هدف نت‌فیلتر SET، مدخل با خاص‌ترین پیشوندی که در مجموعه یافت می‌شود، یا در صورت خالی بودن مجموعه با مقدار پیشوند میزبان اضافه یا حذف خواهد شد.

زمان جستجو به صورت خطی با تعداد مقادیر پیشوندهای مختلف افزوده‌شده به مجموعه افزایش می‌یابد.

مثال:

ipset create foo hash:net
ipset add foo 192.168.0.0/24
ipset add foo 10.1.0.0/16
ipset add foo 192.168.0/24
ipset add foo 192.168.0/30 nomatch

هنگام تطبیق عناصر در مجموعه بالا، تمام آدرس‌های IP از شبکه‌های 192.168.0.0/24، 10.1.0.0/16 و 192.168.0/24 به جز آدرس‌های متعلق به 192.168.0/30 مطابقت داده خواهند شد.

نوع مجموعه hash:net,net از یک جدول درهم‌سازی برای ذخیره جفت‌های آدرس شبکه IP با اندازه‌های مختلف استفاده می‌کند. به یاد داشته باشید که پارامتر اول بر پارامتر دوم اولویت دارد، بنابراین اگر پارامتر اول خاص‌تری با یک پارامتر دوم مناسب وجود داشته باشد، ممکن است یک مدخل nomatch بی‌اثر شود. آدرس شبکه با اندازه پیشوند صفر را نمی‌توان در این نوع مجموعه ذخیره کرد.

CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ netmask cidr ] [ bitmask mask ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := netaddr,netaddr

ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := netaddr,netaddr

TEST-ENTRY := netaddr,netaddr

که در آن

netaddr := ip[/cidr]

هنگام افزودن، حذف یا آزمودن مدخل‌ها، اگر پارامتر پیشوند cidr مشخص نشود، مقدار پیشوند میزبان فرض می‌شود. هنگام افزودن یا حذف مدخل‌ها، عنصر دقیق اضافه یا حذف می‌شود و عناصر هم‌پوشان توسط هسته بررسی نمی‌شوند. هنگام آزمودن مدخل‌ها، اگر یک آدرس میزبان آزموده شود، هسته تلاش می‌کند تا آدرس میزبان را در شبکه‌های افزوده‌شده به مجموعه تطبیق دهد و نتیجه را متناسب با آن گزارش نماید.

از دیدگاه تطابق نت‌فیلتر set، جستجو برای تطابق همیشه از کوچک‌ترین اندازه بلوک شبکه (خاص‌ترین پیشوند) تا بزرگ‌ترین آن (عمومی‌ترین پیشوند) آغاز می‌شود، در حالی که پارامتر اول دارای تقدم است. هنگام افزودن یا حذف آدرس‌های IP به مجموعه توسط هدف نت‌فیلتر SET، مدخل با خاص‌ترین پیشوندی که در مجموعه یافت می‌شود، یا در صورت خالی بودن مجموعه با مقدار پیشوند میزبان اضافه یا حذف خواهد شد.

زمان جستجو به صورت خطی با تعداد مقادیر پیشوندهای مختلف اضافه‌شده به پارامتر نخست مجموعه افزایش می‌یابد. تعداد پیشوندهای ثانویه این مقدار را بیشتر افزایش می‌دهد زیرا فهرست پیشوندهای ثانویه به ازای هر پیشوند اولیه پیمایش می‌شود.

گزینه‌های اختیاری دستور create:

هنگامی که پارامتر اختیاری netmask مشخص شود، آدرس‌های شبکه به جای آدرس‌های میزبان IP در مجموعه ذخیره خواهند شد. مقدار پیشوند cidr باید بین 1 تا 32 برای IPv4 و بین 1 تا 128 برای IPv6 باشد. اگر آدرس شبکه، که از اعمال ماسک روی آدرس با نت‌ماسک حاصل می‌شود، در مجموعه یافت شود، آن آدرس IP در مجموعه خواهد بود.
این گزینه مشابه netmask عمل می‌کند اما هر آدرس معتبر IPv4/v6 را می‌پذیرد. لازم نیست که حتماً یک netmask معتبر باشد.

مثال:

ipset create foo hash:net,net
ipset add foo 192.168.0.0/24,10.0.1.0/24
ipset add foo 10.1.0.0/16,10.255.0.0/24
ipset add foo 192.168.0/24,192.168.54.0-192.168.54.255
ipset add foo 192.168.0/30,192.168.64/30 nomatch

هنگام تطبیق عناصر در مجموعه بالا، تمام آدرس‌های IP از شبکه‌های 192.168.0.0/24<->10.0.1.0/24، 10.1.0.0/16<->10.255.0.0/24 و 192.168.0/24<->192.168.54.0/24 به جز آدرس‌های متعلق به 192.168.0/30<->192.168.64/30 مطابقت داده خواهند شد.

نوع مجموعه hash:ip,port از یک جدول درهم‌سازی برای ذخیره جفت‌های آدرس IP و شماره پورت استفاده می‌کند. شماره پورت همراه با یک پروتکل (پیش‌فرض TCP) تفسیر می‌شود و نمی‌توان از شماره پروتکل صفر استفاده کرد.

CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ netmask cidr ] [ bitmask mask ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := ipaddr,[proto:]port

ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := ipaddr,[proto:]port

TEST-ENTRY := ipaddr,[proto:]port

بخش [proto:]port عناصر را می‌توان به صورت‌های زیر بیان کرد، که در آن‌ها دگرگونی‌های محدوده هنگام افزودن یا حذف مدخل‌ها معتبر هستند:

پورت TCP یا محدوده‌ای از پورت‌ها بیان‌شده در شناسه‌های نام پورت TCP از /etc/services
پورت TCP یا محدوده‌ای از پورت‌ها بیان‌شده در شماره پورت‌های TCP
پورت یا محدوده پورت TCP، SCTP، UDP یا UDPLITE بیان‌شده در نام (نام‌های) پورت یا شماره (شماره‌های) پورت
نام کد یا نوع/کد ICMP. شناسه‌های نام کد ICMP پشتیبانی‌شده را همیشه می‌توان با دستور help فهرست کرد.
نام کد یا نوع/کد ICMPv6. شناسه‌های نام کد ICMPv6 پشتیبانی‌شده را همیشه می‌توان با دستور help فهرست کرد.
سایر پروتکل‌ها، به عنوان یک شناسه از /etc/protocols یا عدد. شماره شبه‌پورت باید صفر باشد.

مجموعه‌های نوع hash:ip,port نیازمند دو پارامتر src/dst از ماژول‌های هسته تطابق set و هدف SET هستند.

گزینه‌های اختیاری دستور create:

هنگامی که پارامتر اختیاری netmask مشخص شود، آدرس‌های شبکه به جای آدرس‌های میزبان IP در مجموعه ذخیره خواهند شد. مقدار پیشوند cidr باید بین 1 تا 32 برای IPv4 و بین 1 تا 128 برای IPv6 باشد. اگر آدرس شبکه، که از اعمال ماسک روی آدرس با نت‌ماسک حاصل می‌شود، در مجموعه یافت شود، آن آدرس IP در مجموعه خواهد بود.
این گزینه مشابه netmask عمل می‌کند اما هر آدرس معتبر IPv4/v6 را می‌پذیرد. لازم نیست که حتماً یک netmask معتبر باشد.

مثال‌ها:

ipset create foo hash:ip,port
ipset add foo 192.168.1.0/24,80-82
ipset add foo 192.168.1.1,udp:53
ipset add foo 192.168.1.1,vrrp:0
ipset test foo 192.168.1.1,80

نوع مجموعه hash:net,port از یک جدول درهم‌سازی برای ذخیره جفت‌های آدرس شبکه IP با اندازه‌های مختلف و پورت استفاده می‌کند. شماره پورت همراه با یک پروتکل (پیش‌فرض TCP) تفسیر می‌شود و نمی‌توان از شماره پروتکل صفر استفاده کرد. آدرس شبکه با اندازه پیشوند صفر نیز پذیرفته نمی‌شود.

CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := netaddr,[proto:]port

ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := netaddr,[proto:]port

TEST-ENTRY := netaddr,[proto:]port

که در آن

netaddr := ip[/cidr]

برای بخش netaddr عناصر به توضیحات مربوط به نوع مجموعه hash:net مراجعه کنید. برای بخش [proto:]port عناصر به توضیحات نوع مجموعه hash:ip,port مراجعه نمایید.

هنگام افزودن، حذف یا آزمودن مدخل‌ها، اگر پارامتر پیشوند cidr مشخص نشود، مقدار پیشوند میزبان فرض می‌شود. هنگام افزودن یا حذف مدخل‌ها، عنصر دقیق اضافه یا حذف می‌شود و عناصر هم‌پوشان توسط هسته بررسی نمی‌شوند. هنگام آزمودن مدخل‌ها، اگر یک آدرس میزبان آزموده شود، هسته تلاش می‌کند تا آدرس میزبان را در شبکه‌های افزوده‌شده به مجموعه تطبیق دهد و نتیجه را متناسب با آن گزارش کند.

از نقطه نظر تطابق نت‌فیلتر set، جستجو برای تطابق همیشه از کوچک‌ترین اندازه بلوک شبکه (خاص‌ترین پیشوند) تا بزرگ‌ترین آن (عمومی‌ترین پیشوند) افزوده‌شده به مجموعه آغاز می‌شود. هنگام افزودن یا حذف آدرس‌های IP به مجموعه توسط هدف نت‌فیلتر SET، با خاص‌ترین پیشوندی که در مجموعه یافت می‌شود، یا در صورت خالی بودن مجموعه با مقدار پیشوند میزبان اضافه یا حذف خواهد شد.

زمان جستجو به صورت خطی با تعداد مقادیر پیشوندهای مختلف افزوده‌شده به مجموعه افزایش می‌یابد.

مثال‌ها:

ipset create foo hash:net,port
ipset add foo 192.168.0/24,25
ipset add foo 10.1.0.0/16,80
ipset test foo 192.168.0/24,25

نوع مجموعه hash:ip,port,ip از یک جدول درهم‌سازی برای ذخیره سه‌تایی‌های آدرس IP، شماره پورت و یک آدرس IP دوم استفاده می‌کند. شماره پورت همراه با یک پروتکل (پیش‌فرض TCP) تفسیر می‌شود و استفاده از شماره پروتکل صفر مجاز نیست.

CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := ipaddr,[proto:]port,ip

ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := ipaddr,[proto:]port,ip

TEST-ENTRY := ipaddr,[proto:]port,ip

برای بخش‌های نخستین ipaddr و [proto:]port عناصر، به توضیحات مربوط به نوع مجموعه hash:ip,port مراجعه کنید.

مجموعه‌های نوع hash:ip,port,ip نیازمند سه پارامتر src/dst از ماژول‌های هسته تطابق set و هدف SET هستند.

مثال‌ها:

ipset create foo hash:ip,port,ip
ipset add foo 192.168.1.1,80,10.0.0.1
ipset test foo 192.168.1.1,udp:53,10.0.0.1

نوع مجموعه hash:ip,port,net از یک جدول درهم‌سازی برای ذخیره سه‌تایی‌های آدرس IP، شماره پورت و آدرس شبکه IP استفاده می‌کند. شماره پورت همراه با یک پروتکل (پیش‌فرض TCP) تفسیر می‌شود و استفاده از شماره پروتکل صفر مجاز نیست. آدرس شبکه با اندازه پیشوند صفر را نیز نمی‌توان ذخیره کرد.

CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := ipaddr,[proto:]port,netaddr

ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := ipaddr,[proto:]port,netaddr

TEST-ENTRY := ipaddr,[proto:]port,netaddr

که در آن

netaddr := ip[/cidr]

برای بخش‌های ipaddr و [proto:]port عناصر به توضیحات نوع مجموعه hash:ip,port مراجعه نمایید. برای بخش netaddr عناصر، توضیحات مربوط به نوع مجموعه hash:net را مشاهده کنید.

از نقطه نظر تطابق نت‌فیلتر set، جستجو برای تطابق همواره از کوچک‌ترین اندازه بلوک شبکه (خاص‌ترین cidr) تا بزرگ‌ترین آن (عمومی‌ترین cidr) افزوده‌شده به مجموعه آغاز می‌شود. هنگام افزودن یا حذف سه‌تایی‌ها به مجموعه توسط هدف نت‌فیلتر SET، با خاص‌ترین مقدار cidr موجود در مجموعه، یا در صورت خالی بودن مجموعه با مقدار cidr میزبان اضافه یا حذف خواهد شد.

زمان جستجو به صورت خطی با تعداد مقادیر مختلف cidr افزوده‌شده به مجموعه افزایش می‌یابد.

مجموعه‌های نوع hash:ip,port,net نیازمند سه پارامتر src/dst از ماژول‌های هسته تطابق set و هدف SET هستند.

مثال‌ها:

ipset create foo hash:ip,port,net
ipset add foo 192.168.1,80,10.0.0/24
ipset add foo 192.168.2,25,10.1.0.0/16
ipset test foo 192.168.1,80.10.0.0/24

نوع مجموعه hash:ip,mark از یک جدول درهم‌سازی برای ذخیره جفت‌های آدرس IP و علامت بسته (packet mark) استفاده می‌کند.

CREATE-OPTIONS := [ family { inet | inet6 } ] [ markmask value ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := ipaddr,mark

ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := ipaddr,mark

TEST-ENTRY := ipaddr,mark

گزینه‌های اختیاری دستور create:

به شما امکان می‌دهد بیت‌های مد نظر خود را در علامت بسته مشخص کنید. این مقدار سپس برای انجام عملیات AND بیتی روی هر علامت اضافه‌شده به کار می‌رود. مقدار markmask می‌تواند هر عددی بین 1 تا 4294967295 باشد؛ به طور پیش‌فرض تمام ۳۲ بیت تنظیم شده‌اند.

مقدار mark می‌تواند هر مقداری بین 0 تا 4294967295 باشد.

مجموعه‌های نوع hash:ip,mark نیازمند دو پارامتر src/dst از ماژول‌های هسته تطابق set و هدف SET هستند.

مثال‌ها:

ipset create foo hash:ip,mark
ipset add foo 192.168.1.0/24,555
ipset add foo 192.168.1.1,0x63
ipset add foo 192.168.1.1,111236

نوع مجموعه hash:net,port,net رفتاری مشابه hash:ip,port,net دارد اما مقدار cidr را هم برای پارامتر اول و هم برای پارامتر آخر می‌پذیرد. هر یک از زیرشبکه‌ها در صورتی که تمایل داشته باشید پورت را میان تمام مقاصد تطبیق دهید، می‌تواند به صورت /0 تعیین شود.

CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := netaddr,[proto:]port,netaddr

ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := netaddr,[proto:]port,netaddr

TEST-ENTRY := netaddr,[proto:]port,netaddr

که در آن

netaddr := ip[/cidr]

برای بخش [proto:]port عناصر به توضیحات نوع مجموعه hash:ip,port مراجعه کنید. برای بخش netaddr عناصر به توضیحات نوع مجموعه hash:net مراجعه فرمایید.

از دیدگاه تطابق نت‌فیلتر set، جستجو برای تطابق همواره از کوچک‌ترین اندازه بلوک شبکه (خاص‌ترین cidr) تا بزرگ‌ترین آن (عمومی‌ترین cidr) افزوده‌شده به مجموعه آغاز می‌شود. هنگام افزودن یا حذف سه‌تایی‌ها به مجموعه توسط هدف نت‌فیلتر SET، با خاص‌ترین مقدار cidr موجود در مجموعه، یا در صورت خالی بودن مجموعه با مقدار cidr میزبان اضافه یا حذف خواهد شد. زیرشبکه نخست هنگام انجام جستجوی خاص‌ترین تقدم دارد، درست همانند hash:net,net.

زمان جستجو به صورت خطی با تعداد مقادیر مختلف cidr افزوده‌شده به مجموعه و با تعداد مقادیر ثانویه cidr به ازای هر مقدار اولیه افزایش می‌یابد.

مجموعه‌های نوع hash:net,port,net نیازمند سه پارامتر src/dst از ماژول‌های هسته تطابق set و هدف SET هستند.

مثال‌ها:

ipset create foo hash:net,port,net
ipset add foo 192.168.1.0/24,0,10.0.0/24
ipset add foo 192.168.2.0/24,25,10.1.0.0/16
ipset test foo 192.168.1.1,80,10.0.0.1

نوع مجموعه hash:net,iface از یک جدول درهم‌سازی برای ذخیره جفت‌های آدرس شبکه IP با اندازه‌های مختلف و نام رابط شبکه استفاده می‌کند.

CREATE-OPTIONS := [ family { inet | inet6 } ] [ hashsize value ] [ maxelem value ] [ bucketsize value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := netaddr,[physdev:]iface

ADD-OPTIONS := [ timeout value ] [ nomatch ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ] [ wildcard ]

DEL-ENTRY := netaddr,[physdev:]iface

TEST-ENTRY := netaddr,[physdev:]iface

که در آن

netaddr := ip[/cidr]

برای بخش netaddr عناصر به توضیحات مربوط به نوع مجموعه hash:net مراجعه کنید.

هنگام افزودن، حذف یا آزمودن مدخل‌ها، اگر پارامتر پیشوند cidr مشخص نشود، مقدار پیشوند میزبان فرض می‌شود. هنگام افزودن یا حذف مدخل‌ها، عنصر دقیق اضافه یا حذف می‌شود و عناصر هم‌پوشان توسط هسته بررسی نمی‌شوند. هنگام آزمودن مدخل‌ها، اگر یک آدرس میزبان آزموده شود، هسته تلاش می‌کند تا آدرس میزبان را در شبکه‌های افزوده‌شده به مجموعه تطبیق دهد و نتیجه را متناسب با آن گزارش نماید.

از دیدگاه تطابق نت‌فیلتر set، جستجو برای تطابق همیشه از کوچک‌ترین اندازه بلوک شبکه (خاص‌ترین پیشوند) تا بزرگ‌ترین آن (عمومی‌ترین پیشوند) افزوده‌شده به مجموعه آغاز می‌شود. هنگام افزودن یا حذف آدرس‌های IP به مجموعه توسط هدف نت‌فیلتر SET، با خاص‌ترین پیشوندی که در مجموعه یافت می‌شود، یا در صورت خالی بودن مجموعه با مقدار پیشوند میزبان اضافه یا حذف خواهد شد.

دومین پارامتر جهت در ماژول‌های تطابق set و هدف SET متناظر با رابط ورودی یا خروجی است: پارامتر src به رابط ورودی (مشابه فلگ -i در iptables)، در حالی که dst به رابط خروجی (مشابه فلگ -o در iptables) اشاره دارد. هنگامی که رابط با physdev: علامت‌گذاری شده باشد، رابط به عنوان پورت پل (bridge port) ورودی یا خروجی تفسیر می‌شود.

زمان جستجو به صورت خطی با تعداد مقادیر پیشوندهای مختلف افزوده‌شده به مجموعه افزایش می‌یابد.

محدودیت داخلی نوع مجموعه hash:net,iface این است که یک پیشوند شبکه یکسان را نمی‌توان با بیش از ۶۴ رابط مختلف در یک مجموعه ذخیره کرد.

مثال‌ها:

ipset create foo hash:net,iface
ipset add foo 192.168.0/24,eth0
ipset add foo 10.1.0.0/16,eth1
ipset test foo 192.168.0/24,eth0

نوع list:set از یک فهرست ساده استفاده می‌کند که در آن می‌توانید نام مجموعه‌ها را ذخیره کنید.

CREATE-OPTIONS := [ size value ] [ timeout value ] [ counters ] [ comment ] [ skbinfo ]

ADD-ENTRY := setname [ { before | after } setname ]

ADD-OPTIONS := [ timeout value ] [ packets value ] [ bytes value ] [ comment string ] [ skbmark value ] [ skbprio value ] [ skbqueue value ]

DEL-ENTRY := setname [ { before | after } setname ]

TEST-ENTRY := setname [ { before | after } setname ]

گزینه‌های اختیاری دستور create:

اندازه فهرست که مقدار پیش‌فرض آن 8 است. این پارامتر از نسخه 6.24 نرم‌افزار ipset به بعد نادیده گرفته می‌شود.

با دستور ipset می‌توانید نام مجموعه‌ها را در مجموعه‌ای از نوع list:set اضافه، حذف و بررسی کنید.

توسط تطابق set یا هدف SET نت‌فیلتر می‌توانید مدخل‌ها را در مجموعه‌های افزوده‌شده به مجموعه نوع list:set بیازمایید، اضافه کنید یا حذف نمایید. تطابق تلاش خواهد کرد تا یک مدخل منطبق را در مجموعه‌ها بیابد و هدف تلاش خواهد کرد تا یک مدخل را به نخستین مجموعه‌ای که امکان افزودن به آن وجود دارد اضافه کند. تعداد گزینه‌های جهت تطابق و هدف اهمیت دارد: مجموعه‌هایی که به پارامترهای بیشتری نسبت به مقدار مشخص‌شده نیاز دارند نادیده گرفته می‌شوند، در حالی که مجموعه‌های دارای پارامترهای برابر یا کمتر بررسی شده و عناصر به آن‌ها اضافه یا حذف می‌شوند. برای مثال اگر a و b مجموعه‌هایی از نوع list:set باشند، در دستور:

iptables -m set --match-set a src,dst -j SET --add-set b src,dst

تطابق و هدف هر مجموعه‌ای را در a و b که سه‌تایی‌های داده را ذخیره می‌کند نادیده می‌گیرند، اما تمام مجموعه‌های با ذخیره‌سازی داده تکی یا دوگانه را در مجموعه a بررسی کرده و در نخستین مجموعه منطبق متوقف می‌شوند، و سپس پارامتر src را به نخستین مجموعه داده تکی، یا پارامترهای src,dst را به نخستین مجموعه داده دوگانه در b که امکان افزودن مدخل به آن فراهم باشد اضافه می‌کنند. می‌توانید مجموعه‌ای از نوع list:set را به عنوان یک اجتماع مرتب از عناصر مجموعه‌ها تصور کنید.

لطفاً توجه داشته باشید: با دستور ipset می‌توانید نام مجموعه‌ها را در یک مجموعه از نوع list:set اضافه، حذف و بررسی (test) کنید، و نه حضور یکی از اعضای مجموعه (مانند یک آدرس IP) را.

مدخل‌های مجموعه با مقدار صفر را نمی‌توان با روش‌های درهم‌سازی استفاده کرد. مقدار پروتکل صفر نیز برای پورت‌ها قابل استفاده نیست.

اگر می‌خواهید زیرشبکه‌های هم‌اندازه از یک شبکه معین (مثلاً بلوک‌های /24 از یک شبکه /8) را ذخیره کنید، از نوع مجموعه bitmap:ip استفاده نمایید. اگر می‌خواهید شبکه‌های هم‌اندازه تصادفی (مثلاً بلوک‌های تصادفی /24) را ذخیره کنید، از نوع مجموعه hash:ip استفاده کنید. اگر بلوک‌های شبکه‌ای با اندازه‌های تصادفی دارید، از hash:net استفاده نمایید.

تطابق روی آدرس‌های MAC مقصد با استفاده از پارامتر dst در ماژول‌های هسته نت‌فیلتر تطابق set تنها در صورتی کار خواهد کرد که آدرس MAC مقصد در مرحله پردازش مربوطه در بسته موجود باشد؛ یعنی تنها برای بسته‌های ورودی در زنجیره‌های PREROUTING، INPUT و FORWARD در برابر آدرس MAC همان‌طور که در اصل در بسته دریافتی یافت شده است (معمولاً یکی از آدرس‌های MAC میزبان محلی) اعمال می‌شود. این آدرس، آن آدرس MAC مقصدی نیست که یک آدرس IP مقصد پس از مسیریابی به آن حل می‌شود. اگر آدرس MAC در دسترس نباشد (برای مثال در زنجیره OUTPUT)، بسته به سادگی مطابقت داده نخواهد شد.

سازگاری رو به عقب حفظ شده و نحو قدیمی ipset همچنان پشتیبانی می‌شود.

انواع مجموعه‌های iptree و iptreemap حذف شده‌اند: اگر به آن‌ها ارجاع دهید، به طور خودکار با مجموعه‌های نوع hash:ip جایگزین می‌شوند.

پیام‌های خطای گوناگون در خطای استاندارد چاپ می‌شوند. کد خروج برای عملکرد صحیح صفر (0) است.

اشکال نرم‌افزاری؟ خیر، فقط قابلیت‌های جالب! :\-) شوخی بود، اشکال شناخته‌شده‌ای وجود ندارد...

iptables(8), ip6tables(8) iptables-extensions(8)

Jozsef Kadlecsik برنامه ipset را نوشت که بر پایه ippool اثر Joakim Axelsson، Patrick Schaaf و Martin Josefsson بنا شده است.
Sven Wegener نوع iptreemap را نوشت.

I stand on the shoulders of giants.

June 25, 2015 Jozsef Kadlecsik