xdp-filter(8) A simple XDP-powered packet filter xdp-filter(8)

xdp-filter - فیلتر بسته ساده مبتنی بر XDP

ابزار XDP-filter یک ابزار فیلتر کردن بسته‌ها با استفاده از XDP است. این ابزار عمداً ساده طراحی شده و بنابراین قابلیت‌های تطبیق مشابهی با مثلاً netfilter ندارد. در عوض، به لطف XDP، می‌تواند به نرخ‌های دورریزی (drop rate) بسیار بالایی دست یابد: ده‌ها میلیون بسته در ثانیه روی یک هسته پردازنده.

نحو اجرای xdp-filter به صورت زیر است:

xdp-filter COMMAND [options]
Where COMMAND can be one of:
       load        - load xdp-filter on an interface
       unload      - unload xdp-filter from an interface
       port        - add a port to the filter list
       ip          - add an IP address to the filter list
       ether       - add an Ethernet MAC address to the filter list
       status      - show current xdp-filter status
       poll        - poll statistics output
       help        - show the list of available commands

هر دستور و گزینه‌های آن در ادامه توضیح داده شده است. همچنین می‌توانید از xdp-filter COMMAND --help برای مشاهده گزینه‌های هر دستور استفاده کنید.

برای استفاده از xdp-filter، ابتدا باید روی یک رابط شبکه بارگذاری شود. این کار با دستور load انجام می‌شود که نام رابط شبکه را به عنوان یک پارامتر می‌گیرد و به صورت اختیاری اجازه مشخص کردن ویژگی‌هایی را می‌دهد که باید گنجانده شوند. به طور پیش‌فرض تمام ویژگی‌ها بارگذاری می‌شوند، اما لغو انتخاب برخی ویژگی‌ها می‌تواند سرعت تطبیق بسته‌ها را بالا ببرد و کارایی را به میزان قابل توجهی افزایش دهد.

نحو دستور load به صورت زیر است:

xdp-filter load [options] <ifname>

که در آن <ifname> نام رابط شبکه برای بارگذاری xdp-filter روی آن است و باید مشخص شود. گزینه‌های پشتیبانی‌شده عبارتند از:

مشخص می‌کند که برنامه XDP در چه حالتی باید بارگذاری شود. مقادیر معتبر عبارتند از 'native' که حالت پیش‌فرض XDP درون درایور است، 'skb' که از به اصطلاح حالت skb (معروف به XDP عمومی یا generic XDP) استفاده می‌کند، یا 'hw' که باعث برون‌سپاری برنامه به سخت‌افزار می‌شود.

این گزینه سیاستی را تنظیم می‌کند که xdp-filter روی بسته‌هایی که با هیچ‌یک از قوانین فیلتر تطبیق ندارند اعمال می‌کند. مقدار پیش‌فرض allow است که در آن به بسته‌های فاقد تطبیق با قوانین اجازه عبور داده می‌شود. گزینه دیگر deny است که در آن تمام بسته‌ها دور ریخته می‌شوند مگر مواردی که با گزینه‌های فیلتر مطابقت داشته باشند.

نمی‌توان xdp-filter را به طور هم‌زمان در هر دو حالت خط‌مشی deny و allow روی سیستم بارگذاری کرد. توجه داشته باشید که بارگذاری xdp-filter در حالت deny تمام ترافیک رابط شبکه را تا زمان نصب قوانین مناسب allow دور خواهد ریخت؛ بنابراین برای جلوگیری از قطع دسترسی به سیستم از راه دور، دقت لازم است.

از این گزینه برای انتخاب ویژگی‌هایی که باید هنگام بارگذاری xdp-filter گنجانده شوند استفاده کنید. مقدار پیش‌فرض، بارگذاری تمام ویژگی‌های موجود است. برای انتخاب ویژگی‌های مجزا، یک یا چند مورد از گزینه‌های زیر را مشخص کنید:

  • tcp: پشتیبانی از فیلتر کردن بر اساس شماره پورت TCP
  • udp: پشتیبانی از فیلتر کردن بر اساس شماره پورت UDP
  • ipv6: پشتیبانی از فیلتر کردن بر اساس نشانی‌های IPv6
  • ipv4: پشتیبانی از فیلتر کردن بر اساس نشانی‌های IPv4
  • ethernet: پشتیبانی از فیلتر کردن بر اساس نشانی‌های MAC اترنت

چندین ویژگی را با جدا کردن آن‌ها با کاما مشخص کنید؛ به عنوان مثال: tcp,udp,ipv6.

فعال‌سازی گزارش‌گیری اشکال‌زدایی. درج دوباره این گزینه جزئیات بیشتری ارائه می‌دهد.

نمایش خلاصه‌ای از گزینه‌های موجود.

دستور unload برنامه xdp-filter را از یک (یا تمام) رابط‌های شبکه تخلیه کرده و وضعیت برنامه را پاکسازی می‌کند.

نحو دستور unload به صورت زیر است:

xdp-filter unload [options] <ifname>

که در آن <ifname> نام رابط شبکه برای تخلیه xdp-filter از آن است و باید مشخص شود مگر اینکه گزینه --all به کار رود. گزینه‌های پشتیبانی‌شده عبارتند از:

این گزینه را برای حذف xdp-filter از تمام رابط‌های شبکه‌ای که روی آن‌ها بارگذاری شده است مشخص کنید. در صورت تعیین این گزینه، نیازی به درج <ifname> نیست.

این گزینه همچنین می‌تواند برای پاکسازی تمام وضعیت‌های xdp-filter در صورتی که برنامه(های) XDP با روش‌های دیگری تخلیه شده باشند استفاده شود.

این گزینه را برای جلوگیری از پاک شدن وضعیت نگاشت‌های برنامه توسط xdp-filter مشخص کنید. به طور پیش‌فرض، تمام نگاشت‌های BPF که دیگر مورد نیاز هیچ برنامه بارگذاری‌شده‌ای نیستند حذف می‌شوند. با این حال، این کار محتویات نگاشت‌ها (قوانین فیلتر) را نیز حذف می‌کند؛ بنابراین می‌توان از این گزینه برای نگه‌داشتن نگاشت‌ها استفاده کرد تا قوانین تا زمان بارگذاری مجدد xdp-filter باقی بمانند.

فعال‌سازی گزارش‌گیری اشکال‌زدایی. درج دوباره این گزینه جزئیات بیشتری ارائه می‌دهد.

نمایش خلاصه‌ای از گزینه‌های موجود.

از دستور port برای افزودن یک پورت TCP یا UDP به فهرست تطبیق xdp-filter استفاده کنید. برای کارکرد این دستور، xdp-filter باید با ویژگی udp یا tcp (یا هر دو) حداقل روی یک رابط شبکه بارگذاری شده باشد.

نحو دستور port به صورت زیر است:

xdp-filter port [options] <port>

که در آن <port> شماره پورت برای افزودن است (یا حذف در صورتی که --remove مشخص شده باشد). گزینه‌های پشتیبانی‌شده عبارتند از:

حذف پورت به جای افزودن آن.

انتخاب حالت فیلتر کردن. گزینه‌های معتبر src و dst هستند که هر دو می‌توانند به صورت src,dst مشخص شوند. اگر src مشخص شود، شماره پورت به عنوان تطبیق پورت مبدا اضافه خواهد شد؛ در حالی که اگر dst مشخص شود، شماره پورت به عنوان تطبیق پورت مقصد افزوده می‌شود. اگر هر دو مشخص شوند، در صورتی که پورت مبدا یا مقصد بسته برابر با شماره پورت مشخص‌شده باشد، تطبیق داده خواهد شد.

یکی (یا هر دو) از پروتکل‌های udp و/یا tcp را به ترتیب برای تطبیق با پورت‌های UDP یا TCP مشخص کنید.

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

فعال‌سازی گزارش‌گیری اشکال‌زدایی. درج دوباره این گزینه جزئیات بیشتری ارائه می‌دهد.

نمایش خلاصه‌ای از گزینه‌های موجود.

از دستور ip برای افزودن یک نشانی IPv6 یا IPv4 به فهرست تطبیق xdp-filter استفاده کنید.

نحو دستور ip به صورت زیر است:

xdp-filter ip [options] <ip>

که در آن <ip> نشانی IP برای افزودن است (یا حذف در صورتی که --remove مشخص شده باشد). نشانی‌های IPv4 یا IPv6 را می‌توان مشخص کرد، اما xdp-filter باید با ویژگی‌های متناظر (ipv4 و ipv6 به ترتیب) بارگذاری شده باشد. گزینه‌های پشتیبانی‌شده عبارتند از:

حذف نشانی IP به جای افزودن آن.

انتخاب حالت فیلتر کردن. گزینه‌های معتبر src و dst هستند که هر دو می‌توانند به صورت src,dst مشخص شوند. اگر src مشخص شود، نشانی IP به عنوان تطبیق IP مبدا اضافه خواهد شد؛ در حالی که اگر dst مشخص شود، نشانی IP به عنوان تطبیق IP مقصد افزوده می‌شود. اگر هر دو مشخص شوند، در صورتی که IP مبدا یا مقصد بسته برابر با نشانی IP مشخص‌شده باشد، تطبیق داده خواهد شد.

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

فعال‌سازی گزارش‌گیری اشکال‌زدایی. درج دوباره این گزینه جزئیات بیشتری ارائه می‌دهد.

نمایش خلاصه‌ای از گزینه‌های موجود.

از دستور ether برای افزودن یک نشانی MAC اترنت به فهرست تطبیق xdp-filter استفاده کنید. برای کارکرد این دستور، xdp-filter باید حداقل روی یک رابط شبکه با ویژگی ethernet بارگذاری شده باشد.

نحو دستور ether به صورت زیر است:

xdp-filter ether [options] <addr>

که در آن <addr> نشانی MAC برای افزودن است (یا حذف در صورتی که --remove مشخص شده باشد). گزینه‌های پشتیبانی‌شده عبارتند از:

حذف نشانی MAC به جای افزودن آن.

انتخاب حالت فیلتر کردن. گزینه‌های معتبر src و dst هستند که هر دو می‌توانند به صورت src,dst مشخص شوند. اگر src مشخص شود، نشانی MAC به عنوان تطبیق MAC مبدا اضافه خواهد شد؛ در حالی که اگر dst مشخص شود، نشانی MAC به عنوان تطبیق MAC مقصد افزوده می‌شود. اگر هر دو مشخص شوند، در صورتی که MAC مبدا یا مقصد بسته برابر با نشانی MAC مشخص‌شده باشد، تطبیق داده خواهد شد.

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

فعال‌سازی گزارش‌گیری اشکال‌زدایی. درج دوباره این گزینه جزئیات بیشتری ارائه می‌دهد.

نمایش خلاصه‌ای از گزینه‌های موجود.

دستور status وضعیت فعلی xdp-filter را چاپ می‌کند: روی کدام رابط‌های شبکه بارگذاری شده است، فهرست فعلی قوانین، و آمارهایی درباره تعداد کل بسته‌های پردازش‌شده و تعداد دفعات اعمال هر قانون.

نحو دستور status به صورت زیر است:

xdp-filter status [options]

گزینه‌های پشتیبانی‌شده عبارتند از:

فعال‌سازی گزارش‌گیری اشکال‌زدایی. درج دوباره این گزینه جزئیات بیشتری ارائه می‌دهد.

نمایش خلاصه‌ای از گزینه‌های موجود.

دستور poll به صورت دوره‌ای نگاشت آماری xdp-filter را پایش کرده و تعداد کل بسته‌ها و بایت‌های پردازش‌شده توسط xdp-filter، و همچنین تعداد پردازش‌شده در آخرین بازه پایش را به صورت بسته (و بایت) در ثانیه چاپ می‌کند. این دستور می‌تواند برای بررسی عملکرد xdp-filter و مقایسه کارایی مجموعه‌های مختلف ویژگی‌های قابل انتخاب با پارامتر load استفاده شود.

نحو دستور poll به صورت زیر است:

xdp-filter poll [options]

گزینه‌های پشتیبانی‌شده عبارتند از:

بازه پایش، به میلی‌ثانیه. مقدار پیش‌فرض ۱۰۰۰ (۱ ثانیه) است.

فعال‌سازی گزارش‌گیری اشکال‌زدایی. درج دوباره این گزینه جزئیات بیشتری ارائه می‌دهد.

نمایش خلاصه‌ای از گزینه‌های موجود.

برای فیلتر کردن تمام بسته‌های ورودی به پورت 80 روی eth0، دستورات زیر را وارد کنید:

# xdp-filter load eth0 -f tcp,udp
# xdp-filter port 80

برای فیلتر کردن تمام بسته‌ها به جز بسته‌های ارسالی از نشانی IP برابر با fc00:dead:cafe::1، دستورات زیر را وارد کنید (مراقب باشید، این کار می‌تواند دسترسی از راه دور شما را قطع کند!):

# xdp-filter load eth0 -f ipv6 -p deny
# xdp-filter ip fc00:dead:cafe::1 -m src

برای مجاز دانستن بسته‌ها از هر یک از نشانی‌های IP برابر با fc00:dead:cafe::1 یا ورودی به پورت 22، دستورات زیر را وارد کنید (مراقب باشید، این کار می‌تواند دسترسی از راه دور شما را قطع کند!):

# xdp-filter load eth0 -f ipv6,tcp -p deny
# xdp-filter port 22
# xdp-filter ip fc00:dead:cafe::1 -m src

لطفاً هرگونه اشکال را در گیت‌هاب گزارش دهید: https://github.com/xdp-project/xdp-tools/issues

برنامه xdp-filter توسط Toke Høiland-Jørgensen و Jesper Dangaard Brouer نوشته شده است. این صفحه راهنما توسط Toke Høiland-Jørgensen نوشته شده است.

September 5, 2022 V1.6.3