IPSET(8) IPSET(8) نام (NAME) ipset - ابزار مدیریت مجموعه‌های IP (IP sets) خلاصه دستور (SYNOPSIS) 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 - توضیحات (DESCRIPTION) دستور ipset برای راه‌اندازی، نگهداری و بررسی مجموعه‌های IP (موسوم به IP sets) در هسته لینوکس به کار می‌رود. بسته به نوع مجموعه، یک مجموعه IP می‌تواند آدرس‌های IP(v4/v6)، شماره پورت‌های (TCP/UDP)، جفت‌های آدرس IP و MAC، جفت‌های آدرس IP و شماره پورت و موارد دیگر را در خود ذخیره کند. تعاریف انواع مجموعه را در ادامه مشاهده کنید. تطابق‌ها و اهداف در Iptables که به مجموعه‌ها ارجاع می‌دهند، ارجاعاتی (references) ایجاد می‌کنند که از مجموعه‌های مشخص‌شده در هسته محافظت می‌نمایند. تا زمانی که حتی یک ارجاع به یک مجموعه اشاره داشته باشد، آن مجموعه را نمی‌توان حذف کرد (destroy). گزینه‌ها (OPTIONS) گزینه‌هایی که توسط ipset شناسایی می‌شوند را می‌توان به چند گروه مختلف تقسیم کرد. دستورات (COMMANDS) این گزینه‌ها عملیات مورد نظر برای اجرا را مشخص می‌کنند. در خط فرمان تنها یکی از آن‌ها را می‌توان مشخص کرد، مگر اینکه در زیر خلاف آن ذکر شده باشد. برای نسخه کامل نام دستورات، تنها کافی است به اندازه‌ای از حروف استفاده کنید که ipset بتواند آن را از سایر دستورات متمایز کند. تجزیه‌کننده ipset هنگام جستجو برای کوتاه‌ترین تطابق در نام‌های بلند دستورات، از ترتیبی که در اینجا آمده پیروی می‌کند. n, create SETNAME TYPENAME [ CREATE-OPTIONS ] ایجاد یک مجموعه مشخص‌شده با setname و نوع تعیین‌شده (typename). ممکن است نوع مجموعه به گزینه‌های اختصاصی خود نیاز داشته باشد. اگر گزینه -exist مشخص شود، ipset از خطایی که در صورت وجود داشتن مجموعه‌ای با همان نام و پارامترهای ساخت یکسان رخ می‌دهد، صرف‌نظر می‌کند. add SETNAME ADD-ENTRY [ ADD-OPTIONS ] افزودن یک مدخل معین به مجموعه. اگر گزینه -exist مشخص شده باشد، ipset در صورتی که مدخل از قبل به مجموعه افزوده شده باشد، از خطا چشم‌پوشی می‌کند. del SETNAME DEL-ENTRY [ DEL-OPTIONS ] حذف یک مدخل از مجموعه. اگر گزینه -exist مشخص شده باشد و مدخل در مجموعه وجود نداشته باشد (شاید قبلاً منقضی شده باشد)، از اجرای دستور چشم‌پوشی می‌شود. test SETNAME TEST-ENTRY [ TEST-OPTIONS ] بررسی وجود یک مدخل در مجموعه. در صورتی که مدخل آزموده‌شده در مجموعه وجود داشته باشد وضعیت خروج صفر، و اگر در مجموعه یافت نشود مقداری غیرصفر خواهد بود. x, destroy [ SETNAME ] نابودسازی (حذف) مجموعه مشخص‌شده، یا تمام مجموعه‌ها در صورتی که نامی ارائه نشده باشد. اگر مجموعه دارای ارجاع (reference) باشد، هیچ عملیاتی انجام نمی‌شود و هیچ مجموعه‌ای حذف نخواهد شد. list [ SETNAME ] [ OPTIONS ] فهرست کردن داده‌های هدر و مدخل‌های مجموعه مشخص‌شده، یا برای تمام مجموعه‌ها در صورتی که نامی ارائه نشده باشد. گزینه -resolve را می‌توان برای اجبار به وضوح‌یابی نام‌ها (که ممکن است کند باشد) به کار برد. هنگامی که گزینه -sorted داده شود، مدخل‌ها به صورت مرتب‌شده فهرست یا ذخیره می‌شوند (که ممکن است کند باشد). گزینه -output می‌تواند برای کنترل قالب نمایش خروجی استفاده شود: plain، save، xml یا json. (حالت پیش‌فرض plain است). اگر گزینه -name مشخص شود، فقط نام مجموعه‌های موجود فهرست می‌شود. اگر گزینه -terse مشخص شود، فقط نام مجموعه‌ها و هدرهای آن‌ها فهرست می‌شود. خروجی در خروجی استاندارد چاپ می‌شود، و گزینه -file را می‌توان برای مشخص کردن نام یک فایل به جای خروجی استاندارد به کار برد. save [ SETNAME ] ذخیره مجموعه معین یا تمام مجموعه‌ها (در صورت مشخص نشدن نام) در خروجی استاندارد در قالبی که دستور restore بتواند آن را بخواند. گزینه -file می‌تواند برای مشخص کردن نام فایل به جای خروجی استاندارد استفاده شود. restore بازیابی یک نشست ذخیره‌شده که توسط دستور save تولید شده است. نشست ذخیره‌شده می‌تواند از ورودی استاندارد تغذیه شود یا از گزینه -file برای مشخص کردن نام فایل به جای ورودی استاندارد استفاده شود. لطفاً توجه داشته باشید که مجموعه‌ها و عناصر موجود توسط restore پاک نمی‌شوند مگر اینکه در فایل بازیابی صریحاً چنین قید شده باشد. تمام دستورات در حالت بازیابی مجاز هستند به جز list، help، version، حالت تعاملی و خود دستور restore. flush [ SETNAME ] تخلیه تمام مدخل‌ها از مجموعه مشخص‌شده، یا تخلیه تمام مجموعه‌ها در صورت مشخص نشدن نام. e, rename SETNAME-FROM SETNAME-TO تغییر نام یک مجموعه. مجموعه‌ای که با SETNAME-TO مشخص می‌شود نباید از قبل وجود داشته باشد. w, swap SETNAME-FROM SETNAME-TO تعویض محتوای دو مجموعه با یکدیگر، یا به عبارت دیگر جابجایی نام دو مجموعه. مجموعه‌های ارجاع‌شده باید از قبل وجود داشته باشند و تنها مجموعه‌هایی با انواع سازگار را می‌توان با یکدیگر تعویض کرد. help [ TYPENAME ] چاپ راهنما، و در صورت مشخص شدن TYPENAME چاپ راهنمای اختصاصی نوع مجموعه. version چاپ نسخه برنامه. - اگر یک خط تیره به عنوان دستور مشخص شود، ipset وارد یک حالت تعاملی ساده می‌شود و دستورات را از ورودی استاندارد می‌خواند. حالت تعاملی را می‌توان با وارد کردن شبه‌دستور quit به پایان رساند. سایر گزینه‌ها (OTHER OPTIONS) گزینه‌های تکمیلی زیر را می‌توان مشخص کرد. نام‌های بلند گزینه‌ها را نمی‌توان به صورت مخفف به کار برد. -!, -exist صرف‌نظر کردن از خطاها در حالتی که مجموعه‌ای دقیقاً یکسان قرار است ایجاد شود، مدخلی که از قبل اضافه شده مجدداً افزوده می‌شود، یا مدخلی که وجود ندارد حذف می‌گردد. -o, -output { plain | save | xml | json } انتخاب قالب خروجی برای دستور list. -q, -quiet خاموش‌سازی هرگونه خروجی در خروجی استاندارد و خطای استاندارد. با این حال اگر ipset نتواند به کار خود ادامه دهد، همچنان با کد خطا خارج می‌شود. -r, -resolve هنگام فهرست کردن مجموعه‌ها، وضوح‌یابی نام‌ها را اجباری می‌کند. برنامه تلاش خواهد کرد تا مدخل‌های IP را به صورت نام میزبان حل کند که نیازمند جستجوهای کند DNS است. -s, -sorted خروجی مرتب‌شده. هنگام فهرست کردن یا ذخیره مجموعه‌ها، مدخل‌ها به صورت مرتب‌شده نمایش داده می‌شوند. -n, -name تنها فهرست کردن نام‌های مجموعه‌های موجود؛ یعنی جلوگیری از نمایش هدرها و اعضای مجموعه. -t, -terse فهرست کردن نام مجموعه‌ها و هدرها؛ یعنی جلوگیری از نمایش اعضای مجموعه. -f, -file filename مشخص کردن نام یک فایل برای نوشتن در آن به جای خروجی استاندارد (در دستورهای list یا save) یا خواندن از آن به جای ورودی استاندارد (در دستور restore). مقدمه (INTRODUCTION) یک نوع مجموعه متشکل از روش ذخیره‌سازی که داده‌ها توسط آن ذخیره می‌شوند و نوع (یا انواع) داده‌هایی است که در مجموعه نگهداری می‌شوند. بنابراین پارامتر 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 اضافه شوند، اندازه جدول درهم‌سازی ثابت می‌ماند و حتی اگر مدخل جدید نتواند به مجموعه افزوده شود، اندازه آن دو برابر نخواهد شد. گزینه‌های عمومی ساخت و افزودن (GENERIC CREATE AND ADD OPTIONS) timeout تمام انواع مجموعه از پارامتر اختیاری 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, packets, bytes تمام انواع مجموعه از گزینه اختیاری counters هنگام ایجاد یک مجموعه پشتیبانی می‌کنند. اگر این گزینه مشخص شود، مجموعه با پشتیبانی از شمارنده‌های بسته (packet) و بایت (byte) به ازای هر عنصر ایجاد می‌شود. شمارنده‌های بسته و بایت هنگام افزودن (یا افزودن مجدد) عناصر به مجموعه صفر می‌شوند، مگر اینکه مقادیر شمارنده بسته و بایت صراحتاً با گزینه‌های packets و bytes مشخص شده باشند. مثالی از افزودن یک عنصر به مجموعه با مقادیر شمارنده غیرصفر: ipset create foo hash:ip counters ipset add foo 192.168.1.1 packets 42 bytes 1024 comment تمام انواع مجموعه از افزونه اختیاری 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, skbmark, skbprio, skbqueue تمام انواع مجموعه از افزونه اختیاری 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 hashsize این پارامتر برای دستور create در تمام مجموعه‌های نوع hash معتبر است. اندازه اولیه جدول درهم‌سازی را برای مجموعه تعریف می‌کند که مقدار پیش‌فرض آن 1024 است. اندازه جدول باید توانی از دو باشد؛ هسته به طور خودکار اندازه‌هایی را که توان دو نیستند به نخستین مقدار معتبر بعدی گرد می‌کند. مثال: ipset create test hash:ip hashsize 1536 maxelem این پارامتر برای دستور create در تمام مجموعه‌های نوع hash معتبر است. حداکثر تعداد عناصری را که می‌توان در مجموعه ذخیره کرد تعیین می‌کند که پیش‌فرض آن 65536 است. مثال: ipset create test hash:ip maxelem 2048 bucketsize این پارامتر برای دستور create در تمام مجموعه‌های نوع hash معتبر است. حداکثر تعداد عناصری را که می‌توان در یک سطل (bucket) جدول درهم‌سازی ذخیره کرد مشخص می‌کند. مقادیر مجاز هر عدد زوج بین 2 تا 14 است و مقدار پیش‌فرض 14 می‌باشد. تنظیم این مقدار بر روی مقادیر کوچک‌تر، ipset را وادار به ایجاد جداول درهم‌سازی بزرگ‌تر می‌کند که حافظه بیشتری مصرف می‌نمایند اما سرعت تطابق در مجموعه را افزایش می‌دهند. مثال: ipset create test hash:ip bucketsize 2 family { inet | inet6 } این پارامتر برای دستور 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 nomatch انواع مجموعه‌های hash که می‌توانند داده‌های نوع net را ذخیره کنند (یعنی hash:*net*) از گزینه اختیاری nomatch در هنگام افزودن مدخل‌ها پشتیبانی می‌نمایند. هنگام تطبیق عناصر در مجموعه، مدخل‌هایی که با nomatch علامت‌گذاری شده‌اند به گونه‌ای نادیده گرفته می‌شوند که گویی به مجموعه اضافه نشده‌اند؛ این ویژگی امکان ساخت مجموعه‌های دارای استثنا را فراهم می‌سازد. مثال مربوط به نوع درهم‌سازی hash:net را در زیر ببینید. هنگامی که عناصر توسط ipset بررسی (test) می‌شوند، فلگ‌های nomatch لحاظ می‌گردند. اگر کسی بخواهد وجود عنصری با نشان nomatch را در یک مجموعه بیازماید، باید آن فلگ را نیز مشخص کند. forceadd تمام انواع مجموعه‌های درهم‌سازی از پارامتر اختیاری forceadd هنگام ایجاد مجموعه پشتیبانی می‌کنند. هنگامی که مجموعه‌های ساخته‌شده با این گزینه پر شوند، افزودن بعدی به مجموعه ممکن است موفقیت‌آمیز باشد و یک مدخل تصادفی را از مجموعه بیرون براند. ipset create foo hash:ip forceadd wildcard این فلگ هنگام افزودن عناصر به مجموعه hash:net,iface معتبر است. اگر این فلگ تنظیم شود، هنگام مقایسه با این عنصر از تطابق پیشوندی استفاده می‌شود. برای مثال، عنصری که شامل نام رابط "eth" است، با هر نامی که این پیشوند را داشته باشد مطابقت خواهد داشت. انواع مجموعه (SET TYPES) bitmap:ip نوع مجموعه 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: range fromip-toip|ip/cidr ایجاد مجموعه بر اساس محدوده فراگیر آدرس مشخص‌شده که در قالب یک بازه آدرس IPv4 یا یک شبکه بیان می‌شود. اندازه محدوده (بر حسب مدخل‌ها) نمی‌تواند از سقف حداکثر 65536 عنصر فراتر رود. گزینه‌های اختیاری دستور create: netmask cidr هنگامی که پارامتر اختیاری 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 نوع مجموعه 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: range fromip-toip|ip/cidr ایجاد مجموعه از محدوده آدرس فراگیر مشخص‌شده که در قالب یک محدوده یا شبکه 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 نوع مجموعه 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: range [proto:]fromport-toport ایجاد مجموعه از محدوده پورت فراگیر مشخص‌شده. ماژول‌های هسته نت‌فیلتر تطابق 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 نوع مجموعه 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 cidr هنگامی که پارامتر اختیاری 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 bitmask mask این گزینه مشابه netmask عمل می‌کند اما هر آدرس معتبر IPv4/v6 را می‌پذیرد. لازم نیست که حتماً یک netmask معتبر باشد. hash:mac نوع مجموعه 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 نوع مجموعه 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 نوع مجموعه 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 نوع مجموعه 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 cidr هنگامی که پارامتر اختیاری netmask مشخص شود، آدرس‌های شبکه به جای آدرس‌های میزبان IP در مجموعه ذخیره خواهند شد. مقدار پیشوند cidr باید بین 1 تا 32 برای IPv4 و بین 1 تا 128 برای IPv6 باشد. اگر آدرس شبکه، که از اعمال ماسک روی آدرس با نت‌ماسک حاصل می‌شود، در مجموعه یافت شود، آن آدرس IP در مجموعه خواهد بود. bitmask mask این گزینه مشابه 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 نوع مجموعه 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 عناصر را می‌توان به صورت‌های زیر بیان کرد، که در آن‌ها دگرگونی‌های محدوده هنگام افزودن یا حذف مدخل‌ها معتبر هستند: portname[-portname] پورت TCP یا محدوده‌ای از پورت‌ها بیان‌شده در شناسه‌های نام پورت TCP از /etc/services portnumber[-portnumber] پورت TCP یا محدوده‌ای از پورت‌ها بیان‌شده در شماره پورت‌های TCP tcp|sctp|udp|udplite:portname|portnumber[-portname|portnumber] پورت یا محدوده پورت TCP، SCTP، UDP یا UDPLITE بیان‌شده در نام (نام‌های) پورت یا شماره (شماره‌های) پورت icmp:codename|type/code نام کد یا نوع/کد ICMP. شناسه‌های نام کد ICMP پشتیبانی‌شده را همیشه می‌توان با دستور help فهرست کرد. icmpv6:codename|type/code نام کد یا نوع/کد ICMPv6. شناسه‌های نام کد ICMPv6 پشتیبانی‌شده را همیشه می‌توان با دستور help فهرست کرد. proto:0 سایر پروتکل‌ها، به عنوان یک شناسه از /etc/protocols یا عدد. شماره شبه‌پورت باید صفر باشد. مجموعه‌های نوع hash:ip,port نیازمند دو پارامتر src/dst از ماژول‌های هسته تطابق set و هدف SET هستند. گزینه‌های اختیاری دستور create: netmask cidr هنگامی که پارامتر اختیاری netmask مشخص شود، آدرس‌های شبکه به جای آدرس‌های میزبان IP در مجموعه ذخیره خواهند شد. مقدار پیشوند cidr باید بین 1 تا 32 برای IPv4 و بین 1 تا 128 برای IPv6 باشد. اگر آدرس شبکه، که از اعمال ماسک روی آدرس با نت‌ماسک حاصل می‌شود، در مجموعه یافت شود، آن آدرس IP در مجموعه خواهد بود. bitmask mask این گزینه مشابه 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 نوع مجموعه 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 نوع مجموعه 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 نوع مجموعه 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 نوع مجموعه 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: markmask value به شما امکان می‌دهد بیت‌های مد نظر خود را در علامت بسته مشخص کنید. این مقدار سپس برای انجام عملیات 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: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 نوع مجموعه 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 نوع 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: size value اندازه فهرست که مقدار پیش‌فرض آن 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) را. محدودیت‌های عمومی (GENERAL RESTRICTIONS) مدخل‌های مجموعه با مقدار صفر را نمی‌توان با روش‌های درهم‌سازی استفاده کرد. مقدار پروتکل صفر نیز برای پورت‌ها قابل استفاده نیست. نکات و توضیحات (COMMENTS) اگر می‌خواهید زیرشبکه‌های هم‌اندازه از یک شبکه معین (مثلاً بلوک‌های /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 جایگزین می‌شوند. عیب‌یابی (DIAGNOSTICS) پیام‌های خطای گوناگون در خطای استاندارد چاپ می‌شوند. کد خروج برای عملکرد صحیح صفر (0) است. اشکالات (BUGS) اشکال نرم‌افزاری؟ خیر، فقط قابلیت‌های جالب! :\-) شوخی بود، اشکال شناخته‌شده‌ای وجود ندارد... همچنین ببینید (SEE ALSO) iptables(8), ip6tables(8) iptables-extensions(8) نویسندگان (AUTHORS) Jozsef Kadlecsik برنامه ipset را نوشت که بر پایه ippool اثر Joakim Axelsson، Patrick Schaaf و Martin Josefsson بنا شده است. Sven Wegener نوع iptreemap را نوشت. نکته پایانی (LAST REMARK) I stand on the shoulders of giants. Jozsef Kadlecsik June 25, 2015 IPSET(8)