nftables багц шүүлтүүрийн хувилбар 0.9.4

Нийтэлсэн пакет шүүлтүүрийн хувилбар nftables 0.9.4, IPv6, IPv4, ARP болон сүлжээний гүүрүүдэд зориулсан пакет шүүлтүүрийн интерфейсийг нэгтгэн iptables, ip6table, arptables болон ebtables-ийг орлуулахаар хөгжүүлж байна. Nftables багц нь хэрэглэгчийн орон зайд ажилладаг пакет шүүлтүүрийн бүрэлдэхүүн хэсгүүдийг агуулдаг бол цөмийн түвшний ажлыг 3.13 хувилбараас хойш Линуксийн цөмийн нэг хэсэг болсон nf_tables дэд системээр хангадаг. Nftables 0.9.4 хувилбарыг ажиллуулахад шаардлагатай өөрчлөлтүүд нь ирээдүйн цөмийн салбаруудад багтсан болно. Линуксийн 5.6.

Цөмийн түвшин нь пакетуудаас өгөгдөл гаргаж авах, өгөгдлийн үйлдлүүдийг гүйцэтгэх, урсгалыг хянах үндсэн функцуудыг хангадаг ерөнхий протоколоос хамааралгүй интерфэйсийг л хангадаг. Шүүлтүүрийн дүрэм болон протоколын тусгай зохицуулагчийг хэрэглэгчийн орон зайд байт код болгон эмхэтгэсний дараа энэ байт кодыг Netlink интерфейс ашиглан цөмд ачаалж, BPF (Berkeley Packet Filters) -ийг санагдуулам тусгай виртуал машинд цөмд ажиллуулдаг. Энэхүү арга нь цөмийн түвшинд ажиллаж байгаа шүүлтүүрийн кодын хэмжээг мэдэгдэхүйц бууруулж, протоколтой ажиллахын тулд задлан шинжлэх дүрэм, логикийн бүх функцийг хэрэглэгчийн орон зайд шилжүүлэх боломжийг олгодог.

Гол инноваци:

  • Холболтын мужуудын дэмжлэг (харьцуулалтыг хялбаршуулдаг холболт, тодорхой багц хаяг, портууд). Жишээлбэл, элементүүд нь хавсралт болох "цагаан жагсаалт"-ын хувьд "интервал" гэсэн тугийг зааж өгөх нь уг багц нь хавсралтад мужуудыг багтааж болохыг харуулах болно ("ipv4_addr . ipv4_addr . inet_service" хавсралтын хувьд өмнө нь яг тодорхой жагсаалт гаргах боломжтой байсан. "192.168.10.35. 192.68.11.123" маягтын таарч байгаа бөгөөд одоо та "80-192.168.10.35-192.168.10.40.") хаягийн бүлгүүдийг зааж өгч болно.

    хүснэгт ip foo {
    цагаан жагсаалт тохируулах {
    ipv4_addr гэж бичнэ үү. ipv4_addr. inet_service
    тугуудын интервал
    элементүүд = {192.168.10.35-192.168.10.40. 192.68.11.123-192.168.11.125. 80}
    }

    гинжин баар {
    төрөл шүүлтүүр дэгээ урьдчилан чиглүүлэх тэргүүлэх шүүлтүүр; бодлогын уналт;
    ip saddr. ip аав. tcp dport @ цагаан жагсаалт хүлээн авах
    }
    }

  • Багц болон газрын зургийн жагсаалтад тохирох үед элементийн форматыг тодорхойлдог "typeof" удирдамжийг ашиглах боломжтой.
    Жишээ нь:

    хүснэгт ip foo {
    цагаан жагсаалт тохируулах {
    typeof ip saddr
    элементүүд = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    гинжин баар {
    төрөл шүүлтүүр дэгээ урьдчилан чиглүүлэх тэргүүлэх шүүлтүүр; бодлогын уналт;
    ip daddr @ цагаан жагсаалт хүлээн авна уу
    }
    }

    хүснэгт ip foo {
    газрын зураг addr2mark {
    typeof ip saddr: мета тэмдэг
    элементүүд = {192.168.10.35: 0x00000001, 192.168.10.135: 0x00000002}
    }
    }

  • Газрын зургийн жагсаалт эсвэл нэрлэсэн багц дээр үндэслэн NAT хувиргалтыг тодорхойлохдоо хаяг, портыг зааж өгөх боломжийг олгодог NAT холболтод холболтыг ашиглах боломжийг нэмсэн:

    nft нэмэх дүрэм ip nat pre dnat ip addr . портоос IP saddr газрын зураг {1.1.1.1: 2.2.2.2. гучин }

    nft газрын зураг нэмэх IP nat destinations { type ipv4_addr . inet_service: ipv4_addr. inet_service \\; }
    nft нэмэх дүрэм ip nat pre dnat ip addr . ip saddr руу порт. tcp dport газрын зураг @ очих газрууд

  • Сүлжээний картаар гүйцэтгэдэг зарим шүүлтүүрийн үйлдлээр тоног төхөөрөмжийн хурдатгалыг дэмжих. Хурдасгах нь ethtool хэрэгслээр идэвхжсэн ("ethtool -K eth0 hw-tc-offload on"), дараа нь "offload" гэсэн тугийг ашиглан үндсэн гинжин хэлхээний nftables-д идэвхждэг. Линукс цөм 5.6-г ашиглах үед пакетуудыг хүлээн авах, хаях, хуулбарлах (давхах), дамжуулах (fwd) зэрэгтэй хослуулан толгойн талбарыг тааруулах, ирж буй интерфейсийг шалгахад техник хангамжийн хурдатгалыг дэмждэг. Доорх жишээнд 192.168.30.20 хаягаас ирсэн пакетуудыг буулгах үйлдлүүд нь пакетуудыг цөм рүү дамжуулахгүйгээр сүлжээний картын түвшинд хийгддэг.

    # муур файл.nft
    хүснэгт netdev x {
    гинж у {
    төрлийн шүүлтүүр дэгээ оролт төхөөрөмж eth0 тэргүүлэх 10; тугуудыг буулгах;
    ip saddr 192.168.30.20 дусал
    }
    }
    # nft -f файл.nft

  • Дүрэм дэх алдааны байршлын талаарх мэдээллийг сайжруулсан.

    # nft устгах дүрэм ip yz бариул 7
    Алдаа: Дүрэм боловсруулж чадсангүй: Ийм файл эсвэл лавлах байхгүй
    IP yz дүрмийг устгах 7
    ^

    # nft устгах дүрэм ip xx бариул 7
    Алдаа: Дүрэм боловсруулж чадсангүй: Ийм файл эсвэл лавлах байхгүй
    IP xx дүрмийг устгах 7
    ^

    # nft twst хүснэгтийг устгах
    Алдаа: Ийм файл эсвэл лавлах байхгүй; Та гэр бүлийн ip дээрх "тест" гэсэн хүснэгтийг хэлсэн үү?
    Twst хүснэгтийг устгах
    ^^^^

    Эхний жишээ нь "y" хүснэгт системд байхгүй, хоёр дахь нь "7" зохицуулагч байхгүй, гурав дахь жишээ нь хүснэгтийн нэрийг бичих үед үсгийн алдаа гарч байгааг харуулж байна.

  • "meta sdif" эсвэл "meta sdifname" гэж зааж өгснөөр боолын интерфейсийг шалгах дэмжлэг нэмэгдсэн:

    ... мета sdifname vrf1 ...

  • Баруун эсвэл зүүн ээлжийн үйл ажиллагааг дэмжих нэмэлт. Жишээлбэл, одоо байгаа пакет шошгыг 1 битээр зүүн тийш шилжүүлж, бага битийг 1 болгож тохируулахын тулд:

    … мета тэмдэглэгээ lshift 1 эсвэл 0x1 …

  • Өргөтгөсөн хувилбарын мэдээллийг харуулах "-V" сонголтыг хэрэгжүүлсэн.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli: унших мөр
    json: тиймээ
    minigmp: үгүй
    libxtables: тийм ээ

  • Одоо командын мөрийн сонголтыг командын өмнө зааж өгөх ёстой. Жишээлбэл, та "nft -a list ruleset" -ийг зааж өгөх хэрэгтэй бөгөөд "nft list ruleset -a"-г ажиллуулснаар алдаа гарах болно.

    Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх