| Firewall IPTABLES piccolo e semplice |
|
| venerd́ 23 novembre 2007 | ||||||
|
Il codice netfliter di Linux 2.4 aggiunge al kernel di Linux il filtraggio di pacchetti con stato (tracciamento delle connessioni), anche per protocolli complessi come FTP e IRC. Inoltre, netfilter ha potenti funzioni di NAT , la capacita' di riscrivere le intestazioni dei pacchetti che inoltra e il supporto di filtri basati sugli indirzzi MAC e su specifiche interfaccie di rete. Supporta anche la creazioni di "catene" personalizzate di filtri, che possono essere utilizzate in aggiunta a quelle predefinite. Le catene di filtraggio predefinite sono INPUT, FORWARD e OUTPUT. In un server web ad esempio non utilizzeremo mai la catena FORWARD a meno che non si tratti di un gateway. La catena INPUT viene utilizzata quando il pacchetto e' destinato alla macchina, mentre la catena OUTPUT quando ha origine dalla macchina stessa. Quando ad una regola corrisponde un pacchetto, la regola puo' accettarlo (ACCEPT) o eliminarlo (DROP), e in questo caso il filtraggio termina; la regola puo' eseguire il log (LOG) che e' un caso speciale in cui il pacchetto viene trasmesso all'utilita' locale syslog, oppure la regola puo' trasferire il pacchetto a una diversa catena di filtri (cioe' una catena NAT o personalizzata). Poiche' netfilter non ha strumenti incorporati per registrare o mantenere le regole tra un'inizializzazione e l'altra del sistema operativo, le regole devono essere aggiunte tramite uno script di avvio. Per visualizzare tutte le regole correntemente memorizzate in netfilter e' possibile usare il seguente comando: iptables --list Per specificare soltanto una catena invece: iptables --list INPUT Per eliminare tutte le regole da tutte le catene, usiamo: iptables --flush La sintassi base per scrivere le regole di iptables e' la seguente: iptables -I (insert) chain_name rule_specification iptables -D (delete) iptables -R (replace) iptables -A (append) chain_name corrisponde ad uno fra INPUT, OUTPUT, FORWARD. Mentre rule_specification corrisponde al resto della riga di comando che specifica la nuova regola (es. ACCEPT, DROP o LOG) Esempio: iptables -A INPUT -p tcp --dport 80 -j ACCEPT -m state --state NEW L'esempio sopra riportato si legge cosi': Accetta tutti i pacchetti in ingresso di tipo TCP, la cui porta di destinazione e' la 80, associati ad una connessione nuova. A questo punto siamo pronti per creare uno script iptables. Inizializziamo netfilter: modprobe ip_tables modprobe ip_conntrack_ftp Cancella le vecchie regole e le tabelle personalizzate: iptables --flush iptables --delete-chain Impostiamo tutte le regole predefinite per tutte le catene predefinite: iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP Lasciamo libere le interfaccie di loopback: iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT Vediamo ora alcune regole riguardo alcuni pacchetti che hanno indirizzi ip non instradabili su internet e che quindi potrebbero essere contraffatti: iptables -A INPUT -s 255.0.0.0/8 -j LOG --log-prefix "Spoofed source ip" iptables -A INPUT -s 255.0.0.0/8 -j DROP iptables -A INPUT -s 0.0.0.0/8 -j LOG --log-prefix "Spoofed source ip" iptables -A INPUT -s 0.0.0.0/8 -j DROP iptables -A INPUT -s 127.0.0.0/8 -j LOG --log-prefix "Spoofed source ip" iptables -A INPUT -s 127.0.0.0/8 -j DROP iptables -A INPUT -s 192.168.0.0/16 -j LOG --log-prefix "Spoofed source ip" iptables -A INPUT -s 192.168.0.0/16 -j DROP iptables -A INPUT -s 172.16.0.0/12 -j LOG --log-prefix "Spoofed source ip" iptables -A INPUT -s 172.16.0.0/8 -j DROP iptables -A INPUT -s 10.0.0.0/8 -j LOG --log-prefix "Spoofed source ip" iptables -A INPUT -s 10.0.0.0/8 -j DROP iptables -A INPUT -s 208.98.44.10 -j LOG --log-prefix "Spoofed server ip" iptables -A INPUT -s 208.98.44.10 -j DROP Tutti questi ip sono ip specificati nella RFC 1918 come "riservati per uso interno", quindi sono i candidati usati per spoofing. Se 208.98.44.10 e' l'ip del server stesso, allora un'attacco potrebbe essere quello che il server sommerge di pacchetti contraffatti se stesso, quindi vanno bloccati. Inoltre le regole consentono di registrare su un log il pacchetto e questo banalmente va fatto prima di cancellarlo (DROP). Un altro tipo di attacco potrebbe essere quello in cui al server arrivi un pacchetto con i flag SYN, ACK, FIN o qualche altra combinazione impostati a 1. In generale questi pacchetti verrebbero consentiti perchè verrebbero interpretati come pacchetti di connessioni precedentemente permesse. In generale pacchetti i cui bit SYN ACK e FIN sono impostati piu' per volta o in qualche combinazione sono probabilmente pacchetti ostili e vanno bloccati. iptables -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "Stealth scan?" iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP Ora veniamo a specificare le regole di filtraggio dedicate al server in questione. Veniamo alle regole di ingresso: iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED iptables -A INPUT -p tcp -j ACCEPT --dport 22 -m state --state NEW iptables -A INPUT -p tcp -j ACCEPT --dport 21 -m state --state NEW iptables -A INPUT -p tcp -j ACCEPT --dport 80 -m state --state NEW iptables -A INPUT -j LOG --log-prefix "Dropped by default" Veniamo ora alle catene di OUTPUT: iptables -I OUTPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p icmp -j ACCEPT --icmp-type echo request iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT iptables -A OUTPUT -j LOG --log-prefix "Dropped by default" La prima regola consente di far uscire i pacchetti soltanto di connessioni gia' approvate. La seconda consente i ping verso l'esterno. La terza consente le interrogazioni DNS. Queste due regole non sono strettamente indispensabili, infatti negli utlimi anni sono stati effettuati attacchi DoS che l'hanno sfruttate.
3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved." |
||||||
| < Prec. | Pros. > |
|---|



