Linux ipchains è la riscrittura del codice IPv4 di filtraggio di Linux e di ipfwadm, il quale a sua volta è una riscrittura di ipfw della BSD, credo. È richiesto per l'amministrazione dei filtri dei pacchetti IP nei kernel Linux versione 2.1.102 e successivi.
Il vecchio codice non gestisce i frammenti, ha contatori 32-bit (almeno su Intel), non consente la specificazione di protocolli che non siano TCP, UDP o ICMP, non può effettuare grossi cambiamenti atomicamente, non è possibile specificare regole inverse, ha alcune bizzarrie, e può essere difficile da utilizzare (incline a far commettere errori all'utente). Così almeno secondo l'autore.
Non mi accingo ad approfondire come gestire un firewall con IPChains in quanto esiste un'ECCELLENTE!! HOWTO all'indirizzo http://www.rustcorp.com/linux/ipchains/HOWTO.html.
Si lavora con le catene per nome. Si parte con tre catene predefinite input, output e forward che non possono essere rimosse. Si possono anche creare proprie catene. Le regole, da questo sistema, possono essere aggiunte e cancellate.
Le operazioni per operare su intere catene sono:
Esistono inoltre diversi modi per manipolare le regole di una catena:
Ci sono anche alcune operazioni riguardanti il masquerading, incluse in ipchains in quanto è una buona collocazione:
Esistono alcuni problemi di tempo riguardanti la modifica delle regole del firewall.
Se non si presta particolare attenzione, si potrebbero far passare dei pacchetti mentre si è nel bel mezzo delle modifiche.
# ipchains -I input 1 -j DENY # ipchains -I output 1 -j DENY # ipchains -I forward 1 -j DENY
... effettua le modifiche ...
# ipchains -D input 1 # ipchains -D output 1 # ipchains -D forward 1 #
Questa soluzione scarta tutti i pacchetti per tutta la durata delle modifiche.
Segue un duplicato, adattato per IPChains, delle regole precedenti.
#!/bin/sh # # rc.firewall # ## Svuota tutto, cominciamo da zero /sbin/ipchains -F input /sbin/ipchains -F output /sbin/ipchains -F forward ## Redirezione, necessaria per il proxy HTTP trasparente #$IPCHAINS -A input -p tcp -s 192.1.2.0/24 -d 0.0.0.0/0 80 -j REDIRECT 8080 ## Creazione della propria catena /sbin/ipchains -N my-chain # Consentiamo alle email di giungere al server /sbin/ipchains -A my-chain -s 0.0.0.0/0 smtp -d 192.1.2.10 1024:-j ACCEPT # Consentiamo connessioni email verso server email esterni /sbin/ipchains -A my-chain -s 192.1.2.10 -d 0.0.0.0/0 smtp -j ACCEPT # Consentiamo connessioni Web dirette al proprio server Web /sbin/ipchains -A my-chain -s 0.0.0.0/0 www -d 192.1.2.11 1024: -j ACCEPT # Consentiamo connessioni Web dirette verso server Web esterni /sbin/ipchains -A my-chain -s 192.1.2.0/24 1024: -d 0.0.0.0/0 www -j ACCEPT # Consentiamo traffico DNS /sbin/ipchains -A my-chain -p UDP -s 0.0.0.0/0 dns -d 192.1.2.0/24 -j ACCEPT ## Se si utilizza il masquerading # Non mascherare il traffico interno-interno /sbin/ipchains -A forward -s 192.1.2.0/24 -d 192.1.2.0/24 -j ACCEPT # Non mascherare direttamente l'interfaccia esterna /sbin/ipchains -A forward -s 24.94.1.0/24 -d 0.0.0.0/0 -j ACCEPT # Maschera tutti gli IP interni diretti all'esterno /sbin/ipchains -A forward -s 192.1.2.0/24 -d 0.0.0.0/0 -j MASQ ## Scarta qualsiasi altra cosa /sbin/ipchains -P my-chain input DENY
Non ci si fermi qui. Questo non è un gran firewall e sono sicuro che si vorranno fornire altri servizi. Ancora, si legga l'IPCHAINS-HOWTO.