NFTables

Linux.fista
Versio hetkellä 4. kesäkuuta 2019 kello 16.53 – tehnyt Raspi (keskustelu | muokkaukset) (+esimerkki)
(ero) ← Vanhempi versio | Nykyinen versio (ero) | Uudempi versio → (ero)
Siirry navigaatioon Siirry hakuun

NFTables (nft) korvaa vanhat iptables (IPv4), ip6tables (IPv6), arptables (ARP/RARP) ja ebtables (Silta) -palomuuriohjelmistot. NFTables nitoo kaikki vanhat ohjelmat yhden ohjelman alle. Joissain jakeluissa NFTables on asennettu jo vakiona ja joihinkin se pitää asentaa. Paketin nimi on yleensä nft tai nftables. NFTables kehitettiin mm. siksi, että vanhoja edellä mainittuja ohjelmia on paljon ja näin monen ohjelman ylläpito ja kehitys on hankalaa. NFTables tulee syrjäyttämään vanhat palomuuriohjelmat tulevaisuudessa.

Joitain ominaisuuksia[muokkaa]

  • Atominen tuki (lisää/korvaa/muuta kaikki tai osa säännöistä kerralla)
    • Vanhassa iptablesissa säännöt syötettiin yksitellen ja ne astuivat voimaan syöttämisjärjestyksessä
  • Interaktiivinen konsoli
  • Skriptituki
    • Muuttujatuki
      • NTP-aikapalvelimet: define ntp_servers = { 127.0.0.1, 192.168.0.1 }
      • DNS-nimipalvelin: define google_dns = 8.8.8.8
    • Tiedostojen liittäminen skriptitiedostoihin:
      • include "variables.ruleset"
      • include "lan-rules.ruleset"
      • include "wan-rules.ruleset"
  • Reaaliaikainen palomuurisääntöjen muutosten seuranta (nft monitor)
    • Mahdollistaa esimerkiksi skriptin teon, joka ottaa automaattiset varmuuskopiot git-versionhallinnan avulla sekä kirjoittaa tiedon milloin muutos tehtiin
      • Tämä taas mahdollistaa helpon palomuurisääntöjen historiaseurannan ja muutoksen peruutuksen
  • JSON- ja XML-tuki
    • Helpottaa sääntöjen kirjoittamista ja luettavuutta ohjelmistoilla
    • Esimerkiksi sääntöjen listauksesta luettavassa JSON-muodossa: nft export json | jq
  • Yhdistetty IPv4 ja IPv6 sääntö inet-nimen alle, mutta myös ip ja ip6 ovat käytettävissä erikseen

Esimerkki[muokkaa]

/etc/nftables.conf

# Käytetään inet-taulua, joka mätsää ipv4- sekä ipv6-liikenteen
table inet filter {
    chain INPUT {
        # Pudota kaikki paketit vakiona
        type filter hook input priority 0; policy drop;

        # Salli ping (ICMP)
        icmp type echo-request counter packets 0 bytes 0 accept
        icmp type echo-reply counter packets 0 bytes 0 accept

        # Salli DHCP
        udp sport 67-68 udp dport 67-68 counter packets 0 bytes 0 accept

        # Salli DNS
        udp dport 53 counter packets 0 bytes 0 accept
        udp sport 53 counter packets 0 bytes 0 accept

        # Salli LAN <-> LAN -liikenne
        ip saddr 10.0.0.0/8 ip daddr 10.0.0.0/8 counter packets 0 bytes 0 accept
        ip saddr 172.16.0.0/12 ip daddr 172.16.0.0/12 counter packets 0 bytes 0 accept
        ip saddr 192.168.0.0/16 ip daddr 192.168.0.0/16 counter packets 0 bytes 0 accept

        ct state established,related counter packets 0 bytes 0 accept

        # Salli loopback interface 127.0.0.1 lo
        iifname "lo" counter packets 0 bytes 0 accept

    }

    chain OUTPUT {
        # Pudota kaikki paketit vakiona
        type filter hook output priority 0; policy drop;

        # Salli ping
        icmp type echo-request counter packets 0 bytes 0 accept
        icmp type echo-reply counter packets 0 bytes 0 accept

        # Salli DHCP
        udp sport 67-68 udp dport 67-68 counter packets 0 bytes 0 accept

        # Allow DNS
        udp dport 53 counter packets 0 bytes 0 accept
        udp sport 53 counter packets 0 bytes 0 accept

        # Salli LAN <-> LAN
        ip saddr 10.0.0.0/8 ip daddr 10.0.0.0/8 counter packets 0 bytes 0 accept
        ip saddr 172.16.0.0/12 ip daddr 172.16.0.0/12 counter packets 0 bytes 0 accept
        ip saddr 192.168.0.0/16 ip daddr 192.168.0.0/16 counter packets 0 bytes 0 accept

        # Allow loopback interface 127.0.0.1
        oifname "lo" counter packets 0 bytes 0 accept

        ct state new counter packets 0 bytes 0 accept
        ct state related,established counter packets 0 bytes 0 accept
    }

    chain FORWARD {
        # Pudota kaikki paketit vakiona
        type filter hook forward priority 0; policy drop;
    }

}

Muuta[muokkaa]

NFTablesiin on tehty apuohjelmia ja skriptejä, joilla voit käyttää NFTablesia kuten käyttäisit iptablesia, mutta apuohjelma muuttaa iptables-säännöt NFTables-yhteensopiviksi. Esimerkiksi Ubuntussa paketin nimi on iptables-nftables-compat.

Aiheesta muualla[muokkaa]