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