
Controllo centralizzato del firewall
Il controllo centralizzato del firewall offre un modo centralizzato per gestire il firewall su più server o bilanciatori di carico che eseguono iptables. In questo modo puoi rapidamente consentire/bloccare/eliminare/cercare range di abuso ecc. con un unico comando su più server. Accede a questi server tramite ssh.
Supporta sia IPv4 che IPv6.
Testato su Debian 6.x / 7.x / 8.x / 9.x, ma dovrebbe funzionare su qualsiasi distribuzione.
Per utilizzare le funzioni 'precheck', 'protected' e 'findip' per IPv6, è necessario il modulo Python 'netaddr' installato. IPv4 non ne ha bisogno poiché utilizza il matching del prefisso sulla forma binaria dell'IP.
Debian: apt-get install python3-netaddr
È più efficiente utilizzare 'ipset' in aggiunta a iptables. Ipset può essere utilizzato per gestire liste a cui iptables può fare riferimento e utilizzare. Questo funziona più velocemente e la manipolazione della lista è anche più flessibile ed è il metodo preferito per utilizzare questo script.
Debian: apt-get install ipset
Poiché questo script si connette ai server dati tramite ssh, tale accesso deve essere presente prima che possa essere utilizzato.
Copia il file di configurazione di esempio da cfc.cfg-example a cfc.cfg la prima volta.
Le seguenti impostazioni possono essere configurate nel file cfc.cfg:
action: imposta l'azione quando si aggiunge una regola, default: DROP
checkaggrbin: percorso dello script checkaggr.py, default: ./checkaggr.py
cleanupconfirmation: chiede conferma prima di eseguire il comando clean, impostare a false per uso cron, default: true
date: imposta il formato della data per i commenti del firewall, default: $(date +%d%m%Y) -> 22062016
dateipset: imposta il formato della data per i commenti ipset del firewall, lascia questo al default per evitare di rompere alcune funzioni, default: $(date +%Y%m%d) -> 20160622
ipsetname: imposta il nome della lista IPSET, default: blockedips
ipsetservers: imposta i server che usano IPSET invece di iptables, default: "lvs05.example.com lvs06.example.com"
fwchain: nome della catena del firewall per aggiungere/eliminare/cercare, default: INPUT
masklimit: dimensione massima dei range IP che possono essere aggiunti, default: /21
precheck: controlla se l'IP che sta per essere aggiunto è già nel firewall o parte di un range più grande aggiunto, potrebbe essere un po' lento su firewall grandi in IPv6 (~25 sec. per cercare 500 range IP per server), default: true
protected: abilita i range protetti aggiunti, default: true
protectedranges: range IP che sono esclusi dalla funzione 'add', solitamente i range di proprietà della rete locale, default: "172.16.0.0/12 10.0.0.0/8 192.168.0.0/16"
pythonbin: posizione del binario Python utilizzato, default: /usr/bin/python3
servers: imposta i server che usano solo iptables, default: "lvs01.example.com lvs02.example.com lvs03.example.com lvs04.example.com"
Le funzioni IPv6 sono contrassegnate dal suffisso '6'
Quando inserisci IP/range con i seguenti comandi, fallo in notazione CIDR, questa viene validata e non accetta nient'altro.
add:
cfc.sh add n.n.n.n/NN '<commento opzionale>'
cfc6.sh add <range_IPv6> '<commento opzionale>'
Aggiunge l'IP(range) dato ai firewall con l'azione configurata per tutto il traffico proveniente da quella sorgente. Crea un commento di default con la data corrente, puoi aggiungere un commento opzionale usando apici singoli per aggiungere un motivo o il proprietario di quel range come esempio. Può anche essere cercato successivamente su quel commento.
addstring:
cfc.sh addstring <protocollo>:<porta_dest> <stringa>
cfc6.sh addstring <protocollo>:<porta_dest> <stringa>
Aggiunge un blocco di stringa a iptables per un certo protocollo e porta di destinazione. Un esempio pratico potrebbe essere bloccare un User-Agent destinato a un gruppo di webserver, quindi una connessione tcp destinata alla porta 80 con la stringa: Firefox/28.0, tutto il traffico in ingresso corrispondente a quella stringa verso la porta tcp 80 verrebbe bloccato:
cfc.sh addstring tcp:80 'Firefox/28.0'
Attenzione, questo può avere grandi conseguenze se la stringa non è abbastanza specifica!
clean:
cfc.sh clean <numero_di_giorni_precedenti>
Pulisce tutte le regole del firewall CFC più vecchie di n giorni. Tieni presente che dipende dal formato data predefinito! Quindi se hai personalizzato il formato della data, dovrai regolare lo script nella sezione 'clean'.
del:
cfc.sh del n.n.n.n/NN
cfc6.sh del <range_IPv6>
Elimina l'IP(range)/regola dato dai firewall.
delstring:
cfc.sh delstring <protocollo>:<porta_dest> <stringa>
cfc6.sh delstring <protocollo>:<porta_dest> <stringa>
Elimina un blocco di stringa in iptables per un certo protocollo e porta di destinazione.
find:
cfc.sh find <stringa>
cfc6.sh find <stringa>
Cerca nei firewall la stringa data (senza distinzione maiuscole/minuscole), può essere (parte di) un IP / range / commento.
findip:
cfc.sh findip n.n.n.n/NN
cfc6.sh findip <range_IPv6>
Cerca nei firewall se l'IP(range) dato è già parte di una regola aggiunta, potrebbe essere un po' lento su firewall grandi per IPv6 (~25 sec. per cercare 500 range IP per server). IPv4 utilizza invece il matching del prefisso sulla forma binaria dell'IP che è circa il 500% più veloce, questo viene utilizzato anche per le funzionalità precheck e protectedranges.
ipsethostinit:
cfc.sh ipsethostinit <nome_server>
cfc6.sh ipsethostinit <nome_server>
Aggiunge una lista IPSET all'host specificato e una regola iptables che vi fa riferimento utilizzando i parametri definiti in cfc.cfg. Questo deve essere fatto solo una volta prima di aggiungere le regole del firewall.
last:
cfc.sh last <numero_di_voci_più_recenti>
cfc6.sh last <numero_di_voci_più_recenti>
Mostra le ultime voci aggiunte ai firewall.