Avanti Indietro Indice

4. Nuovi target per netfilter

In questo capitolo si cercherà di spiegare l'utilizzo dei nuovi target di netfilter. Le patch appariranno in ordine alfabetico e inoltre non saranno spiegate quelle patch che corrompono altre patch, ciò potrebbe avvenire in seguito.

Parlando in termini generali, e a riguardo dei target, si possono ottenere dei suggerimenti sull'utilizzo di un particolare modulo utilizzando il comando:

# iptables -j TARGET_CHE_VUOI_UTILIZZARE --help

Questa linea visualizzerà il messaggio di aiuto classico di iptables e in più il messaggio di aiuto specifico per il target TARGET_CHE_VUOI_UTILIZZARE.

4.1 ftos patch

Questa patch sviluppata da Matthew G. Marsh <mgm@paktronix.com> aggiunge un nuovo target che consente di impostare il campo TOS dei pacchetti con un valore arbitrario.

Ad esempio, per impostare il campo TOS di tutti i pacchetti in uscita con il valore 15 si utilizzi:

# iptables -t mangle -A OUTPUT -j FTOS --set-ftos 15

# iptables -t mangle --list
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
FTOS       all  --  anywhere             anywhere           TOS set 0x0f 

Le opzioni supportate dal target FTOS sono:

--set-ftos value

-> Imposta il campo TOS dell'intestazione del pacchetto con il valore value. Questo valore può essere specificato in decimale (es.: 32) oppure in esadecimale (es.: 0x20)

4.2 IPV4OPTSSTRIP patch

Questa patch realizzata da Fabrice MARIE <fabrice@celestix.com> aggiunge un nuovo target che consente di togliere tutte le opzioni presenti in un pacchetto IPv4.

Ciò si ottiene in questo modo:

# iptables -t mangle -A PREROUTING -j IPV4OPTSSTRIP

# iptables -t mangle --list
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
IPV4OPTSSTRIP  all  --  anywhere             anywhere

Questo target non presenta opzioni.

4.3 NETLINK patch

Questa patch realizzata da Gianni Tedesco <gianni@ecsc.co.uk> aggiunge un nuovo target che consente di scartare i pacchetti indirizzandoli verso lo userspace attraverso un socket netlink.

Ad esempio per scartare tutti i ping e inviarli verso un socket netlink nello userland si utilizzi:

# iptables -A INPUT -p icmp --icmp-type echo-request -j NETLINK --nldrop

# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
NETLINK    icmp --  anywhere             anywhere           icmp echo-request nldrop 

Le opzioni supportate dal target NETLINK sono:

--nldrop

-> Scarta il pacchetto

--nlmark <number>

-> Contrassegna il pacchetto

--nlsize <bytes>

-> Dimensioni limite del pacchetto

Per avere ulteriori informazioni sui socket netlink si consulti: Netlink Sockets Tour.

4.4 NETMAP patch

Questa patch di Svenning Soerensen <svenning@post5.tele.dk> aggiunge un nuovo target che consente di creare un mapping statico 1:1 dell'indirizzo di rete mantenendo intatto l'indirizzo dell'host.

Ad esempio, se si desidera alterare la destinazione delle connessioni in entrata da 1.2.3.0/24 a 5.6.7.0/24 si utilizzi:

# iptables -t nat -A PREROUTING -d 1.2.3.0/24 -j NETMAP --to 5.6.7.0/24

# iptables -t nat --list
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
NETMAP     all  --  anywhere             1.2.3.0/24         5.6.7.0/24

Le opzioni supportate dal target NETMAP sono:

--to address[/mask]

-> Indirizzo di rete da utilizzare per il mapping.

4.5 SAME patch

Questa patch di Martin Josefsson <gandalf@wlug.westbo.se> aggiunge un nuovo target simile a SNAT con la differenza che al client viene assegnato lo stesso indirizzo per ogni connessione.

Ad esempio, se si desidera modificare l'indirizzo sorgente delle connessioni affinché diventino 1.2.3.4-1.2.3.7 si utilizzi:

# iptables -t nat -A POSTROUTING -j SAME --to 1.2.3.4-1.2.3.7

# iptables -t nat --list
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SAME       all  --  anywhere             anywhere           same:1.2.3.4-1.2.3.7

Le opzioni supportate dal target SAME sono:

--to <ipaddr>-<ipaddr>

-> Indirizzo da utilizzare per il mapping. Se ne possono specificare più di uno per intervalli multipli.

--nodst

-> Non utilizzare l'ip di destinazione nella selezione della sorgente

4.6 tcp-MSS patch

Questa patch di Marc Boucher <marc+nf@mbsi.ca> aggiunge un nuovo target che consente di esaminare ed alterare il valore MSS di un pacchetto TCP SYN per controllare la dimensione massima della connessione.

Come spiegato da Marc, QUESTO E' UN HACK, utilizzato per sormontare ISP o server che bloccano i pacchetti "ICMP Fragmentation Needed".

Utilizzo tipico è il seguente:

# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

# iptables --list
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
TCPMSS     tcp  --  anywhere             anywhere           tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU 

Opzioni supportate dal target tcp-MSS sono (si utilizzi o una o l'altra):

--set-mss value

imposta esplicitamente l'opzione MSS con il valore indicato

--clamp-mss-to-pmtu

assicura automaticamente il valore MSS con (path_MTU - 40)

4.7 TTL patch

Questa patch di Harald Welte <laforge@gnumonks.org> aggiunge un nuovo target che consente all'utente di impostare il valore TTL di un pacchetto IP oppure di incrementarlo/decrementarlo di un certo valore.

Ad esempio per impostare il campo TTL di tutte le connessioni in uscita con il valore 126 si utilizzi:

# iptables -t mangle -A OUTPUT -j TTL --ttl-set 126

# iptables -t mangle --list
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
TTL        all  --  anywhere             anywhere           TTL set to 126 

Le opzioni supportate dal target TTL sono:

--ttl-set value

-> Imposta il campo TTL a <value>

--ttl-dec value

-> Decrementa il valore del campo TTL di <value>

--ttl-inc value

-> Incrementa il valore del campo TTL di <value>

4.8 ulog patch

Questa patch di Harald Welte <laforge@gnumonks.org> aggiunge un nuovo target che consente un meccanismo di registrazione dei pacchetti più avanzato rispetto al target LOG. `libipulog/' contiene una libreria per ricevere i messaggi ULOG.

Harald mantiene all'indirizzo pagina web la documentazione relativa a ULOG, quindi non è necessario che venga spiegata anche qui.

4.9 ROUTE patch

Questa patch realizzata da Cédric de Launois <delaunois@info.ucl.ac.be> aggiunge un nuovo target che consente di instradare direttamente un pacchetto verso una specifica interfaccia anche e specialmente se l'indirizzo IP del pacchetto è uno di quelli associati al router. Siccome il kernel consegna questi pacchetti localmente, essi non possono essere inviati verso altri computer utilizzando i meccanismi standard di instradamento. Qualche volta ciò può però essere utile e senza che sia necessario modificare i pacchetti.

Le opzioni supportate dal target ROUTE sono:

--iface name

Invia il pacchetto direttamente verso l'interfaccia a cui è associato il nome specificato.

--ifindex index

Invia il pacchetto direttamente verso l'interfaccia a cui è associato l'indice specificato.

Ad esempio, si assuma che si desideri installare un servizio, diciamo ssh, su uno dei computer della propria rete. Si assuma inoltre che questo servizio deve apparire esattamente come se fosse collocato sul router stesso, includendo anche il fatto che i pacchetti devono rimanere inalterati. In questo caso non è possibile utilizzare il meccanismo standard del port forwarding.

Una soluzione consiste semplicemente nel re-instradare, attraverso il target ROUTE e ad un tunnel ipip, i pacchetti destinati alla porta 22 verso il computer che ospita il servizio ssh e che possiede lo stesso IP del router.

E' tempo per un po' di arte ASCII:

              eth0  +------+ 192.168.0.1        192.168.0.2 +----+
    ----------------|router|--------------------------------|host|
    IP: 150.150.0.1 +------+                                +----+
                       | | tunl1              IP: 150.150.0.1 | |
                       | +------------------------------------+ |
                       +----------------------------------------+
                                      IPIP tunnel

Non è possibile re-instradare questi pacchetti utilizzando i meccanismi standard di instradamento, semplicemente perché in tal caso il kernel penserà che i pacchetti devono essere consegnati localmente (essi contengono l'indirizzo IP del router stesso).

Il target ROUTE consente un soluzione al problema. Per quanto riguarda il nostro esempio dovremo utilizzare le seguenti regole:

# iptables -A PREROUTING -t mangle -i eth0 -p tcp --dport 22 -j ROUTE --iface tunl1
# iptables -A PREROUTING -t nangle -i tunl1 --j ROUTE --iface eth0

# iptables -L PREROUTING -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
ROUTE      tcp  --  anywhere             anywhere           tcp dpt:ssh ROUTE iface tunl1
ROUTE      all  --  anywhere             anywhere           ROUTE iface eth0

La prima regola viene utilizzate per re-instradare i pacchetti provenienti da internet, la seconda per re-instradare tutti i pacchetti provenienti dall'host. Il target ROUTE può essere utilizzato solo con la tabella mangle nella catena PREROUTING.


Avanti Indietro Indice