Pagina 1 di 1

Iptables, routing e catena di forward

Inviato: ven 10 mar 2006, 11:52
da ciaspola
Ciao a tutti,
sono approdata qui su consiglio di un conoscente .

E' da un po' che lavoro con Linux, in genere me la cavo, ma da ieri mi ritrovo con una problematica irrisolta:

Mi trovo, semplificando a dover affrontare questa situazione:

RETE_A FIREWALL LINUX RETE_B
192.168.0.0/24 ----> eth0 eth1 ---> 192.168.100.0/24

RETE_A e RETE_B hanno rispettivamente come gw gli ip delle eth0 e eth1 di
FIREALL LINUX (192.168.0.100 e 192.168.100.100)

Il FIREWALL_LINUX e' configurato con echo 1 > /proc/sys/net/ipv4/ip_forward.

Devo fare in modo che:
Rete B possa accedere a RETE_A su tutti i protocolli
RETE A possa accedere a RETE_B solo sulle porte 80, 443, 22 , 25 e
terminal service (che ovviamente non ricordo)

Non ho mai avuto a che fare con firewall che devono fare routing e non nat.
Penso si debba agire sulla chain di forward ... Pensavo a qualcosa del
genere:

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

iptables-A FORWARD -d 192.168.100.0/255.255.255.0 -i eth0 -o eth1 -p tcp
-m tcp --dport 80 -j ACCEPT

iptables -A FORWARD -d 192.168.100.0/255.255.255.0 -i eth0 -o eth1 -p tcp
-j DROP

Per ora ho messo la regola solo x la porta 80 per semplificarmi la vita.

Il problema e' che non funziona: quel che succede e' che RETE_A riesce ad
accedere ad un server web su RETE_B, ma RETE_B non ne vuole sapere di
raggiungere RETE_A .

Spero in un qualche suggermimento.

Grazie.

ciaspola

Inviato: ven 10 mar 2006, 12:37
da sid77
hai provato a routare le richieste di 192.168.100.0/24 verso 192.168.0.0/24 da eth1 a eth0?
non credo sia un problema di iptabes per la direzione B->A

Inviato: ven 10 mar 2006, 12:43
da ciaspola
sid77 ha scritto:hai provato a routare le richieste di 192.168.100.0/24 verso 192.168.0.0/24 da eth1 a eth0?
non credo sia un problema di iptabes per la direzione B->A


Correggetemi se sbaglio ma :

/proc/sys/net/ipv4/ip_forward e' a 1

se flusho tutto le due reti si vedono su tutti i protocolli .

Quindi non credo che sia un problema di routing ...
a meno che non ci sia qualcos'altro di particolare da fare come route che a me e' ignoto ....

Inviato: ven 10 mar 2006, 13:18
da Paoletta

Codice: Seleziona tutto

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT 
la butto lì: magari perchè quando questa regola viene valutata la decisione sull'instradamento non è ancora stata presa e quindi non è detto che il pacchetto proveniente da eth1 vada su eth0..prova a far così:

Codice: Seleziona tutto

iptables -A FORWARD -i eth1 -j ACCEPT 
tanto dalla rete B deve passare tutto, giusto?
P.S. se non funziona (come molto probabilmente succederà
:wink: ) prova a non eseguire lo script in un colpo solo, ma a scrivere manualmente ogni istruzione e a provare , di volta in volta, se la rete va o no; così capirai qual è l'istruzione "colpevole"

ciao!

Inviato: ven 10 mar 2006, 13:43
da ciaspola
Paoletta ha scritto:

Codice: Seleziona tutto

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT 
la butto lì: magari perchè quando questa regola viene valutata la decisione sull'instradamento non è ancora stata presa e quindi non è detto che il pacchetto proveniente da eth1 vada su eth0..prova a far così:

Codice: Seleziona tutto

iptables -A FORWARD -i eth1 -j ACCEPT 
tanto dalla rete B deve passare tutto, giusto?
P.S. se non funziona (come molto probabilmente succederà
:wink: ) prova a non eseguire lo script in un colpo solo, ma a scrivere manualmente ogni istruzione e a provare , di volta in volta, se la rete va o no; così capirai qual è l'istruzione "colpevole"

ciao!
Puo' essere in effetti ora provo a levare la doppia interfaccia ...

Si da B verso fuori deve passare tutto ....
e' solo il traffico in ingresso da filtrare ....

grazie :)

Inviato: ven 10 mar 2006, 15:21
da KiaZ
ho provato a semplificare ulteriormente e a usare solo -o e non -i

[root@kiazserver iptables]# iptables -A FORWARD -d 192.168.100.0/255.255.255.0 -o eth1 -p tcp -j DROP
[root@kiazserver iptables]# iptables -I FORWARD -d 192.168.100.0/255.255.255.0 -o eth1 -p tcp --dport 80 -j ACCEPT
[root@kiazserver iptables]#
[root@kiazserver iptables]#
[root@kiazserver iptables]# iptables -I FORWARD -p tcp -o eth0 -j ACCEPT

il risultato e' che :

ReteA (0.203) riesce ad andare in http su reteB (100.5)

Rete B continua a non volerne sapere di attraversare il firewall :(

Non so piu' dove sbattere la testa ...
Le regole sugli stati servono a qualcosa in questo caso ?

Se faccio tcpdump sul firewall noto che i pacchetti arrivano alla destinazione, tornano indietro ma poi si bloccano sull'interfaccia eth1 .

e' come se un passaggio verso la eth1 venga comunque contemplato nel DROP :( :(


Scusate il doppio nick ... e' che credevo di aver dimenticato la pass di sto forum e chiudendo e riaprendo il browser mi son loggata con la vecchia registrazione !!!

ciaspola aka KiaZ

Inviato: ven 10 mar 2006, 15:43
da Paoletta
probabilmente i pacchetti che si bloccano sono pacchetti tcp ma non della porta 80 e matchano con questa regola:

Codice: Seleziona tutto

iptables -A FORWARD -d 192.168.100.0/255.255.255.0 -i eth0 -o eth1 -p tcp
-j DROP
ripeto, prova ad inserire a mano una regola per volta dopo aver resettato il fw e testa la rete ad ogni inserimento... troverai la regola colpevole...

Inviato: ven 10 mar 2006, 15:50
da KiaZ
Paoletta ha scritto:probabilmente i pacchetti che si bloccano sono pacchetti tcp ma non della porta 80 e matchano con questa regola:

Codice: Seleziona tutto

iptables -A FORWARD -d 192.168.100.0/255.255.255.0 -i eth0 -o eth1 -p tcp
-j DROP
ripeto, prova ad inserire a mano una regola per volta dopo aver resettato il fw e testa la rete ad ogni inserimento... troverai la regola colpevole...
Lo so che matchano li ..
ho solo 3 regole le metto a mano
quando metto la DROP tutto smette di funzionare ...

e' come se i pacchetti generati 100.0 una volta che devono tornare alla stessa rete vengono droppati in quanto devono passare dalla eth0 alla eth1 .....

e' come se la regola fosse bidirezionale e non tenesse conto di chi ha generato il traffico ma funzionasse ad un livello un po' + basso .

Ora io non conosco nel profondo il comportamento di iptables, ma questo smanettando sulla INPUT non mi e' mai sucesso ......

Non e' che bisogna specificare qualche altro flag per farlo entrare nel merito del traffico "originato da" e non della direzione dei pacchetti e basta ???

KiaZ aka ciaspola

Inviato: ven 10 mar 2006, 16:21
da ciaspola
Pare che ci siamo !!

iptables -A FORWARD -d 192.168.100.0/255.255.255.0 -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A FORWARD -d 192.168.100.0/255.255.255.0 -o eth1 -p tcp -j DROP

Ci volevano le regole sulle flag e sugli stati ... prese da quelle che uso nella chain di input ..
Ora ho aperto solo la 80 e nmap dice :

Warning: OS detection will be MUCH less reliable because we did not find at least 1 open and 1 closed TCP port
Interesting ports on 192.168.100.5:
(The 1662 ports scanned but not shown below are in state: filtered)
PORT STATE SERVICE
80/tcp open http
Device type: general purpose
Running: Linux 2.4.X|2.5.X

Un grazie per avermi messo sulla buona strada !

ciaspola aka KiaZ