Lo scopo di questa configurazione è quello di inserire nel nostro firewall (fatto con iptables) delle regole per bloccare gli ip malevoli (ipv4 e ipv6) presi dalla lista pubblica disponibile dal sito blocklist.de.
Per farlo, useremo:
apt install iptables-persistent ipset-persistent
systemctl enable netfilter-persistent.service
ipset create blocklists-de-permanent_v4 hash:ip family inet hashsize 1024 maxelem 65535 comment ipset create blocklists-de-permanent_v6 hash:ip family inet6 hashsize 1024 maxelem 65535 comment
chmod u+x /opt/blocklists-ipset.py /opt/blocklists-ipset.py
ipset list | less
ipset save -file /etc/iptables/ipsets
# Aggiorno gli ipset di blocklist.de 47 4 * * * root /opt/blocklists-ipset.py && ( /usr/sbin/ipset save -file /etc/iptables/ipsets )
A questo punto si può creare uno script di firewall (che possiamo salvare dove vogliamo, per esempio nella home di root o anche questo in /opt/) che esegua le seguenti azioni:
Le regole così salvate verranno ricaricate al boot da iptables-restore (se funziona tutto correttamente) quindi questo script non va lanciato ad ogni boot, ma lo lanceremo a mano solo alla prima configurazione e poi se vogliamo fare modifiche al nostro firewall.
Ovviamente questo e` un esempio; le vostre regole saranno diverse.
#!/bin/sh #### #### Inizializzazione (cancellazione delle regole vecchie) #### iptables -F ip6tables -F iptables -F -t nat iptables -X ip6tables -X ### ### blocchi per ipset ### iptables -I INPUT -m set --match-set blocklists-de-permanent_v4 src -j DROP ip6tables -I INPUT -m set --match-set blocklists-de-permanent_v6 src -j DROP #### #### SSH (per esempio) #### iptables -A INPUT -i ens3 -m state --state NEW -p tcp --dport 22 -j ACCEPT ip6tables -A INPUT -i ens3 -m state --state NEW -p tcp --dport 22 -j ACCEPT #### #### accetto l' icmp #### iptables -A INPUT -i ens3 -p icmp -j ACCEPT ip6tables -A INPUT -i ens3 -p icmpv6 -j ACCEPT #### #### Blocco tutto quello che entra da ens3 che sia in stato NEW o INVALID #### (e che non sia stato accettato prima, ovviamente) #### iptables -A INPUT -i ens3 -m state --state NEW,INVALID -j DROP ip6tables -A INPUT -i ens3 -m state --state NEW,INVALID -j DROP iptables -A FORWARD -i ens3 -m state --state NEW,INVALID -j DROP ip6tables -A FORWARD -i ens3 -m state --state NEW,INVALID -j DROP #### #### Salvo le regole in modo che al boot vengano ricaricate da #### netfilter-persistent #### /sbin/ip6tables-save > /etc/iptables/rules.v6 /sbin/iptables-save > /etc/iptables/rules.v4
Questa configurazione è la prima che documento per Debian 11 con systemd. Volendo fare la stessa configurazione senza systemd non dovrebbero esserci grosse differenze se non per il comando per abilitare netfilter-persistent che sarà diverso (probabilmente comunque è abilitato di default al momento in cui lo installiamo).
Nella "vecchia logica" che ho usato sempre prima di systemd non avrei proprio usato netfilter-persistent, ma avrei usato uno script di init che carica al boot tutte le regole di firewall e popola anche gli ipset. Questa "nuova logica" è pensata così perché non ho voglia di studiarmi a fondo systemd per crearmi una mia unit che carichi le regole di firewall, quindi ho deciso di appoggiarmi a netfilter-persistent e far fare il lavoro a lui. Probabilmente in futuro comunque tutto questo sarà obsoleto e saremo costretti a usare l'ennesima reinvenzione dell'acqua calda tipo firewalld, quindi sarà tutto da rivedere.