nftables pakkie filter 0.9.1 vrystelling

Na 'n jaar van ontwikkeling aangebied pakkie filter vrystelling nftables 0.9.1, ontwikkel as 'n plaasvervanger vir iptables, ip6table, arptables en ebtables deur pakkiefiltrering-koppelvlakke vir IPv4, IPv6, ARP en netwerkbrûe te verenig. Die nftables-pakket bevat pakkiefilterkomponente wat in gebruikersruimte loop, terwyl die kernvlakwerk verskaf word deur die nf_tables-substelsel, wat sedert vrystelling 3.13 deel van die Linux-kern is.

Die kernvlak bied slegs 'n generiese protokol-onafhanklike koppelvlak wat basiese funksies verskaf vir die onttrekking van data uit pakkies, die uitvoering van data-bewerkings en vloeibeheer.
Die filterlogika self en protokol-spesifieke hanteerders word in greepkode in gebruikersruimte saamgestel, waarna hierdie greepkode met behulp van die Netlink-koppelvlak in die kern gelaai word en in 'n spesiale virtuele masjien uitgevoer word wat aan BPF (Berkeley Packet Filters) herinner. Hierdie benadering laat jou toe om die grootte van die filterkode wat op kernvlak loop, aansienlik te verminder en al die funksies van ontledingsreëls en logika vir die werk met protokolle na gebruikersruimte te skuif.

Belangrikste innovasies:

  • IPsec-ondersteuning, wat ooreenstem met tonneladresse gebaseer op pakkie, IPsec-versoek-ID en SPI (Security Parameter Index) -etiket. Byvoorbeeld,

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

    Dit is ook moontlik om te kyk of 'n roete deur 'n IPsec-tonnel gaan. Byvoorbeeld, om verkeer te blokkeer nie via IPSec nie:

    … filter uitset rt ipsec ontbrekende druppel

  • Ondersteuning vir IGMP (Internet Group Management Protocol). Byvoorbeeld, jy kan 'n reël gebruik om inkomende IGMP-groeplidmaatskapversoeke weg te gooi

    nft voeg reël netdev foo bar igmp tipe lidmaatskap-navraag teller drop

  • Moontlikheid om veranderlikes te gebruik om oorgangkettings te definieer (spring / goto). Byvoorbeeld:

    definieer dest = ber
    voeg reël ip foo bar jump $dest

  • Ondersteuning vir maskers om bedryfstelsels (OS-vingerafdruk) te identifiseer gebaseer op TTL-waardes in die kop. Byvoorbeeld, om pakkies te merk gebaseer op die sender OS, kan jy die opdrag gebruik:

    ... meta merk stel osf ttl skip naam kaart { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "onbekend" : 0x0 }
    ... osf ttl slaan weergawe "Linux:4.20" oor

  • Vermoë om die ARP-adres van die sender en die IPv4-adres van die teikenstelsel te pas. Byvoorbeeld, om die teller van ARP-pakkies wat vanaf die adres 192.168.2.1 gestuur word te verhoog, kan jy die volgende reël gebruik:

    tabel arp x {
    ketting y {
    tipe filter haak invoer prioriteit filter; beleid aanvaar;
    arp saddr ip 192.168.2.1 tellerpakkies 1 grepe 46
    }
    }

  • Ondersteuning vir deursigtige aanstuur van versoeke deur 'n proxy (tproxy). Byvoorbeeld, om oproepe na poort 80 na instaanbedienerpoort 8080 te herlei:

    tabel ip x {
    ketting y {
    tipe filter haak prerouting prioriteit -150; beleid aanvaar;
    tcp dport 80 tproxy na :8080
    }
    }

  • Ondersteuning vir die merk van voetstukke met die vermoë om die stelmerk verder te verkry via setsockopt() in SO_MARK-modus. Byvoorbeeld:

    tabel inet x {
    ketting y {
    tipe filter haak prerouting prioriteit -150; beleid aanvaar;
    tcp dport 8080 merk stel socket merk
    }
    }

  • Ondersteuning vir die spesifiseer van prioriteit teks name vir kettings. Byvoorbeeld:

    nft voeg ketting ip x rou { tipe filter haak prerouting prioriteit rou; }
    nft voeg ketting ip x filter { tipe filter haak prerouting prioriteit filter; }
    nft voeg ketting ip x filter_later { tipe filter haak prerouting prioriteit filter + 10; }

  • Ondersteuning vir SELinux-etikette (Secmark). Byvoorbeeld, om die "sshtag" merker in 'n SELinux konteks te definieer, kan jy hardloop:

    nft voeg secmark inet filter sshtag "system_u:object_r:ssh_server_packet_t:s0" by

    En gebruik dan hierdie etiket in die reëls:

    nft voeg reël inet filter invoer tcp dport 22 meta secmark stel "sshtag"

    nft voeg kaart by inet filter secmapping { tipe inet_service: secmark; }
    nft voeg element by inet filter secmapping { 22 : "sshtag" }
    nft voeg reël inet filter invoer meta secmark stel tcp dport kaart @secmapping

  • Vermoë om poorte wat aan protokolle toegewys is in teksvorm te spesifiseer, soos dit in die /etc/services-lêer gedefinieer word. Byvoorbeeld:

    nft voeg reël xy tcp dport "ssh" by
    nft lys reëlstel -l
    tabel x {
    ketting y {
    ...
    tcp dport "ssh"
    }
    }

  • Vermoë om die tipe netwerkkoppelvlak na te gaan. Byvoorbeeld:

    voeg reël inet rou prerouting meta iifkind "vrf" aanvaar

  • Verbeterde ondersteuning vir die dinamiese opdatering van die inhoud van stelle deur die "dinamiese" vlag uitdruklik te spesifiseer. Byvoorbeeld, om stel "s" op te dateer om die bronadres by te voeg en die inskrywing terug te stel as daar vir 30 sekondes geen pakkies is nie:

    voeg tabel x by
    voeg stel xs by {tipe ipv4_addr; grootte 128; time-out 30s; vlae dinamies; }
    voeg ketting xy { tipe filter haak invoer prioriteit 0; }
    voeg reël xy by, werk @s {ip saddr}

  • Vermoë om 'n afsonderlike uitteltoestand in te stel. Byvoorbeeld, om die verstek uitteltyd te ignoreer vir pakkies wat op poort 8888 aankom, kan jy spesifiseer:

    tabel ip filter {
    ct timeout aggressive-tcp {
    protokol tcp;
    l3proto ip;
    beleid = {gevestig: 100, close_wait: 4, naby: 4}
    }
    ketting uitset {
    ...
    tcp dport 8888 ct timeout stel "aggressief-tcp"
    }
    }

  • NAT-ondersteuning vir inet-familie:

    tabel inet nat {
    ...
    ip6 daddr dood::2::1 dnat tot dood:2::99
    }

  • Verbeterde tikfoutrapportering:

    nft voeg ketting filter toets

    Fout: Geen sodanige lêer of gids nie; het jy bedoel tabel "filter" in familie ip?
    voeg kettingfiltertoets by
    ^^^^^^

  • Vermoë om koppelvlakname in stelle te spesifiseer:

    stel sc {
    tik inet_service . ifname
    elemente = { "ssh" . "eth0" }
    }

  • Opgedateerde vloeitabelreëlsintaksis:

    nft voeg tabel x by
    nft voeg vloeitabel x ft { haak ingang prioriteit 0; toestelle = { eth0, wlan0 }; }
    ...
    nft voeg reël x vorentoe ip protokol { tcp, udp } vloei voeg @ft

  • Verbeterde JSON-ondersteuning.

Bron: opennet.ru

Voeg 'n opmerking