Puncte:1

probleme cu prioritatea lanțului nftables (nft).

drapel fr

nft îmi provoacă dureri de cap nesfârșite, indiferent de modul în care aș modifica politica, tot nu o pot face să funcționeze.

Conceptul pe care il am in vedere:

  • Un lanț „de bază” în care există reguli comune (de ex., permit ssh etc.)
  • Una sau mai multe aplicații specifice unde există reguli specifice demonului (de exemplu, lanț de server http)

Am încercat multe permutări diferite ale regulilor, dar nu reușesc niciodată să curgă atât traficul „de bază” cât și daemon, ajung întotdeauna să blochez una sau alta! ;-(

Iată configurația mea curentă (simplificată) (așa cum este constituită în prezent, o permite ssh dar nu permite http)

/etc/nftables.conf:

#!/usr/sbin/nft -f                                                                                                                                                                                                                                              
set de reguli de culoare                                                                                                                       
tabel inet filter {   
     counter input_ssh {}     
        setați my_admin_ipv4 {                                                                                                        
                tastați ipv4_addr                                                                                                      
                interval de steaguri                                                                                                      
                tejghea                                                                                                             
                elemente = {                                                                                                        
                        10.0.0.0/8,                                                                                                 
                        172.16.0.0/12,                                                                                              
                        192.168.0.0/16                                                                                                                                                                                      
                }                                                                                                                   
        }         
       intrare în lanț {
                tip filtru cârlig intrare filtru prioritar;
                iifname se acceptă comentariul „Permite traficul loopback”;
                ct state stabilite,related accept comment "Permite conexiuni stabilite/conexe";
                ct state invalid drop comment "Refuză conexiuni invalide";

                # SSH
                tcp dport ssh ip saddr @my_admin_ipv4 counter name input_ssh accept comment "Permite IPv4 SSH de la administrator";
    scăderea politicii;
        }
        lanț înainte {
                tip filtru cârlig înainte prioritate 0;
                scăderea politicii;
        }
        ieșire în lanț {
                tip filtru cârlig ieșire prioritate 0;
        }
 include „/etc/nft/*.conf”
}

/etc/nft/http.conf:

counter input_http {} 
   lanț http {
    tip filtru cârlig intrare filtru prioritate - 1;
      # HTTP #
      tcp dport {80,443} nume contor input_nginx accept comentariul „Permite HTTP”;
    acceptarea politicii; 
    }
Puncte:1
drapel cl
A.B

Puteți alege să marcați pachetele pentru a fi acceptate ca siguranță în următoarele lanțuri ale aceluiași cârlig.

  • fiecare regulă de acceptare ar trebui să marcheze pachetul

    Regulile care fac o acceptare explicită ar trebui să marcheze pachetul chiar înainte de a-l accepta. Orice aparitie a:

    ... Accept
    

    trebuie inlocuit cu:

    ... meta marca set 0xf00 accept
    

    Valoarea nu este importantă atâta timp cât nu este 0 dacă nu există alt rol pentru marcaj.

  • fiecare lanț ar trebui să accepte un pachet marcat, deoarece acesta este siguranța

    folosind această regulă la începutul lanțului:

    meta marca != 0 accept
    

Asta e ideea generală. Adaptări și excepții pot fi făcute în continuare dacă are mai mult sens.

Iată setul de reguli revizuit după această abordare. Marca este acceptată după ct ... picătură nevalidă regulă care este o regulă importantă care nu ar trebui să fie ocolită (și ar fi putut fi făcută într-un lanț anterior o dată pentru totdeauna, deoarece este o regulă de eliminare). Dacă este mai jos, intrarea este ultimul lanț din filtrul / cârligul de intrare, nu este cu adevărat necesar pentru a marca pachetele acceptate, dar nu strica să faceți acest lucru.

/etc/nftables.conf::

set de reguli de culoare 
tabel inet filter {   
    counter input_ssh {}     
    setați my_admin_ipv4 {                                                                                                        
        tastați ipv4_addr                                                                                                      
        interval de steaguri                                                                                                      
        tejghea                                                                                                             
        elemente = {                                                                                                        
            10.0.0.0/8,                                                                                                 
            172.16.0.0/12,                                                                                              
            192.168.0.0/16                                                                                                                                                                                      
        }                                                                                                                   
    }         
    intrare în lanț {
        tip filtru cârlig intrare filtru prioritar; scăderea politicii;
        iifname lo meta mark set 0x1 accept comment "Permite traficul loopback";
        stare ct stabilită, marcaj meta asociat set 0x1 accept comentariul „Permite conexiuni stabilite/relative”;
        ct state invalid drop comment "Refuză conexiuni invalide";
        meta marca != 0 accept

        # SSH
        tcp dport ssh ip saddr @my_admin_ipv4 nume contor input_ssh meta mark set 0x1 accept comentariul „Permiteți SSH IPv4 de la administrator”;
    }
    lanț înainte {
        tip filtru cârlig înainte prioritate 0; scăderea politicii;                      
    }
    ieșire în lanț {
        tip filtru cârlig ieșire prioritate 0; acceptarea politicii;
    }
    include „/etc/nft/*.conf”
}

/etc/nft/http.conf (inlocuit counter_nginx cu counter_http). The meta marca != 0 accept O regulă probabil că nu este necesară aici, deoarece s-ar putea să nu mai existe vreun alt lanț înainte, dar nu strica să o ai.

    counter input_http {} 
    lanț http {
        tip filtru cârlig intrare filtru prioritate - 1; acceptarea politicii;
         meta marca != 0 accept
         # HTTP #
         tcp dport {80,443} nume contor input_http meta mark set 0x2 accept comentariul „Permite HTTP”;
    }

Această metodă folosește mărci, așa că va fi mai greu de integrat cu alte reguli de firewall care deja foloseau mărci în alte scopuri. Este încă posibil prin rezervarea câtorva biți din marcaj cu operații pe biți.

Little Code avatar
drapel fr
Pare interesant, voi testa și vă voi anunța.Dar o întrebare, văd că ați schimbat „policy drop” în „policy accept” pe filtrul de intrare principal? Cu siguranță asta înseamnă că orice lucru de neegalat este acceptat?
A.B avatar
drapel cl
A.B
Greșeală de tipar cu tăierea/lipirea (și simplificarea răspunsului inițial folosind un lanț dedicat „verdict”). Voi pune înapoi drop.
Little Code avatar
drapel fr
Înțeleg, deci spui că ar putea exista un al treilea lanț fără nimic în el în afară de `policy drop` și `meta mark != 0 accept`? Bănuiesc că asta poate face mai curat într-un fel. Tocmai încarc configurația acum, vă voi anunța cum merge.
Little Code avatar
drapel fr
Hmm, nu pare să-mi arate dragostea (am actualizat Q-ul original cu sintaxa proaspătă). SSH funcționează, dar nu web.
Little Code avatar
drapel fr
Interesant că `set` lipsă nu a fost preluat de `nft -c -f /etc/nftables.conf`? Dar acum funcționează!
A.B avatar
drapel cl
A.B
meta mark este o expresie (echivalentul potrivirii iptables), în timp ce setul meta mark este o declarație (echivalentul țintei iptables, cu excepția faptului că nu este terminal pentru regulă). Ambele sunt valabile.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.