انتشار فیلتر بسته nftables 0.9.5

منتشر شده انتشار فیلتر بسته nftables 0.9.5، به عنوان جایگزینی برای iptables، ip6table، arptables و ebtable با یکپارچه سازی رابط های فیلتر بسته برای IPv4، IPv6، ARP و پل های شبکه توسعه می یابد. بسته nftables شامل اجزای فیلتر بسته است که در فضای کاربر اجرا می شود، در حالی که کار در سطح هسته توسط زیرسیستم nf_tables ارائه می شود که از زمان انتشار 3.13 بخشی از هسته لینوکس بوده است. تغییرات مورد نیاز برای انتشار nftables 0.9.5 در هسته گنجانده شده است لینوکس 5.7.

سطح هسته تنها یک رابط عمومی مستقل از پروتکل را فراهم می کند که عملکردهای اساسی را برای استخراج داده ها از بسته ها، انجام عملیات داده و کنترل جریان ارائه می دهد. قوانین فیلتر و کنترل کننده های خاص پروتکل در بایت کد در فضای کاربر کامپایل می شوند، پس از آن این بایت کد با استفاده از رابط Netlink در هسته بارگذاری می شود و در هسته در یک ماشین مجازی ویژه که یادآور BPF (فیلترهای بسته برکلی) است، اجرا می شود. این رویکرد به شما این امکان را می دهد که اندازه کدهای فیلترینگ در حال اجرا در سطح هسته را به میزان قابل توجهی کاهش دهید و تمام عملکردهای تجزیه قوانین و منطق کار با پروتکل ها را به فضای کاربر منتقل کنید.

نوآوری های اصلی:

  • پشتیبانی از شمارنده های بسته و ترافیک مرتبط با عناصر مجموعه به مجموعه ها اضافه شده است. شمارنده ها با استفاده از کلمه کلیدی "counter" فعال می شوند:

    جدول ip x {
    مجموعه y {
    نوع ip sadr
    مقابله با
    عناصر = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    زنجیر z {
    نوع فیلتر اولویت خروجی قلاب; سیاست پذیرش؛
    ip daddr @y
    }
    }

  • برای تنظیم مقادیر اولیه شمارنده ها، به عنوان مثال، برای بازیابی شمارنده های قبلی پس از راه اندازی مجدد، می توانید از دستور "nft -f" استفاده کنید:

    # cat ruleset.nft
    جدول ip x {
    مجموعه y {
    نوع ip sadr
    مقابله با
    عناصر = { 192.168.10.35 بسته شمارنده 1 بایت 84, 192.168.10.101 \
    شمارنده p 192.168.10.135 بسته شمارنده 0 بایت 0 }
    }

    زنجیر z {
    نوع فیلتر اولویت خروجی قلاب; سیاست پذیرش؛
    ip daddr @y
    }
    }
    # nft -f ruleset.nft
    مجموعه قوانین لیست #nft
    جدول ip x {
    مجموعه y {
    نوع ip sadr
    مقابله با
    عناصر = { 192.168.10.35 بسته شمارنده 1 بایت 84, 192.168.10.101 \
    شمارنده p 192.168.10.135 بسته شمارنده 0 بایت 0 }
    }

    زنجیر z {
    نوع فیلتر اولویت خروجی قلاب; سیاست پذیرش؛
    ip daddr @y
    }
    }

  • پشتیبانی ضد نیز به flowtable اضافه شده است:

    میز آی پی فو {
    نوار میز جریان {
    اولویت ورودی قلاب -100
    دستگاه‌ها = { eth0، eth1 }
    مقابله با
    }

    زنجیر جلو {
    نوع فیلتر قلاب جلو فیلتر اولویت;
    flow اضافه کردن @bar counter
    }
    }

    می توانید لیست شمارنده ها را با استفاده از دستور "conntrack -L" مشاهده کنید:

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 بسته=9 بایت=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 بسته=8 بایت=428 [OFFLOAD] mark=0 \
    secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
    بسته ها=1005763 بایت=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
    packets=967505 bytes=50310268 [OFFLOAD] mark=0 secctx=null use=2

  • در مجموعه‌های الحاق (الحاق، بسته‌های مشخصی از آدرس‌ها و پورت‌هایی که مقایسه را ساده می‌کنند)، می‌توان از دستورالعمل "typeof" استفاده کرد که نوع داده عناصر را برای بخش‌های تشکیل دهنده عناصر مجموعه تعیین می‌کند:

    میز آی پی فو {
    تنظیم لیست سفید {
    نوع ip sadr . tcp dport
    عناصر = { 192.168.10.35 . 80, 192.168.10.101. 80}
    }

    نوار زنجیر {
    نوع فیلتر hook prerouting priority filter; کاهش سیاست؛
    آی پی بابا tcp dport @whitelist قبول کنید
    }
    }

  • نوع دستورالعمل اکنون برای پیوستن به لیست نقشه ها نیز اعمال می شود:

    میز آی پی فو {
    نقشه adr2mark {
    نوع ip sadr . tcp dport: متا مارک
    عناصر = { 192.168.10.35 . 80: 0x00000001،
    192.168.10.135. 80 : 0x00000002 }
    }

    نوار زنجیر {
    نوع فیلتر hook prerouting priority filter; کاهش سیاست؛
    ست متا مارک ip daddr . tcp dport map @addr2mark قبول
    }
    }

  • پشتیبانی اضافه شده برای پیوستن به محدوده در مجموعه های ناشناس (بی نام):

    # nft اضافه کردن قانون inet فیلتر ورودی IP daddr. tcp dport\
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } قبول کنید

  • قابلیت دور انداختن بسته‌های دارای پرچم 802.1q (VLAN) هنگام پردازش پل‌های شبکه ارائه می‌شود:

    # nft اضافه کردن قانون پل foo نوار اتر نوع vlan reject با تنظیم مجدد tcp

  • اضافه شدن پشتیبانی برای تطبیق توسط شناسه جلسه TCP (شناسه conntrack). برای تعیین شناسه contrack، می توانید از گزینه "--output id" استفاده کنید:

    # conntrack -L — شناسه خروجی
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 بسته=2 \
    bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 بسته=2 بایت=320 \
    [مطمئن] mark=0 use=1 id=2779986232

    # nft اضافه کردن قانون foo bar ct id 2779986232 counter

منبع: opennet.ru

اضافه کردن نظر