Linux: comando “ipset” per la gestione avanzata di regole firewall

INFORMATICA, LINUX, TUTORIAL

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

 

Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form