Lançimi i filtrit të paketave nftables 0.9.1

Pas një viti zhvillimi u paraqit lëshimi i filtrit të paketave nftables 0.9.1, që po zhvillohet si një zëvendësim për iptables, ip6tables, arptables dhe ebtables përmes unifikimit të ndërfaqeve të filtrimit të paketave për IPv4, IPv6, ARP dhe urat rrjet. Paketimi nftables përfshin komponentë të filtrimit të paketave që funksionojnë në hapësirën e përdoruesit, ndërsa në nivelin e kernelit punon nën-sistemi nf_tables, i cili është pjesë e kernelit Linux që nga lëshimi 3.13.

Në nivelin e kernelit ofrohet vetëm një ndërfaqe e përgjithshme, e cila nuk varet nga protokolli specifik dhe siguron funksione bazë për nxjerrjen e të dhënave nga paketat, kryerjen e operacioneve me të dhëna dhe menaxhimin e fluksit.
Logjika e filtrimit në mënyrë direkte dhe trajtuesit specifikë për protokollin kompilehen në bytecode në hapësirën e përdoruesit, pas së cilës ky bytecode ngarkohet në kernel përmes ndërfaqes Netlink dhe ekzekutohet në një makinë virtuale të veçantë, e cila i ngjan BPF (Berkeley Packet Filters). Ky qasje lejon një reduktim të konsiderueshëm të madhësisë së kodit të filtrimit që funksionon në nivelin e kernelit dhe të nxjerrë të gjitha funksionet e analizës së rregullave dhe logjikën e punës me protokollet në hapësirën e përdoruesit.

Novitetet kryesore:

  • MbĂ«shtetje pĂ«r IPsec, e cila lejon lidhjen e adresave tĂ« tunelit nĂ« lidhje me pakot, identifikuesin e kĂ«rkesĂ«s IPsec dhe etiketĂ«n SPI (Security Parameter Index). PĂ«r shembull,

    
 ipsec in ip saddr 192.168.1.0/24
    
 ipsec in spi 1-65536

    Po ashtu, është e mundur të verifikohet kalimi i rrugës përmes tunelit IPsec. Për shembull, për të bllokuar trafikun që nuk kalon përmes IPSec:

    
 filter output rt ipsec missing drop

  • MbĂ«shtetje pĂ«r protokollin IGMP (Internet Group Management Protocol). PĂ«r shembull, pĂ«r tĂ« hedhur poshtĂ« kĂ«rkesat IGMP pĂ«r pĂ«rkatĂ«si nĂ« grup, mund tĂ« pĂ«rdoret rregulli

    nft add rule netdev foo bar igmp type membership-query counter drop

  • MundĂ«si pĂ«r tĂ« pĂ«rdorur variabla pĂ«r tĂ« pĂ«rcaktuar zinxhirĂ«t e kalimit (jump / goto). PĂ«r shembull:

    define dest = ber
    add rule ip foo bar jump $dest

  • MbĂ«shtetje pĂ«r maska pĂ«r identifikimin e sistemeve operative (OS Fingerprint) bazuar nĂ« vlerat TTL nĂ« kokĂ«n e paketĂ«s. PĂ«r shembull, pĂ«r tĂ« etiketuar paketat nĂ« varĂ«si tĂ« sistemit operativ tĂ« dĂ«rguesit, mund tĂ« pĂ«rdoret komandĂ«:

    
 meta mark set osf ttl skip name map { «Linux» : 0x1,
    «Windows» : 0x2,
    «MacOS» : 0x3,
    «unknown» : 0x0 }
    
 osf ttl skip version «Linux:4.20»

  • MundĂ«si pĂ«r tĂ« pĂ«rputhur adresĂ«n ARP tĂ« dĂ«rguesit dhe adresĂ«n IPv4 tĂ« sistemit qĂ« Ă«shtĂ« nĂ« qĂ«llim. PĂ«r shembull, pĂ«r tĂ« rritur numĂ«rimin e paketave ARP tĂ« dĂ«rguara nga adresa 192.168.2.1, mund tĂ« pĂ«rdoret rregulli:

    table arp x {
    zinxhir y {
    type filter hook input priority filter; policy accept;
    arp saddr ip 192.168.2.1 counter packets 1 bytes 46
    }
    }

  • MbĂ«shtetje pĂ«r kalimin transparent tĂ« kĂ«rkesave pĂ«rmes proxies (tproxy). PĂ«r shembull, pĂ«r tĂ« ridrejtuar kĂ«rkesat nĂ« portin 80 nĂ« portin e proxy 8080:

    tabela ip x {
    zinxhir y {
    type filter hook prerouting priority -150; policy accept;
    tcp dport 80 tproxy to :8080
    }
    }

  • MbĂ«shtetje pĂ«r shĂ«nimin e socket-eve me mundĂ«sinĂ« e marrjes sĂ« etiketĂ«s sĂ« vendosur pĂ«rmes setsockopt() nĂ« modin SO_MARK. PĂ«r shembull:

    table inet x {
    zinxhir y {
    type filter hook prerouting priority -150; policy accept;
    tcp dport 8080 mark set socket mark
    }
    }

  • MbĂ«shtetje pĂ«r specifikimin e emrave tekstualĂ« tĂ« prioriteteve pĂ«r zinxhirĂ«t. PĂ«r shembull:

    nft add chain ip x raw { type filter hook prerouting priority raw; }
    nft add chain ip x filter { type filter hook prerouting priority filter; }
    nft add chain ip x filter_later { type filter hook prerouting priority filter + 10; }

  • MbĂ«shtetje pĂ«r etiketat SELinux (Secmark). PĂ«r shembull, pĂ«r tĂ« pĂ«rcaktuar etiketĂ«n "sshtag" nĂ« lidhje me kontekstin e SELinux mund tĂ« ekzekutohet:

    nft add secmark inet filter sshtag "system_u:object_r:ssh_server_packet_t:s0"

    Dhe më pas të përdoret kjo etiketë në rregulla:

    nft add rule inet filter input tcp dport 22 meta secmark set "sshtag"

    nft add map inet filter secmapping { type inet_service : secmark; }
    nft add element inet filter secmapping { 22 : "sshtag" }
    nft add rule inet filter input meta secmark set tcp dport map @secmapping

  • MundĂ«sia pĂ«r tĂ« specifikuar portet tĂ« lidhura me protokollet nĂ« formĂ« tekstuale, ashtu siç janĂ« pĂ«rcaktuar nĂ« skedarin /etc/services. PĂ«r shembull:

    nft add rule x y tcp dport "ssh"
    nft list ruleset -l
    tabela x {
    zinxhir y {
    

    tcp dport "ssh"
    }
    }

  • MundĂ«sia pĂ«r tĂ« verifikuar llojin e ndĂ«rfaqes rrjetĂ«. PĂ«r shembull:

    add rule inet raw prerouting meta iifkind "vrf" accept

  • PĂ«rmirĂ«suar mbĂ«shtetje pĂ«r pĂ«rditĂ«simin dinamik tĂ« pĂ«rmbajtjes sĂ« grupeve (sets) pĂ«rmes specifikimit tĂ« qartĂ« tĂ« flamurit "dynamic". PĂ«r shembull, pĂ«r tĂ« pĂ«rditĂ«suar grupin "s" me shtimin e adresĂ«s burimore dhe zerozimin e hyrjes nĂ« rastin e mungesĂ«s sĂ« paketave pĂ«r 30 sekonda:

    add table x
    add set x s { type ipv4_addr; size 128; timeout 30s; flags dynamic; }
    add chain x y { type filter hook input priority 0; }
    add rule x y update @s { ip saddr }

  • MundĂ«sia pĂ«r tĂ« caktuar njĂ« kusht tĂ« veçantĂ« pĂ«r ndodhin e kalimit nĂ« timeout. PĂ«r shembull, pĂ«r tĂ« tejkaluar timeoutin e paracaktuar pĂ«r paketat qĂ« vijnĂ« nĂ« portin 8888 mund tĂ« caktosh:

    table ip filter {
    ct timeout agressive-tcp {
    protocol tcp;
    l3proto ip;
    policy = {established: 100, close_wait: 4, close: 4}
    }
    chain output {
    

    tcp dport 8888 ct timeout set "agressive-tcp"
    }
    }

  • MbĂ«shtetje pĂ«r NAT pĂ«r familjen inet:

    table inet nat {
    

    ip6 daddr dead::2::1 dnat to dead:2::99
    }

  • Mjetet pĂ«rmirĂ«suese pĂ«r nxjerrjen e informacionit tĂ« gabimeve pĂ«r shkak tĂ« gabimeve tĂ« shtypjes:

    nft add chain filtre test

    Error: No such file or directory; did you mean table "filter" in family ip?
    add chain filtre test
    ^^^^^^

  • MundĂ«sia pĂ«r tĂ« specifikuar emrat e ndĂ«rfaqeve nĂ« grupe (sets):

    set sc {
    type inet_service . ifname
    elements = { "ssh" . "eth0" }
    }

  • Sintaksa e rregullave flowtable Ă«shtĂ« pĂ«rmirĂ«suar:

    nft add table x
    nft add flowtable x ft { hook ingress priority 0; devices = { eth0, wlan0 }; }
    

    nft add rule x forward ip protocol { tcp, udp } flow add @ft

  • PĂ«rmirĂ«suar mbĂ«shtetja pĂ«r JSON.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster