Lëshimi i filtrit të paketave nftables 0.9.1

Pas një vit zhvillimi është paraqitur lëshimi i filtrit të paketave nftables 0.9.1, duke po zhvillimit si një zëvendësim për iptables, ip6tables, arptables dhe ebtables përmes unifikimit të interfaces së filtrimit të paketave për IPv4, IPv6, ARP dhe ura rrjetesh. Në paketën nftables përfshihen komponentë të filtrit të paketave, të cilët punojnë në hapësirën e përdoruesit, ndërsa në nivelin e bërthamës, funksionin e kryen nën-sistemi nf_tables, i përfshirë në bërthamën Linux që nga versioni 3.13.

Në nivelin e bërthamës ofrohet vetëm një interface e përgjithshme, e pavarur nga protokolli specifik dhe që ofron funksione bazike për nxjerrjen e të dhënave nga paketat, kryerjen e operacioneve me të dhëna dhe menaxhimin e rrjedhave.
Logjika e filtrimit dhe trajtuesit specifikë për protokollet kompilohet në kod bajtësor në hapësirën e përdoruesit, pas së cilës ky kod bajtësor ngarkohet në bërthamë nëpërmjet interface Netlink dhe ekzekutohet në një makinë virtuale të veçantë, e ngjashme me BPF (Berkeley Packet Filters). Ky qasje lejon një reduktim të ndjeshëm të madhësisë së kodit të filtrimit që punon në nivelin e bërthamës dhe sjell të gjitha funksionet e analizës së rregullave dhe logjikës së punës me protokollet në hapësirën e përdoruesit.

TĂ« rejat kryesore:

  • MbĂ«shtetje pĂ«r IPsec, e cila lejon pĂ«rputhjen e adresave tĂ« tunelit nĂ« lidhje me paketĂ«n, 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ë kontrollohet 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Ă«sinĂ« nĂ« grup mund tĂ« pĂ«rdoret rregulli

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

  • MundĂ«sia e pĂ«rdorimit tĂ« variablave 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 maskat pĂ«r identifikimin e sistemeve operative (OS Fingerprint) nĂ« bazĂ« tĂ« vlerave TTL nĂ« header. PĂ«r shembull, pĂ«r tĂ« markuar paketat nĂ« varĂ«si tĂ« OS-sĂ« sĂ« 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Ă«sia e pĂ«rputhjes sĂ« adresĂ«s ARP tĂ« dĂ«rguesit me adresĂ«n IPv4 tĂ« sistemit tĂ« synuar. PĂ«r shembull, pĂ«r tĂ« rritur numĂ«ruesin e paketave ARP tĂ« dĂ«rguara nga adresa 192.168.2.1 mund tĂ« pĂ«rdoret rregulli:

    table arp x {
    chain 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 proxy (tproxy). PĂ«r shembull, pĂ«r tĂ« drejtuar kĂ«rkesat nĂ« portin 80 nĂ« portin e proxy 8080:

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

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

    table inet x {
    chain 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 SELinux mund tĂ« startoni:

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

    Dhe pastaj të përdorni këtë 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 e specifikimit tĂ« porteve tĂ« caktuara pĂ«r protokollet nĂ« formĂ« tekstuale, siç janĂ« tĂ« pĂ«rcaktuar nĂ« skedarin /etc/services. PĂ«r shembull:

    nft add rule x y tcp dport "ssh"
    nft list ruleset -l
    table x {
    chain y {
    

    tcp dport "ssh"
    }
    }

  • MundĂ«sia e kontrollit tĂ« llojit tĂ« ndĂ«rfaqes sĂ« rrjetit. PĂ«r shembull:

    add rule inet raw prerouting meta iifkind "vrf" accept

  • PĂ«rmirĂ«suar mbĂ«shtetje pĂ«r azhurnimin dinamik tĂ« pĂ«rmbajtjeve tĂ« grupeve (sets) pĂ«rmes specifikimit tĂ« qartĂ« tĂ« flamurit "dynamic". PĂ«r shembull, pĂ«r tĂ« azhurnuar grupin "s" me shtimin e adresĂ«s burimore dhe resetting e regjistrit nĂ« rast tĂ« mungesĂ«s sĂ« paketave pĂ«r njĂ« periudhĂ« prej 30 sekondash:

    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 e caktimit tĂ« njĂ« kushti tĂ« veçantĂ« pĂ«r ngjarjen e skadimit. PĂ«r shembull, pĂ«r tĂ« pĂ«rcaktuar njĂ« kohĂ« skadimi tĂ« ndryshme pĂ«r paketat qĂ« vijnĂ« nĂ« portin 8888 mund tĂ« specifikohet:

    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 grupin inet:

    table inet nat {
    

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

  • Mjetet e pĂ«rmirĂ«suara pĂ«r tĂ« nxjerrĂ« informacionin e gabimeve pĂ«r shkak tĂ« gabimeve tĂ« shkrimit:

    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 e specifikimit tĂ« emrave tĂ« ndĂ«rfaqeve nĂ« grupe (sets):

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

  • Sintaksa e rregullave tĂ« flowtable Ă«shtĂ« pĂ«rditĂ«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

  • MbĂ«shtetje e pĂ«rmirĂ«suar pĂ«r JSON.

Burimi: opennet.ru

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