Filtraggio Pacchetti e Firewalls
Difese Perimetrali e in Profondità
Difesa Perimetrale:
- Firewall Tradizionale
- Sopprimere tutti gli accessi alternativi (smartphone, ecc.)
- Monitorare e persegure le violazioni
Difesa in Profondità:
- Difendere ogni macchina
- Logging e filtri addizionali
- Gli attacchi possono provenire dall’interno
- Uso pervasivo di tecniche di crittografazione
- Segmentazione rete interna con switch
Firewall Perimetrale
Insieme di funzionalità coordinate che separano l’Intranet dall’Internet.
Sistema di difesa tra Intranet e Internet.
Composto di più ruoli:
Implementato da piu’ piattaforme (una al limite).
Schema logico di un Firewall
Tabella di Filtraggio Pacchetti
Gateway di Circuito
Router Interno
Separa indirizzi IP validi da interni.
Può compiere ulteriore filtraggio pacchetti
Può implementare Network Address Translation (NAT).
Proxy Web in Uscita
Relay di Posta
DNS
Firewall di Linux
Tuning del firewall per la difesa
Sistemare i parametri di tuning nel file di configurazione /etc/sysctl.conf
:
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.ip_forward = 1
Tabelle iptables
iptables -t filter ...
- Default
- Filtraggio in ingresso
- Nessuna variazione di campi in uscita
iptables -t nat ...
- Filtraggio in ingresso
- Variazione in uscita dei campi IP(mittente), IP(destinatario),
- Porta(mittente), Porta(destinatario)
iptables -t mangle ...
- Filtraggio in ingresso
- Variazione in uscita di qualsiasi campo
iptables -t filter
Default.
Chains predefinite (non si possono eliminare):
- INPUT - pacchetti destinati a questo host
- Firewall personale - Ingress filtering
- OUTPUT - pacchetti in partenza da questo host
- Egress filtering
- FORWARD - pacchetti in transito da questo router
- Firewall perimetrale
Operazioni su una Chain
iptables [-t filter] ...
-A chain regola -j destinazione
- append-I chain regola -j destinazione
- insert-D chain numero
- delete-R chain numero regola -j destinazione
- replace-L [-v] [chain]
- list-F [chain]
- flush-N nuovachain
- crea nuova chain-X nuovachain
- rimuovi chain-E vecchiachain nuovachain
- rinomina chain-P chain destinazione
- policy di default
Destinazioni finali - nessun ulteriore processamento:
- ACCEPT - il pacchetto passa
- REJECT - non passa, è inviato un messaggio al mittente di tipo
ICMP administratively-prohibited
- DROP - non passa e non è inviato alcun messaggio
Destinazioni non finali:
- LOG - registrato a syslog
- Nuovachain - alla chain nuova come subroutine
- RETURN - ritorna alla chain chiamante
Solo ACCEPT e DROP si possono usare come policy di default (opzione -P
)
Esempi di Regole
-s 180.24.36.0/24
- rete sorgente-d 10.0.0.0/8
- rete destinazione-s ! 172.1.2.0/24
-d ! 192.168.1.32/27
- NOT reti specificate-i eth0
- interfaccia di ingresso-o eth1
- interfaccia di uscita-p tcp | udp
- protocollo--sport 1024:65500
- porta sorgente (range)--dport 23
- porta destinazione
-p icmp
--icmp-type 0
- tipo di messaggio ICMP
Regole non specificate valgono ANY
| EVERYWHERE
Policy di Default
iptables -t filter -P chain ACCEPT
- Blacklist: tutto è accettato tranne il traffico descritto dalle regole del chain
- Ogni regola del chain ha destinazione DROP o REJECT
- Strategia deprecata
iptables -t filter -P chain DROP
- Whitelist: tutto è negato tranne il traffico descritto dalle regole del chain
- Ogni regola del chain ha destinazione ACCEPT
- Strategia favorita
Firewall Stateless
SSH con firewall personale stateless
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --sport 22 -j ACCEPT
SSH con firewall perimetrale stateless
iptables -t filter -A FORWARD -d 192.168.1.7 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A FORWARD -s 192.168.1.7 -p tcp --sport 22 -j ACCEPT
Firewall Stateful
Solo per le connessioni con TCP.
Tutte le connessioni già stabilite o in relazione ad esse, sono concesse.
Personale:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Perimetrale:
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Le connessioni nuove concesse con più discriminazione:
iptables -A INPUT -s 10.10.10.0/24 -i eth1 -p tcp --dport 22 -m state --state NEW -j ACCEPT
Firewall e ICMP
Se eth0 è l'interfaccia esterna ed eth1 l'interfaccia interna del filtro personale:
iptables -A OUTPUT -p icmp --icmp-type 8 -o eth0 -j ACCEPT
“ping” in uscita
iptables -A INPUT -p icmp --icmp-type 0 -i eth0 -j ACCEPT
“pong” in ingresso
iptables -A INPUT -p icmp --icmp-type 3 -i eth0 -j ACCEPT
destination unreachable in ingresso
iptables -A INPUT -p icmp --icmp-type 11 -i eth0 -j ACCEPT
TTL exceeded in ingresso
Simili regole per il firewall perimetrale
Tabelle di Iptables
filter:
- ACCEPT o DROP sulla base dei campi del pacchetto in ingresso
- Nessun cambiamento ai campi del pacchetto
nat (Network Address Translation):
- Cambiamento a uno o più dei campi: IP_mittente, IP_destinazione, Porta_mittente, Porta_destinazione
- Eseguito prima del routing (PREROUTING) o dopo il routing (POSTROUTING)
mangle:
- Cambiamento a uno o più campi qualsiasi
- Potenzialmente potente e flessibile, poco usato
- Eseguito prima del routing (PREROUTING) o dopo il routing (POSTROUTING)
Masquerade
Il Firewall si ‘maschera’ come mittente del pacchetto.
Deve sapere a chi va il pacchetto di ritorno.
Esempio:
iptables -A POSTROUTING -t nat -o eth0 -s 192.168.1.0/24 -d 0/0 -j MASQUERADE