Linux: comando “ipset” per la gestione avanzata di regole firewall
Nel campo della sicurezza informatica e della gestione delle reti su sistemi Linux, la gestione delle regole firewall è cruciale. Sebbene ‘iptables’ sia lo strumento tradizionale per tale funzione, ‘ipset’ si dimostra essenziale quando si devono gestire grandi quantità di indirizzi IP o sottoreti.
‘ipset’ consente agli amministratori di creare insiemi di indirizzi IP, porte e altre entità, utilizzabili poi nei comandi ‘iptables’. Questo approccio migliora notevolmente l’efficienza e la scalabilità delle regole firewall. Ad esempio, per bloccare o consentire l’accesso a molti indirizzi IP, è più conveniente aggiungerli a un set con ‘ipset’ piuttosto che creare singole regole in ‘iptables’.
‘ipset’ offre diverse tipologie di set, fra cui:
- iphash: Set basato su hash di indirizzi IP, ottimo per memorizzare molti IP in modo efficiente.
- nethash: Simile a iphash, ma per interi blocchi CIDR.
- ipporthash: Combina indirizzi IP e porte.
- bitmap:ip: Ottimale per intervalli di indirizzi IP contigui, usando una rappresentazione a bitmap.
- bitmap:port: Gestisce intervalli continui di porte, simile a bitmap:ip.
Utilizzare ‘ipset’ porta notevoli vantaggi, tra cui un miglioramento delle performance: invece di processare ogni indirizzo IP singolarmente, ‘iptables’ esamina direttamente un set, riducendo il carico di lavoro sul sistema, specialmente con l’uso estensivo di regole firewall.
Per iniziare, installare ‘ipset’ con:
sudo apt-get install ipset
Creare un set con:
sudo ipset create myset hash:ip
Aggiungere indirizzi IP al set:
sudo ipset add myset 192.168.1.1
Utilizzare il set con ‘iptables’:
sudo iptables -A INPUT -m set --match-set myset src -j DROP
In conclusione, ‘ipset’ è uno strumento potente e flessibile per la gestione delle regole firewall su Linux, permettendo agli amministratori di migliorare l’efficienza e la scalabilità delle configurazioni di sicurezza.
Sintassi di Base
La sintassi di base di ‘ipset’ è semplice:
ipset [azione] [nome_set] [tipo] [opzioni]
Azioni fondamentali includono:
create
: Crea un nuovo set. Esempio:sudo ipset create myset hash:ip
add
: Aggiunge un elemento a un set esistente. Esempio:sudo ipset add myset 192.168.1.1
del
: Rimuove un elemento da un set. Esempio:sudo ipset del myset 192.168.1.1
list
: Mostra tutti gli elementi di un set. Esempio:sudo ipset list myset
destroy
: Elimina un set esistente. Esempio:sudo ipset destroy myset
Opzioni Comuni
‘ipset’ include diverse opzioni che definiscono il comportamento di un set. Tra le più comuni:
timeout
: Definisce il tempo in secondi di permanenza di un elemento nel set. Esempio:sudo ipset create myset hash:ip timeout 300
maxelem
: Numero massimo di elementi in un set. Esempio:sudo ipset create myset hash:ip maxelem 10000
hashsize
: Dimensione dell’hash. Esempio:sudo ipset create myset hash:ip hashsize 1024
Esempi Pratici
Di seguito, alcuni esempi pratici:
Creazione e Popolamento di un Set
sudo ipset create blacklist hash:ip
sudo ipset add blacklist 203.0.113.1
sudo ipset add blacklist 198.51.100.2
Utilizzo del Set con ‘iptables’
sudo iptables -A INPUT -m set --match-set blacklist src -j DROP
Questa regola ‘iptables’ confronterà i pacchetti in entrata con il set ‘blacklist’ e scarterà quelli corrispondenti.
Creazione e gestione di set IP dinamici per firewall
Oltre alla gestione statica degli indirizzi IP, ‘ipset’ permette di configurare set dinamici che si adattano in tempo reale, risultando fondamentali per la sicurezza e l’ottimizzazione dei sistemi.
Set Dinamici e Aggiornamento in Tempo Reale
Una delle funzionalità avanzate di ‘ipset’ è la gestione di set dinamici aggiornabili automaticamente senza dover ripristinare le regole del firewall. Questo è utile per blacklist dinamiche o whitelist aziendali. Gli aggiornamenti possono essere automatizzati tramite script di shell o altri linguaggi come Python.
Utilizzo di Script per Aggiornamento Automatico
Monitora file di log per accessi falliti e aggiorna ‘ipset’ dinamicamente:
#!/bin/bash LOGFILE="/var/log/auth.log" IPSET_NAME="dynamic_blacklist" TAIL_ARG="-F" tail $TAIL_ARG $LOGFILE | while read LINE do if [[ "$LINE" == *"Failed password for"* ]]; then IP=$(echo $LINE | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+') sudo ipset add $IPSET_NAME $IP fi done
Esempio di Integrazione con ‘cron’
Esegue script a intervalli regolari per mantenere set aggiornati:
0 * * * * /path/to/update_ipset.sh
Ripristino e Backup dei Set
Salvare e ripristinare i set ‘ipset’ è cruciale per la continuità della configurazione firewall:
sudo ipset save > /etc/ipset.conf sudo ipset restore < /etc/ipset.conf
Utilizzo di ‘ipset’ in combinazione con iptables
Integrare ‘ipset’ con ‘iptables’ consente una gestione avanzata delle regole firewall, fondamentale per la sicurezza del sistema.
Creazione e Gestione dei Set con ‘ipset’
Ad esempio, per creare un set di indirizzi IP:
sudo ipset create blacklist hash:ip
Aggiungere indirizzi IP:
sudo ipset add blacklist 192.168.0.1
Bloccare traffico dagli IP della blacklist con ‘iptables’:
sudo iptables -A INPUT -m set --match-set blacklist src -j DROP
Automatizzazione e Manutenzione
Automatizza aggiornamenti con cron job:
0 * * * * /usr/local/sbin/update_blacklist.sh
Combattere le Minacce in Tempo Reale
In risposta a un attacco DDoS, aggiornare un set ‘ipset’ può bloccare rapidamente gli IP aggressori.
Applicazioni pratiche di ‘ipset’ per gestire blacklist e whitelist
Usare ‘ipset’ per gestire blacklist e whitelist è essenziale per controllare l’accesso alla rete, particolarmente in ambienti ad alta sicurezza.
Creare una whitelist:
sudo ipset create whitelist hash:ip
Aggiungere indirizzi IP autorizzati:
sudo ipset add whitelist 192.168.1.100 sudo ipset add whitelist 10.0.0.200
Consentire traffico dagli IP in whitelist:
sudo iptables -A INPUT -m set --match-set whitelist src -j ACCEPT
Creare una blacklist:
sudo ipset create blacklist hash:ip
Aggiungere IP bloccati:
sudo ipset add blacklist 192.168.0.1 sudo ipset add blacklist 203.0.113.5
Bloccare IP in blacklist:
sudo iptables -A INPUT -m set --match-set blacklist src -j DROP
Esempi di utilizzo per il miglioramento della sicurezza di rete
La sicurezza di rete è una preoccupazione primaria per i responsabili IT. ‘ipset’ è uno strumento efficace per migliorare la sicurezza su sistemi Linux, consentendo la gestione avanzata di indirizzi IP e altre entity di rete.
Nel contesto delle configurazioni firewall, ‘ipset’ viene utilizzato insieme a ‘iptables’ per creare e gestire set di indirizzi IP in maniera dinamica. Questo è particolarmente utile in scenari in cui è necessario aggiornare frequentemente le regole di filtraggio.
Prevenzione degli attacchi brute force con ‘fail2ban’ integrato con ‘ipset’:
# Configurazione fail2ban con ipset [ssh] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] ipset[name=blacklist-ssh] logpath = /var/log/auth.log bantime = 3600 maxretry = 3
Sono amante della tecnologia e delle tante sfumature del mondo IT, ho partecipato, sin dai primi anni di università ad importanti progetti in ambito Internet proseguendo, negli anni, allo startup, sviluppo e direzione di diverse aziende; Nei primi anni di carriera ho lavorato come consulente nel mondo dell’IT italiano, partecipando attivamente a progetti nazionali ed internazionali per realtà quali Ericsson, Telecom, Tin.it, Accenture, Tiscali, CNR. Dal 2010 mi occupo di startup mediante una delle mie società techintouch S.r.l che grazie alla collaborazione con la Digital Magics SpA, di cui sono Partner la Campania, mi occupo di supportare ed accelerare aziende del territorio .
Attualmente ricopro le cariche di :
– CTO MareGroup
– CTO Innoida
– Co-CEO in Techintouch s.r.l.
– Board member in StepFund GP SA
Manager ed imprenditore dal 2000 sono stato,
CEO e founder di Eclettica S.r.l. , Società specializzata in sviluppo software e System Integration
Partner per la Campania di Digital Magics S.p.A.
CTO e co-founder di Nexsoft S.p.A, società specializzata nella Consulenza di Servizi in ambito Informatico e sviluppo di soluzioni di System Integration, CTO della ITsys S.r.l. Società specializzata nella gestione di sistemi IT per la quale ho partecipato attivamente alla fase di startup.
Sognatore da sempre, curioso di novità ed alla ricerca di “nuovi mondi da esplorare“.