Puncte:0

Cele mai bune practici pentru persistența regulilor nftables

drapel in

Sunt nou în Ubuntu, după ce am trecut de la găzduire pe CentOS7, care folosea iptables și m-am simțit confortabil cu modul în care apf și bfd au gestionat (ascuns) iptables de la mine... și a funcționat bine

Deci, m-am mutat la Ubuntu (20.04 LSR) și „modul ubuntu” de a face firewall cu încercări de interzicere automată de a pătrunde pare a fi nftables și fail2ban

Am folosit iRedMail pentru a configura un server de e-mail de bază bazat pe nginx, postfix, dovecot, clamav, roundcube etc. și a configurat fail2ban pentru a urmări jurnalele pentru încercări de spargere în serviciile de e-mail și ssh etc. și am văzut analizează corect jurnalele mele de e-mail și stochează ip-urile blocate fial2ban în tabelul inet f2b-table

Acest lucru supraviețuiește corect repornirii, dar am observat că fișierul /etc/nftables.conf nu are niciunul dintre tabelele fail2ban în el - are firewall-ul meu de bază pe care îl pot actualiza static pentru a refuza toate porturile tcp pe care le doresc (în principiu) mail și server web și ssh)

Dar, din câte văd, regulile fail2ban nu sunt într-un fișier de configurare, ci par să fie reconstruite la pornire din intrările dintr-un tabel fail2ban dintr-o bază de date mysql configurată de iRedMail

E bine, dar iată dilema: dacă adaug manual o regulă la firewall, profitând de tabelul existent pentru fail2ban, pot...

nft adăugați element inet f2b-table addr-set-postfix-pregreet { spammer.ip.addr.here }

Apare și funcționează.. Am testat prin blocarea cu succes, apoi eliminat prin consola locală..

Cu excepția cazului în care repornesc, întregul tabel este pierdut și reconstruit de fail2ban din intrările din tabel (din nou sunt bine cu asta)

Deci, am continuat și am adăugat propria mea masă/lucruri noi

table inet spammers {
    seteaza gaura neagra {
            tastați ipv4_addr
            elemente = { sample.ip.addr.here }
    }

    lanț de spammeri-lanț {
            tip filtru cârlig intrare filtru prioritate - 2; acceptarea politicii;
            ip saddr @blackhole drop
    }
 }

Din nou, am testat acest lucru și funcționează bine, dar pentru a persista, trebuie să îl scriu în /etc/nftables.conf sau să configurez acel director pentru a citi regulile mele etc.

Aș putea face acest lucru adăugând o includere în nftables.conf meu într-un director de reguli arbitrare și apoi stoca tabelul în acesta de fiecare dată când adaug o adresă, dar acest lucru pare urât și greșit

ca și în cazul în care vreau să adaug un nou spammer la lista mea pot face

nft add element inet spammers blackhole { new.ip.addr.here }

dar atunci ar trebui să... Nu știu? persistă în tabelul la dosarul meu?

nft list table inet spammers > /etc/nftables.d/spammers.conf

Așadar, acesta este un mod în care aș putea face asta, dar i-am văzut pe alții vorbind despre netfilter-persist, dar asta nu face parte din Ubuntu, așa că înainte de a porni fie să-mi inventez propria roată, fie să cobor în gaura iepurelui netfilter-persist sau (nu mulțumesc) faceți ceva asemănător cu ceea ce pare să fi făcut fail2ban... (stocarea IP-urilor interzise într-o bază de date și reconstruirea listei la conectare)

Pot veni cu mai multe moduri în care aș putea face asta.. dar mă întrebam dacă există o „cea mai bună practică” „Ubuntu-way” care îmi lipsește aici...

UPDATE/EDIT: Dacă nu primesc o sugestie mai bună, „soluția” mea deocamdată este

mkdir /etc/nftables.d/
nft list table inet spammers > /etc/nftables.d/spammers.conf

și apoi mi-am editat /etc/nftables.conf pentru a adăuga această linie în partea de jos

includ „/etc/nftables.d/*.conf”

Acum, când adaug un bloc la tabel, sunt 2 pași:

nft add element inet spammers blackhole { some.evildoer.ip.address }
nft list table inet spammers > /etc/nftables.d/spammers.conf

Nu este cel mai frumos, dar funcționează absolut.. Bineînțeles, aș putea include totul în propriul script personalizat, astfel încât să pot numi ceva de genul

banspammer „badguy.ip.addr.here”

și banspammer ar adăuga elementul de adresă specificat și ar salva definiția tabelului actualizat...

din nou, acest lucru se simte ca „nu este o practică bună”, de unde întrebarea mea.

EDIT: 22-12-2021 OK, deci vorbesc singur, dar din moment ce nu am primit niciun feedback, am mers cu ideea mea - funcționează și am scris acest mic script banspammer...este brut și probabil extrem de periculos - nu am făcut verificări de sănătate, cum ar fi să mă obosesc să verific dacă calea fișierului de configurare este validă și nu am făcut nicio copie de rezervă a fișierului respectiv etc...

Deoarece intrarea în tabel este de tip ipv4_addr, nftables efectuează validarea, așa că nu îmi fac prea multe griji pentru asta

REȚINEȚI că configurația mea specială avea deja un filtru numit filtru în familia inetului - am adăugat acest lucru ca o listă cu prioritate puțin mai mică, am creat și directorul /etc/nftables.d și l-am adăugat în codul meu pentru a analiza directorul de configurare ca am mentionat mai sus

aici sperăm că cineva va găsi acest lucru util.

M-aș fi interesat în continuare un mod mai „Ubuntu” dacă ar exista așa ceva.

#!/usr/bin/sh

#################################################################### ##############################
# banspammer 2021-12-22 Digital Sorceress
#  
# REZUMAT
# Acest script adaugă un ip sau un interval de Ips (vezi adăugarea elementului) la nftables
# în special pentru gaura mea neagră de spammer
#, de asemenea, persistă în /etc/nftables.d/spammers.conf
#
# pune asta undeva ca /root/tandautils
# apoi accesați /user/local/sbin și ln -s /root/tandautils/banspammer.sh banspammer
#
#################################################################### ##############################

# Gestionați argumentele liniei de comandă
COMANDĂ=$1
ADRESĂ=2 USD


# locația fișierului de configurare a demonului ssh
# implicit pentru CentOS este CONFIG_FILE=/etc/ssh/sshd_config
#
CONFIG_FILE=/etc/nftables.d/spammers.conf



# Iată subrutinele pentru acțiuni individuale
ban_spammer () {
    # Lansați comanda de bază pentru a interzice spammerul 
    echo „adăugarea de spammer la blackhole...”
    
    nft add element inet spammers blackhole { ${ADDRESS} }
    BAN_SPAMMER_RESULT=$?
    dacă [ $BAN_SPAMMER_RESULT -eq 0 ] 
    atunci
        echo " DONE: ${ADDRESS} adăugat la tabelul de spammer"
    fi
    ecou ""
}

unban_spammer () {
    # Lansați comanda de bază pentru a interzice spammerul 
    echo „eliminarea spammerului din gaura neagră...”
    
    nft delete element inet spammers blackhole { ${ADDRESS} }

    UNBAN_SPAMMER_RESULT=$?
    dacă [ $UNBAN_SPAMMER_RESULT -eq 0 ] 
    atunci
        echo " DONE: ${ADDRESS} eliminat din tabel"
    fi
    ecou ""
}

persist_spamtable () {
    echo "persistență spamtable la ${CONFIG_FILE}..."
    # trebuie să menținem tabelul de spam în config
    NFT list table inet spammers > ${CONFIG_FILE}
    dacă [ $? -eq 0]
    atunci
      echo "terminat.. afișează tabelul..."
      ecou ""
      nft list table inet spammers
    altfel
      echo "Eroare persistă tabelul... "
    fi
    ecou ""
}

list_spamtable () {
    echo „listarea spamtable”
    ecou ""
    nft list table inet spammers
    ecou ""
}

kill_spamtable () {
    echo "resetarea/crearea spamtablelor necompletate ${CONFIG_FILE}..."

    #rm -f /etc/nftables.d/spammers.conf
    tee /etc/nftables.d/spammers.conf <<EOF
table inet spammers {
    seteaza gaura neagra {
        tastați ipv4_addr
    }

    lanț de spammeri-lanț {
        tip filtru cârlig intrare filtru prioritate - 2; acceptarea politicii;
        ip saddr @blackhole drop
    }
}
EOF
    ecou ""
    dacă [ $? -eq 0]
    atunci
        echo "succes.. iată noul fișier:"
        ecou ""
        cat /etc/hftables.d/spammers.conf
    altfel
        echo "eroare la scrierea fișierului..."
    fi
    
    ecou ""
}

ajuta-ma () {
  echo „Acesta este un instrument pentru a simplifica blocarea adreselor IP ale spammerilor”
  ecou " "
  echo „banspammer 2021-12-22 DigitalSorceress” 
  ecou " "
  echo „REZUMAT”
  echo " Acest script este folosit pentru a simplifica actul de a adăuga/elimina spammeri din "
  echo „un tabel pentru spammeri în setul de reguli nftables”
  ecou " "
  ecou " "
  echo "utilizare: $0 comandă banspammer [adresă] "
  ecou " "
  echo " opțiuni de comandă: "
  ecou "adresa de interzicere"
  echo " interzice adresa țintă; poate fi o singură IP sau o listă de separare prin virgulă "
  ecou " "
  ecou "unban adresa"
  echo " elimină adresa țintă poate fi o singură IP sau o listă cu virgulă "
  ecou " "
  ecou "resetare"
  echo " șterge toate intrările din tabelul de spammer "
  echo " rețineți că acest lucru poate fi folosit pentru a crea un nou tabel gol "
  ecou " "
  ecou "arata"
  echo " afișează lista curentă a tabelului de spam "
  ecou " "
  ecou "ajutor"
  echo " Afișează această casetă de dialog de ajutor "
}



# Aici facem munca efectivă pe baza comenzii transmise
cazul „$COMMAND” în
  interzice)
    dacă [ $# -eq 2 ] 
    atunci
        echo „adresă de interzicere: ${ADDRESS}”
        ban_spammer ${ADDRESS}
      dacă [ $BAN_SPAMMER_RESULT -eq 0 ]
      atunci
        persist_spamtable
      fi
    altfel
        echo „comanda ban necesită un singur IP sau o listă de adrese IP separate prin virgulă”
    fi
    ;;
  unban)
    dacă [ $# -eq 2 ] 
    atunci
      echo „Anularea interzicerii adresei: ${ADDRESS}”
      unban_spammer ${ADDRESS}
      dacă [ $UNBAN_SPAMMER_RESULT -eq 0 ]
      atunci
        persist_spamtable
      fi
    fi
    ;;
  spectacol)
      list_spamtable
      ;;
  resetare)
      kill_spamtable
      ;;
  Ajutor)
    ajuta-ma
    ;;
  *)
      echo „Utilizare: $0 ban|unban comma-separated-ip-list sau $0 show|reset”
      iesirea 1
esac
Puncte:0
drapel us

daca tu apt-get install iptables-persistent va trage înăuntru netfilter-persistent care pare să fie ceea ce căutați pentru a vă persista regulile netfilter?

Someone avatar
drapel my
Așa cum este scris în prezent, răspunsul dvs. este neclar. Vă rugăm să [editați] pentru a adăuga detalii suplimentare care îi vor ajuta pe alții să înțeleagă cum se adresează aceasta întrebarea adresată. Puteți găsi mai multe informații despre cum să scrieți răspunsuri bune [în centrul de ajutor](/help/how-to-answer).

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.