{"id":1758,"date":"2020-09-23T14:24:01","date_gmt":"2020-09-23T12:24:01","guid":{"rendered":"http:\/\/clark.tipistrani.it\/?p=1758"},"modified":"2021-05-28T15:22:08","modified_gmt":"2021-05-28T13:22:08","slug":"nftables","status":"publish","type":"post","link":"http:\/\/clark.tipistrani.it\/?p=1758","title":{"rendered":"NFTABLES"},"content":{"rendered":"<p>Nelle nuove distribuzioni Debian e derivate (ormai \u00e8 chiaro anche ai sassi che sia a livello personale che aziendale uso Devuan) il programma di default per il packet filtering e&#8217; <a href=\"https:\/\/wiki.nftables.org\/wiki-nftables\/index.php\/Main_Page\">nftables<\/a><\/p>\n<p>Quindi un po perch\u00e9 anche se non immediatamente il supporto a iptables diminuir\u00e0 e quindi cesser\u00e0, un po perch\u00e9 stando alla documentazione nftables \u00e8 molto pi\u00f9 performante del suo predecessore, un po perch\u00e9 sono curioso come una scimmia e, come dicono i miei Amici trentini ho una speciale attitudine a portare il qlo nelle pedate, mi sono messo a studiare nftables.<\/p>\n<p>la logica di creazione su nftables \u00e8 la seguente:<br \/>\ntabelle che contengono catene che contengono regole<\/p>\n<p>table<br \/>\n|<br \/>\nchains<br \/>\n|<br \/>\nrules<\/p>\n<p>su nftables posso creare tabelle e catene coi nomi che voglio il comando \u00e8 nft add<br \/>\nnft add table\u00a0\u00a0 inet noddos<br \/>\ncomando oggetto tipo nome<br \/>\nil tipo e&#8217; il namespaces della famiglia indirizzi che sono<br \/>\narp (era arptables)<br \/>\nbridge (era ebtables)<br \/>\ninet (=ip+ipv6)<br \/>\nip (ipv4)<br \/>\nip6 (ipv6)<br \/>\nnetdev Consente il filtraggio anticipato del traffico, prima che raggiunga altri filtri (sotto il livello 3 sul modello OSI) e per esempio questo metodo \u00e8 molto efficiente contro il DDoS<\/p>\n<p>nft add chain inet noddos ingress { tipo filter hook ingress priority 0 \\; }<br \/>\ncome sopra add chain a noddos(nome tabella) ingress(nome chain)<br \/>\nil tipo puo&#8217; essere<br \/>\nfilter<br \/>\nroute<br \/>\nnat<\/p>\n<p>lo hook si riferisce a uno stadio specifico del pacchetto mentre attraversa il kernel e puo&#8217; essere:<br \/>\nper le famiglie ip ip6 inet<br \/>\nprerouting<br \/>\ninput<br \/>\nforward<br \/>\noutput<br \/>\npostrouting<br \/>\nper la famiglia arp puo&#8217; essere:<br \/>\ninput<br \/>\noutput<br \/>\nper la famiglia bridge sono gli stessi di ip\/ip6\/inet<br \/>\nper la famiglia netdev l&#8217;unico hook \u00e8 ingress.<\/p>\n<p>Nftables ha una sua grammatica, i creatori di nftables sconsigliano l&#8217;uso come in passato per iptables di script in bash perch\u00e9 rompono l&#8217;atomicit\u00e0 delle regole.<br \/>\nDetto cos\u00ec non vuole dire un piffero, e ci ho messo un po a capire cosa intendessero poi alla fine ci sono arrivato leggendo attentamente il wiki di cui riporto qui sotto una maccheronica traduzione:<br \/>\n<span class=\"tlid-translation translation\" lang=\"it\"><span class=\"\" title=\"\">&#8220;Con iptables era comune utilizzare uno script bash composto da pi\u00f9 comandi iptables per configurare un firewall.<\/span> <span class=\"\" title=\"\">Questo non \u00e8 ottimale perch\u00e9 non \u00e8 atomico, vale a dire che durante le poche frazioni di secondo che il tuo script bash impiega per eseguire il tuo firewall \u00e8 in uno stato parzialmente configurato.<\/span> <span class=\"\" title=\"\">Nftables introduce la sostituzione atomica delle regole con l&#8217;opzione -f.<\/span> <span class=\"\" title=\"\">Questo \u00e8 diverso dagli script bash perch\u00e9 nftables legger\u00e0 tutti i file di configurazione inclusi, creer\u00e0 l&#8217;oggetto di configurazione in memoria insieme alla configurazione esistente, e quindi in un&#8217;operazione atomica scambia la vecchia configurazione con quella nuova, il che significa che non c&#8217;\u00e8 momento in cui<\/span> <span title=\"\">il firewall \u00e8 parzialmente configurato.&#8221;<\/span><\/span><br \/>\nOnestamente la mia preparazione non \u00e8 cosi grande da capire appieno e perfettamente le implicazioni di tutto ci\u00f2, intuitivamente capisco che uno stato totalmente\u00a0 configurato \u00e8 preferibile a uno parzialmente\u00a0 configurato, quello che mi sfugge anche perch\u00e9 non ho trovato letteratura in materia \u00e8 per quanto tempo il sistema resta in condizione di semi configurazione, credo che il fattore tempo sia importante, se sono millisecondi \u00e8 un conto se sono secondi un altro, per\u00f2 la logica mi dice: se della gente che fa questo di mestiere e che crea degli standard de facto dice che \u00e8 cos\u00ec tu fai quello che ti dicono che non sbagli mai.<br \/>\nTra parentesi ho avuto modo di interagire direttamente con Pablo Neira Ayuso capo del team di netfilter sulla ml netfilter e ho trovato una persona squisita a dire poco.<br \/>\nLo strumento per verificare la correttezza della grammatica e&#8217; nft &#8212; (sono 2 meno)check &#8211;(sono 2 meno)file \/path\/nome_del_file<br \/>\nOltre alle mie configurazioni ho inserito anche uno script in perl che fa download di liste di indirizzi crea dei set e li nega.<br \/>\n<a href=\"http:\/\/clark.tipistrani.it\/?p=1778\">parametri del kernel da passare all&#8217;avvio<\/a><br \/>\n<a href=\"http:\/\/clark.tipistrani.it\/?p=1817\">ale401.sh<\/a><br \/>\n<a href=\"http:\/\/clark.tipistrani.it\/?p=1814\">vars.sh<\/a><br \/>\n<a href=\"http:\/\/clark.tipistrani.it\/?p=1810\">definitions<\/a><br \/>\n<a href=\"http:\/\/clark.tipistrani.it\/?p=1808\">ale.nft<\/a><br \/>\n<a href=\"http:\/\/clark.tipistrani.it\/?p=1923\">ale2.nft<\/a><br \/>\n<a href=\"http:\/\/clark.tipistrani.it\/?p=1826\">blocklist.pl<\/a><br \/>\n<a href=\"http:\/\/clark.tipistrani.it\/?p=1836\">logging<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nelle nuove distribuzioni Debian e derivate (ormai \u00e8 chiaro anche ai sassi che sia a livello personale che aziendale uso Devuan) il programma di default per il packet filtering e&#8217; nftables Quindi un po perch\u00e9 anche se non immediatamente il supporto a iptables diminuir\u00e0 e quindi cesser\u00e0, un po perch\u00e9 stando alla documentazione nftables \u00e8 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[109,8,14,6],"tags":[180,108],"class_list":["post-1758","post","type-post","status-publish","format-standard","hentry","category-firewall","category-linux","category-networking","category-work","tag-nftables","tag-packet-filtering"],"_links":{"self":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/1758","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1758"}],"version-history":[{"count":17,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/1758\/revisions"}],"predecessor-version":[{"id":1934,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/1758\/revisions\/1934"}],"wp:attachment":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1758"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}