Puncte:1

Cum se reîmprospătează timpul de expirare a elementului setat în nftables?

drapel us

Cum reîmprospătesc valoarea timeout/expiră a unui element setat cu nft înainte ca acesta să expire?

Adăugarea unui element existent la set nu resetează valoarea timeout/expiră:

nft add element ip mytable myset { 10.10.10.1 timeout 60s }
# așteptați 10 secunde
nft add element ip mytable myset { 10.10.10.1 timeout 60s expiră 60s }
nft list set ip mytable myset

Cu iptables/ipset am putut reîmprospăta timeout-urile adăugând elemente existente:

ipset add myset 10.10.10.1 timeout 60
# așteptați 10 secunde
ipset add myset 10.10.10.1 -exist timeout 60
ipset list myset
Puncte:2
drapel cl
A.B

In timp ce înlocuirea regulilor atomice este documentată:

Înlocuirea regulii atomice

Puteți folosi -f opțiunea de a vă actualiza atomic setul de reguli:

% nft -f fișier

nu este documentat în mod explicit pentru element înlocuire, dar acesta este de fapt doar un caz de înlocuire a regulilor. Se poate șterge și adăuga înapoi elementul într-o singură tranzacție atomică introdusă cu -f: aceasta va înlocui intrarea mai veche cu cea mai nouă și cu timpul de expirare actualizat, fără ca elementul să lipsească temporar.

Deci, în loc să facem următoarele, ceea ce nu ar fi atomic deoarece între cele două invocări ale nft, elementul ar fi temporar neexistent și regulile care depind de acest set nu s-ar potrivi temporar:

# nft șterge elementul ip mytable myset '{ 10.10.10.1 }'
# nft add element ip mytable myset '{ 10.10.10.1 timeout 60s expires 60s }'

acest lucru ar trebui făcut folosind -f și un fișier de intrare (- a sta pentru stdin contează drept fișier de intrare valid):

# nft -f - <<'EOF'
șterge elementul ip mytable myset { 10.10.10.1 }
adăugați elementul ip mytable myset { 10.10.10.1 timeout 60s }
EOF

unde elementul nu va înceta niciodată să existe pentru că este o schimbare atomică.

Ca de obicei cu asta nft construi, dacă se dorește să facă acest lucru idempotent, fără a fi nevoie să știe dacă elementul există deja și fără a atinge alte elemente, ar trebui să fie adăugat, șters și re-adăugat, deoarece în timp ce adăugarea unui element existent nu este o eroare, ștergerea un element lipsă va fi o eroare:

# nft -f - <<'EOF'
adăugați elementul ip mytable myset { 10.10.10.1 }
șterge elementul ip mytable myset { 10.10.10.1 }
adăugați elementul ip mytable myset { 10.10.10.1 timeout 60s }
EOF

Este încă o singură tranzacție atomică.


Note Aditionale

  • din calea pachetului

    Când faceți acest lucru din calea pachetului, există o distincție între adăugați @myset care va seta timeout-ul numai la crearea unui element nou, dar nu va actualiza timeout-ul unui element deja existent, permițându-i să expire mai târziu pe întreaga sa durată și actualizați @myset care stabilește timeout-ul în toate cazurile.

  • Actualizarea regulilor atomice nu se limitează la elemente, ci poate fi folosită la orice nivel

    De exemplu, același lucru se poate face la nivelul setat dacă există un singur element de îngrijit:

    # nft -f - <<'EOF'
    add set ip mytable myset { tip ipv4_addr; semnalează timeout; }
    delete set ip mytable myset
    adăugați set ip mytable myset {
        tastați ipv4_addr
        semnalează timeout
        elemente = { 127.0.0.1 timeout 1m }
    }
    EOF
    

    De fapt, exemplul de mai sus va eșua, deoarece probabil că există o regulă care face referire la setul, deci nu este permis să-l ștergeți nici măcar în timpul tranzacției (se poate rescrie, în schimb, întregul tabel, cu adăugați tabel ip mytable, ștergeți tabelul ip mytable, adăugați ip tabel mytable { ...). Dacă se știe că setul există înainte, este suficient să-l spălați înainte de a adăuga înapoi elementul unic:

    # nft -f - <<'EOF'
    flush set ip mytable myset
    adăugați element ip mytable myset { 127.0.0.1 timeout 1m }
    EOF
    

Desigur, un fișier real poate fi folosit în loc de - <<'EOF'...EOF.

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.