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

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

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

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

  • Багцын элементүүдтэй холбоотой багц болон хөдөлгөөний тоолуурын дэмжлэгийг багцад нэмсэн. Тоолуурыг "counter" түлхүүр үг ашиглан идэвхжүүлсэн:

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

    гинж z {
    төрлийн шүүлтүүр дэгээ гаралтын тэргүүлэх шүүлтүүр; бодлогыг хүлээн зөвшөөрөх;
    ip daddr @y
    }
    }

  • Тоолууруудын анхны утгыг тохируулах, жишээлбэл, дахин ачаалсны дараа өмнөх тоолуурыг сэргээхийн тулд та "nft -f" командыг ашиглаж болно.

    # муур дүрмийн багц.nft
    хүснэгт ip x {
    тохируулах y {
    typeof ip saddr
    эсрэг
    элементүүд = { 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 {
    typeof ip saddr
    эсрэг
    элементүүд = { 192.168.10.35 тоологч пакетууд 1 байт 84, 192.168.10.101 \
    тоолуур p 192.168.10.135 тоологч пакет 0 байт 0 }
    }

    гинж z {
    төрлийн шүүлтүүр дэгээ гаралтын тэргүүлэх шүүлтүүр; бодлогыг хүлээн зөвшөөрөх;
    ip daddr @y
    }
    }

  • Эсрэг дэмжлэгийг мөн урсгалын хүснэгтэд нэмсэн:

    хүснэгт ip foo {
    урсгалын хүснэгт {
    дэгээ оруулах давуу эрх -100
    төхөөрөмжүүд = { eth0, eth1 }
    эсрэг
    }

    урагш гинж {
    төрөл шүүлтүүр дэгээ урагш тэргүүлэх шүүлтүүр;
    урсгал нэмэх @bar тоолуур
    }
    }

    Та "conntrack -L" командыг ашиглан тоолуурын жагсаалтыг харах боломжтой.

    tcp 6 src = 192.168.10.2 dst = 10.0.1.2 спорт = 47278 dport = 5201 пакет = 9 байт = 608 \
    src = 10.0.1.2 dst = 10.0.1.1 спорт = 5201 dport = 47278 пакет = 8 байт = 428 [OFFLOAD] тэмдэг = 0 \
    secctx = null ашиглах = 2 tcp 6 src = 192.168.10.2 dst = 10.0.1.2 спорт = 47280 dport = 5201 \
    пакетууд = 1005763 байт = 44075714753 src = 10.0.1.2 dst = 10.0.1.1 спорт = 5201 dport = 47280 \
    пакетууд = 967505 байт = 50310268 [OFFLOAD] тэмдэг = 0 secctx = хоосон хэрэглээ = 2

  • Холбох олонлогуудад (харьцуулалтыг хялбаршуулдаг холбоос, тодорхой багц хаяг, портууд) олонлогийн элементүүдийн бүрэлдэхүүн хэсгүүдийн өгөгдлийн төрлийг тодорхойлдог "typeof" удирдамжийг ашиглах боломжтой.

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

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

  • Typeof заавар одоо газрын зургийн жагсаалтад нэгдэх үйл ажиллагаанд мөн хамаарна:

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

    гинжин баар {
    төрөл шүүлтүүр дэгээ урьдчилан чиглүүлэх тэргүүлэх шүүлтүүр; бодлогын уналт;
    meta mark set ip daddr . tcp dport газрын зураг @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 add rule bridge foo bar ether type vlan reject tcp reset

  • TCP сесс танигчаар (conntrack ID) тааруулах дэмжлэг нэмсэн. Conntrack ID-г тодорхойлохын тулд та "--output id" сонголтыг ашиглаж болно:

    # conntrack -L — гаралтын id
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 спорт =36424 dport=53 пакет=2 \
    байт = 122 src = 192.168.2.1 dst = 192.168.2.118 спорт = 53 dport = 36424 пакет = 2 байт = 320 \
    [Баталгаат] тэмдэг=0 хэрэглээ=1 id=2779986232

    # nft нэмэх дүрэм foo bar ct id 2779986232 тоолуур

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

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