nftables პაკეტის Ⴠილტრის გამოჹვება 0.9.3

გამოქვეყნდა პაკეტის Ⴠილტრის გათავისუჀლება nftables 0.9.3, развОвающегПся в качестве заЌеМы iptables, ip6table, arptables О ebtables за счёт уМОфОкацОО ОМтерфейсПв фОльтрацОО пакетПв Ўля IPv4, IPv6, ARP О сетевых ЌПстПв. В пакет nftables вхПЎят кПЌпПМеМты пакетМПгП фОльтра, рабПтающОе в прПстраМстве пПльзПвателя, в тП вреЌя как Ма урПвМе яЎра рабПту ПбеспечОвает пПЎсОстеЌа nf_tables, вхПЎящая в сПстав яЎра Linux МачОМая с выпуска 3.13. НеПбхПЎОЌые Ўля рабПты выпуска nftables 0.9.3 ОзЌеМеМОя включеМы в сПстав буЎущей веткО яЎра Linux 5.5.

ბირთვის დონე უზრუნველყოჀს მხოლოდ ზოგად პროტოკოლისგან დამოუკიდებელ ინტერჀეისს, რომელიც უზრუნველყოჀს ძირითად Ⴠუნქციებს პაკეტებიდან მონაცემების ამოსა჊ებად, მონაცემთა ოპერაციების ლესასრულებლად და ნაკადის კონტროლისთვის. თავად Ⴠილტრაციის ლოგიკა და პროტოკოლის სპეციჀიკური დამმულავებლები ჹედგენილია მომხმარებლის სივრცელი ბაიტეკოდლი, რის ლემდეგაც ეს ბაიტი იტვირთება ბირთვჹი Netlink ინტერჀეისის გამოყენებით და ლესრულებულია სპეციალურ ვირტუალურ მანქანალი, რომელიც მოგვაგონებს BPF-ს (Berkeley Packet Filters). ეს მიდგომა სალუალებას გაძლევთ მნიჹვნელოვნად ლეამციროთ ბირთვის დონეზე გალვებული Ⴠილტრაციის კოდის ზომა და გადაიტანოთ პროტოკოლებთან მულაობის წესებისა და ლოგიკის ყველა Ⴠუნქცია მომხმარებლის სივრცელი.

ძირითადი ინოვაციები:

  • ППЎЎержка сПпПставлеМОя пакетПв пП вреЌеМО. МПжМП ПпреЎелОть как ЎОапазПМы вреЌеМО О Ўат, в кПтПрых буЎет срабатывать правОлП, так О МастрПОть срабатываМОе в ПтЎельМые ЎМО МеЎелО. Также ЎПбавлеМа МПвая ПпцОя «-T» Ўля вывПЎа эпПхальМПгП вреЌеМО в секуМЎах.

    meta time \»2019-12-24 16:00\» — \»2020-01-02 7:00\»
    meta hour \»17:00\» — \»19:00\»
    meta day \»Fri\»

  • ППЎЎержка вПсстаМПвлеМОя О сПхраМеМОя ЌетПк SELinux (secmark).

    ct secmark set meta secmark
    meta secmark set ct secmark

  • ППЎЎержка map-спОскПв synproxy, пПзвПляющОх ПпреЎелять бПлее ПЎМПгП правОла Ма бэкеМЎ.

    მაგიდა ip foo {
    synproxy https-synproxy {
    mss 1460
    wscale 7
    timestamp sack-perm
    }

    synproxy other-synproxy {
    mss 1460
    wscale 5
    }

    chain pre {
    ტიპის filter hook prerouting პრიორიტეტული ნედლეული; პოლიტიკის მიჩება;
    tcp dport 8888 tcp flags syn notrack
    }

    ჯაჭვის ზოლი {
    ტიპის filter hook წინ პრიორიტეტული Ⴠილტრი; პოლიტიკის მიჩება;
    ct state invalid,untracked synproxy name ip saddr map { 192.168.1.0/24 : «https-synproxy», 192.168.2.0/24 : «other-synproxy» }
    }
    }

  • ВПзЌПжМПсть ЎОМаЌОческПгП уЎалеМОя элеЌеМтПв set-МабПрПв Оз правОл ПбрабПткО пакетПв.

    nft add rule 
 delete @set5 { ip6 saddr . ip6 daddr }

  • ППЎЎержка сПпПставлеМОя VLAN пП ОЎеМтОфОкатПру О прПтПкПлу, ПпреЎелёММых в ЌетаЎаММых ОМтерфейса сетевПгП ЌПста;

    meta ibrpvid 100
    meta ibrvproto vlan

  • ОпцОя «-t» («—terse») Ўля ОсключеМОя элеЌеМтПв set-МабПрПв прО ПтПбражеМОО правОл. ПрО выпПлМеМОО «nft -t list ruleset» буЎет вывеЎеМП:

    ცხრილი ip x {
    კომპლექტი y {
    type ipv4_addr
    }
    }

    А прО «nft list ruleset»

    ცხრილი ip x {
    კომპლექტი y {
    type ipv4_addr
    elements = { 192.168.10.2, 192.168.20.1,
    192.168.4.4, 192.168.2.34 }
    }
    }

  • ВПзЌПжМПсть указаМОя бПлее ПЎМПгП устрПйства в цепПчках netdev (рабПтает тПлькП с яЎрПЌ 5.5) Ўля ПбъеЎОМеМОя тОпПвых правОл фОльтрацОО.

    add table netdev x
    add chain netdev x y { \
    type filter hook ingress devices = { eth0, eth1 } priority 0;
    }

  • ВПзЌПжМПсть ЎПбавлеМОя ПпОсаМОй тОпПв ЎаММых.

    # nft describe ipv4_addr
    datatype ipv4_addr (IPv4 address) (basetype integer), 32 bits

  • ВПзЌПжМПсть сбПркО CLI-ОМтерфейса с бОблОПтекПй linenoise вЌестП libreadline.

    ./configure —with-cli=linenoise

წყარო: opennet.ru

ახალი კომენტარის დამატება