<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>http://wiki.netsitech.com/index.php?action=history&amp;feed=atom&amp;title=Netfilter</id>
	<title>Netfilter - Cronologia</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.netsitech.com/index.php?action=history&amp;feed=atom&amp;title=Netfilter"/>
	<link rel="alternate" type="text/html" href="http://wiki.netsitech.com/index.php?title=Netfilter&amp;action=history"/>
	<updated>2026-05-08T08:23:14Z</updated>
	<subtitle>Cronologia della pagina su questo sito</subtitle>
	<generator>MediaWiki 1.34.4</generator>
	<entry>
		<id>http://wiki.netsitech.com/index.php?title=Netfilter&amp;diff=4145&amp;oldid=prev</id>
		<title>Mazzotti: Creata pagina con '=NetFilter e il firewalling su Linux= Il codice di firewalling nel kernel Linux ha una sua storia: Nel kernel 2.0 ( 1996 ) si usava ipfwadm Nel kernel 2.2 ( 1999 ) si sono usate ...'</title>
		<link rel="alternate" type="text/html" href="http://wiki.netsitech.com/index.php?title=Netfilter&amp;diff=4145&amp;oldid=prev"/>
		<updated>2012-08-09T09:30:45Z</updated>

		<summary type="html">&lt;p&gt;Creata pagina con &amp;#039;=NetFilter e il firewalling su Linux= Il codice di firewalling nel kernel Linux ha una sua storia: Nel kernel 2.0 ( 1996 ) si usava ipfwadm Nel kernel 2.2 ( 1999 ) si sono usate ...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nuova pagina&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=NetFilter e il firewalling su Linux=&lt;br /&gt;
Il codice di firewalling nel kernel Linux ha una sua storia:&lt;br /&gt;
Nel kernel 2.0 ( 1996 ) si usava ipfwadm&lt;br /&gt;
Nel kernel 2.2 ( 1999 ) si sono usate le ipchains&lt;br /&gt;
Dal kernel 2.4 ( 2001 ) sono state introdotte le iptables&lt;br /&gt;
Tutt'ora utilizzate nel ramo 2.6 ( 2002 )&lt;br /&gt;
&lt;br /&gt;
Il framework netfilter/iptables gestisce tutte le attività di firewalling su Linux:&lt;br /&gt;
- Netfilter comprende i moduli del kernel&lt;br /&gt;
- iptables è il comando con cui si gestisce netfilter&lt;br /&gt;
&lt;br /&gt;
Feature principali:&lt;br /&gt;
- Packet filtering stateless e stateful&lt;br /&gt;
- Supporto IPv4 e IPv6&lt;br /&gt;
- Ogni tipo di natting (NAT/NAPT)&lt;br /&gt;
- Infrastruttura flessibile ed estendibile&lt;br /&gt;
- Numerosi plug-in e moduli aggiuntivi per funzionalità aggiuntive&lt;br /&gt;
&lt;br /&gt;
[http://www.netfilter.org Sito ufficiale]&lt;br /&gt;
&lt;br /&gt;
==Logica di Iptables: tabelle, catene, regole, target==&lt;br /&gt;
Iptables lavora su 3 tabelle (tables) di default:&lt;br /&gt;
'''filter''' - Regola il firewalling: quali pacchetti accettare, quali bloccare&lt;br /&gt;
'''nat''' - Regola le attività di natting&lt;br /&gt;
'''mangle''' - Interviene sulla alterazione dei pacchetti.&lt;br /&gt;
&lt;br /&gt;
Ogni tabella ha delle catene (chains) predefinite ('''INPUT, OUTPUT, FORWARD''' ... ) a cui possono essere aggiunte catene custom.&amp;lt;br&amp;gt;&lt;br /&gt;
Ogni catena è composta da un elenco di regole (rules) che identificano pacchetti di rete secono criteri diversi (''es: -p tcp --dport 80 -d 10.0.0.45'')&amp;lt;br&amp;gt;&lt;br /&gt;
Ogni regola termina con una indicazione (target) su cosa fare dei pacchetti identificati dalla regola stessa (''es: -j ACCEPT,  -j DROP ...'')&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Firewall con la tabella filter==&lt;br /&gt;
E' la tabella implicita e predefinita (-t filter)&amp;lt;br&amp;gt;&lt;br /&gt;
Riguarda le attività di filtraggio del traffico.&amp;lt;br&amp;gt;&lt;br /&gt;
Ha 3 catene di default:&lt;br /&gt;
* '''INPUT''' - Riguarda tutti i pacchetti destinati al sistema. In entrata da ogni interfaccia.&lt;br /&gt;
* '''OUTPUT''' - Riguarda i pacchetti che sono originati dal sistema e destinati ad uscire.&lt;br /&gt;
* '''FORWARD''' - Riguarda i pacchetti che attraversano il sistema, con IP sorgente e destinazione esterni.&lt;br /&gt;
&lt;br /&gt;
Esempio per permettere accesso alla porta 80 locale:&lt;br /&gt;
 iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT&lt;br /&gt;
Analoga a:&lt;br /&gt;
 iptables -I INPUT -p tcp --dport 80 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
Esempio per permettere ad un pacchetto con IP sorgente 10.0.0.4 di raggiungere il server 192.168.0.1 attraversando il firewall:&lt;br /&gt;
 iptables -I FORWARD -s 10.0.0.4 -d 192.168.0.1 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
==iptables - One command to rule them all==&lt;br /&gt;
Il comando iptables viene usato per ogni attività di gestione e configurazione.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Inserimento regole:&lt;br /&gt;
 iptables -A CATENA ... - Aggiunge una regola alla fine della catena indicata&lt;br /&gt;
 iptables -I CATENA [#] ... - Inserisce alla riga # (default 1) una regola nella catena indicata&lt;br /&gt;
 iptables -N CATENA - Crea una nuova catena custom&lt;br /&gt;
 iptables -P CATENA TARGET - Imposta il target di default per la catena indicata&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Rimozione regole e azzeramenti:&amp;lt;br&amp;gt;&lt;br /&gt;
 iptables -F [catena] - Ripulisce tutte le catene (o quella indicata)&lt;br /&gt;
 iptables -X [catena] - Ripulisce tutte le catene custom (o quella indicata)&lt;br /&gt;
 iptables -Z [catena] - Azzera i contatori sulle catene&lt;br /&gt;
 iptables -D catena # - Cancella la regola numero # dalla catena indicata&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Interrogazione:&amp;lt;br&amp;gt;&lt;br /&gt;
 iptables -L - Elenca le regole esistenti&lt;br /&gt;
 iptables -L -n -v - Elenca, senza risolvere gli host, in modo verboso le regole esistenti&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Gestione e salvataggio regole==&lt;br /&gt;
Le regole di iptables vengono immediatamente attivate nel momento in cui si inserisce il comando.&amp;lt;br&amp;gt;&lt;br /&gt;
Lo stato del firewall rimane fino a quando non si esegue un riavvio.&amp;lt;br&amp;gt;&lt;br /&gt;
Il comando iptables-save stampa su stdout la configurazione corrente del firewall&amp;lt;br&amp;gt;&lt;br /&gt;
Con iptables-restore si può ripristinare una configurazione salvata con iptables-save&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Durante l'avvio le impostazioni di iptables possono essere ripristinate con:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* Uno script shell che esegue in successione tutti i comandi iptables necessari.&amp;lt;br&amp;gt;&lt;br /&gt;
Ha il vantaggio di permettere commenti fra le regole e poter usare variabili, cicli e impostare regole sulla base di parametri variabili.&amp;lt;br&amp;gt;&lt;br /&gt;
Spesso lo si richiama da /etc/rc.d/rc.local ma sarebbe meglio applicarlo appena attivate le interfacce di rete&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* Uno script di init.d che tramite iptables-restore ripristina una configurazione precedentemente salvata. E' la soluzione usata da molte distribuzioni, dove il file di configurazione del firewall non è altro che l'output di un comando come: iptables-save &amp;gt; /etc/sysconfig/iptables. Ha il vantaggio di applicare lunghi elenchi di regole in modo molto più rapido.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Criteri standard di match==&lt;br /&gt;
Le possibilità di matching di pacchetti secondo diversi criteri sono molte e possono essere abbinate nella stessa regola.&lt;br /&gt;
Il carattere ! si usa come negazione (NOT logico):&lt;br /&gt;
Criteri di match standard:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
-p [!] proto - Protocollo IP. Secondo IP number o nome (es: tcp, udp, gre, ah...)&lt;br /&gt;
-s [!] address[/mask] - Indirizzo IP sorgente (o network con maschera di sottorete)&lt;br /&gt;
-d [!] address[/mask] - Indirizzo IP destinazione (o network)&lt;br /&gt;
-i [!] interface[+] - Interfaccia di rete di entrata ([+] wildcard)&lt;br /&gt;
-o [!] interface[+] - Interfaccia di rete di uscita ([+] wildcard)&lt;br /&gt;
-f - Frammento di pacchetto&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Estensioni per principali protocolli&lt;br /&gt;
'''TCP''' (-p tcp)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
--sport port[:port] - La porta o il range di porte TCP sorgenti (Per un range da 1 a 1024: 1:1024&lt;br /&gt;
--dport port[:port] - La porta o il range di porte TCP di destinazione &lt;br /&gt;
--tcp-flags flag - I flag TCP del pacchetto attivi (SYN, ACK, FIN, RST, URG, PSH)  &lt;br /&gt;
--syn - Pacchetti con solo SYN attivo (nuove connessioni)&lt;br /&gt;
--tcp-option option - Match per specifiche opzioni della intestazione TCP&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Esempio per droppare tutti i pacchetti TCP in entrata su porte privilegiate:&lt;br /&gt;
 iptables -I INPUT -p tcp --syn --dport 0:1024 -j DROP&lt;br /&gt;
&lt;br /&gt;
'''UDP''' (-p udp)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
--sport port[:port] - La porta o il range di porte UDP sorgenti (Per un range da 1 a 1024: 1:1024&lt;br /&gt;
--dport port[:port] - La porta o il range di porte UDP di destinazione &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Esempio per permettere pacchetti UDP per traceroute:&lt;br /&gt;
 iptables -I INPUT -p udp --sport 32769:65535 --dport 33434:33523 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
'''ICMP''' (-p icmp)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
--icmp-type type - Match sul tipo di pacchetto ICMP in formato numerico o completo (iptables -p icmp --help per un elenco dei tipi ICMP)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Esempio per permettere pacchetti UDP per traceroute:&lt;br /&gt;
 iptables -I INPUT -p udp --sport 32769:65535 --dport 33434:33523 -j ACCEPT&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Target e jump==&lt;br /&gt;
Ogni regola termina con la definizione di un TARGET che indica cosa viene fatto del pacchetto.&amp;lt;br&amp;gt;&lt;br /&gt;
Molti dei target principali (ACCEPT, DROP, REJECT...) determinano l'interruzione della catena: il pacchetto matchato segue le indicazioni del Target e non vengono considerate le catene successive.&amp;lt;br&amp;gt;&lt;br /&gt;
Come target si può anche impostare una catena custom nella quale &amp;quot;saltare&amp;quot; (jump -j) per procedere nell'attraversamento delle regole.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Target principali&lt;br /&gt;
*'''-j ACCEPT''' - Il pachetto matchato viene accettato e procede verso la sua destinazione. Si usa per definire il traffico permesso.&lt;br /&gt;
*'''-j DROP''' - Il pacchetto viene rifiutato e scartato, senza alcuna notifica al mittente. Si usa, in alternativa a REJECT, per bloccare traffico. &lt;br /&gt;
*'''-j REJECT''' - Il pacchetto viene rifiutato. Al mittente viene mandato un pacchetto (configurabile) di notifica  tipo ICMP port-unreachable (--reject-with icmp-port-unreachable)&lt;br /&gt;
*'''-t LOG''' - Il pacchetto viene loggato via syslog e procede l'attraversamento della catena. Opzioni: (--log-level, --log-prefix, --log-tcp-sequence, --log-tcp-options,     --log-ip-options) &lt;br /&gt;
*'''-j DNAT''' - Viene modificato l'IP di destinazione del pacchetto. Target disponibile solo in nat / PREROUTING e nat / OUTPUT. L'opzione --to-destination IP:porta definisce il nuovo IP di destinazione. Si usa tipicamente su network firewall che nattano server di una DMZ&lt;br /&gt;
*'''-j SNAT''' - Viene modificato l'IP sorgente. Solo in nat / POSTROUTING. Prevede l'opzione --to-source IP:porta. Si usa per permettere l'accesso a  Internet da una rete locale con IP privati.&lt;br /&gt;
*'''-j MASQUERADE''' - Simile a SNAT, si applica quando i pacchetti escono da interfacce con IP dinamico (dialup, adsl, dhcp...). Si usa solo in nat / POSTROUTING e prevede l'opzione --to-ports porte. &lt;br /&gt;
*'''-j REDIRECT''' - Redirige il pacchetto ad una porta locale. Usabile solo in nat / PREROUTING e nat / OUTPUT è previsto per fare un transparent proxy (con proxy server in esecuzione sulla macchina con iptables)&lt;br /&gt;
*'''-j RETURN''' - Interrompe l'attraversamento della catena. Se questa è una secondaria, il pacchetto torna ad attraversare la catena madre da punto in cui aveva fatto il salto nella secondaria. Se il RETURN è in una delle catene di default, il pacchetto interrompe l'attraversamento e segue la policy di default.&lt;br /&gt;
*'''-j TOS''' - Usabile solo nella tabella mangle, permette di cambiare il TOS (Type Of Service) di un pacchetto con l'opzione --set-tos. Per un elenco dei parametri disponibili: iptables -j TOS -h&lt;br /&gt;
*'''-j MIRROR''' - Curioso e sperimentale, questo target invia un pacchetto speculare al mittente. In pratica è come se facesse da specchio per tutti i pacchetti ricevuti. Da usare con cautela, per evitare attacchi DOS indiretti.&lt;br /&gt;
&lt;br /&gt;
==Connection tracking con Iptables==&lt;br /&gt;
Una delle più potenti e benvenute feature di iptables è la gestione del traffico con la consapevolezza dei flussi e delle connessioni dei protocolli usati.&amp;lt;br&amp;gt;&lt;br /&gt;
Il modulo ''ip_conntrack'' di Netfilter si preoccupa di gestire le connessioni e fornire gli strumenti per poterle controllare.&amp;lt;br&amp;gt;&lt;br /&gt;
In ''/proc/net/ip_conntrack'' il kernel mantiene e aggiorna in tempo reale lo stato delle connessioni gestite (il numero massimo è configurabile modificando /proc/sys/net/ipv4/ip_conntrack_max.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
La gestione del traffico sulla base delle connessioni è fatta richiamando il modulo di match state che permette di dividere il traffico secondo diversi stati:&lt;br /&gt;
*'''NEW''' - Il primo pacchetto relativo ad una nuova connessione (syn TCP o nuovo pacchetto UPD)&lt;br /&gt;
*'''ESTABLISHED''' - Pacchetti relativi a connessioni già stabilite, in cui si è avuto almeno un pacchetto da entrambi i peer&lt;br /&gt;
*'''RELATED''' - Pacchetti in qualche modo correlati a connessioni esistenti ed established. Ticipi esempi il traffico di dati FTP o il trasferimetno DCC in IRC.&lt;br /&gt;
*'''INVALID''' - Pacchetti che non rientrano in alcuno dei suddetti stati, di solito vengono droppati.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Il match state risulta particolarmente comodo per gestire il &amp;quot;traffico di ritorno&amp;quot; per connessioni accettate.&amp;lt;br&amp;gt;&lt;br /&gt;
Ad esempio, per permettere su un host, tutto il traffico in uscita e, in entrata, solo il traffico correlato a quanto uscito bastano regole tipo:&lt;br /&gt;
 iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
 itables -I OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Per gestire lo stato di connessione di alcuni protocolli particolari, esistono dei moduli speciali adibili sia alla gestione del connection tracking, sia al natting:&lt;br /&gt;
 ip_conntrack_ftp - ip_nat_ftp : Conntrack e nat per FTP&lt;br /&gt;
 ip_conntrack_h323 - ip_nat_h323 : Conntrack e nat per H323&lt;br /&gt;
 ip_conntrack_irc - ip_nat_irc : Conntrack e nat per IRC&lt;br /&gt;
 ip_conntrack_rtsp - ip_nat_rtsp : Conntrack e nat per IRC&lt;br /&gt;
 ip_conntrack_tftp - ip_nat_tftp : Conntrack e nat per TFTP&lt;br /&gt;
 ip_conntrack_rpc_tcp - ip_conntrack_rpc_udp : Conntrack per RPC&lt;br /&gt;
&lt;br /&gt;
==Tuning dei parametri del kernel==&lt;br /&gt;
Tramite l'interfaccia system control è possibile settare, in tempo reale, numerosi parametri che influenzano il tuning del networking&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Esistono diversi modi per intervenire su sysctl:&lt;br /&gt;
# Usare normali comandi come cat e echo per visualizzare e modificare parametri all'interno di /proc/sys. Es:&lt;br /&gt;
echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
cat /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
# Usare il comando sysctl per visualizzare o settare (con opzione -w) i parametri:&lt;br /&gt;
sysctl -w net.ipv4.ip_forward=&amp;quot;1&amp;quot;&lt;br /&gt;
sysctl net.ipv4.ip_forward&lt;br /&gt;
# Usare il file di configurazione /etc/sysctl.conf che all'avvio viene caricato automaticamente e contiene righe come:&lt;br /&gt;
net.ipv4.ip_forward = 1&lt;/div&gt;</summary>
		<author><name>Mazzotti</name></author>
		
	</entry>
</feed>