nattare una porta

7 risposte [Ultimo contenuto]
Ritratto di bertuz
bertuz
(Monster)
Offline
Monster
Iscritto: 13/12/2004
Messaggi: 213

Ciao!

Sto utilizzando un modem adsl con interfaccia ethernet: in pratica il modem ha l'interfaccia usb e un'altra ethernet che grazie al cavo cross consente di navigare senza driver.

Sto navigando ma.. questo modem nella sua interfaccia web non consente il port redirecting. Essendo il pc collegato via ethernet (quindi dietro gateway) la porta 80 ad esempio non può essere vista dall'esterno!

Smanettando ho notato che con ssh è possibile accedere al modem e - sorpresa delle sorprese - sotto sotto monta un kernel linux realizzato ad-hoc per il modem Smile. Con ancora più piacere ho notato che quindi posso smanettare da shell con l'iptables del modem in questione!

Detto questo, ho provato a documentarmi sul NAT con iptables (avevo esperienze di firewalling ma non di nat non avendone mai avuto bisogno).
Pensavo di cavarmela con due regoline semplici

<br /># iptables -t nat -A PREROUTING -p tcp --dport 80 -i ppp0 -j DNAT --to 192.168.1.2:80 <br /><br /># iptables -t nat -A PREROUTING -p udp --dport 80 -i ppp0 -j DNAT --to 192.168.1.2:80<br />

pensavo così di redirigere il traffico www dal 'ip del gateway al pc (e la risposta dal mio pc al client sarebbe arrivata senza problemi al client, visto che naviga dietro al gateway perfettamente e quindi riesce ad inviare pacchetti).

Purtroppo sembra che dimentichi qualcosa che ignoro.. probabilmente qualcosa di POSTROUTING? No riesco a trovare una logica e domando a voi.. Smile. Già che ci sono vi allego le info su iptables del modem:

<br /># iptables -L<br />Chain INPUT (policy ACCEPT)<br />target     prot opt source               destination<br />ACCEPT     all  --  anywhere             anywhere           state RELATED,ESTABLISHED<br />DROP       all  --  anywhere             anywhere<br /><br />Chain FORWARD (policy ACCEPT)<br />target     prot opt source               destination<br />TCPMSS     tcp  --  anywhere             anywhere           tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU<br />ACCEPT     all  --  anywhere             anywhere           state RELATED,ESTABLISHED<br />DROP       all  --  anywhere             anywhere<br /><br />Chain OUTPUT (policy ACCEPT)<br />target     prot opt source               destination<br />DROP       icmp --  anywhere             anywhere           icmp destination-unreachable<br />DROP       icmp --  anywhere             anywhere           state INVALID<br /><br /># iptables -t nat -L <br />Chain PREROUTING (policy ACCEPT)<br />target     prot opt source               destination<br />DNAT       tcp  --  anywhere             anywhere           tcp dpt:www to:192.168.1.2:80<br />DNAT       udp  --  anywhere             anywhere           udp dpt:www to:192.168.1.2:80 <br />Chain POSTROUTING (policy ACCEPT)<br />target     prot opt source               destination<br />MASQUERADE  all  --  anywhere             anywhere<br /><br />Chain OUTPUT (policy ACCEPT)<br />target     prot opt source               destination<br />#<br /><br /><br /># ifconfig<br />br0       Link encap:Ethernet  HWaddr 00:12:17:79:72:49<br />          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0<br />          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  ASYMMTU:1500<br />          RX packets:7009 errors:0 dropped:0 overruns:0 frame:0<br />          TX packets:8050 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:100<br />          RX bytes:632276 (617.4 kb)  TX bytes:9149668 (8.7 Mb) <br />br1       Link encap:Ethernet  HWaddr 00:00:00:00:00:00<br />          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  ASYMMTU:1500<br />          RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br />          collisions:0 txqueuelen:100<br />          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)<br /><br />eth0      Link encap:Ethernet  HWaddr 00:12:17:79:72:49<br />          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  ASYMMTU:1500<br />          RX packets:7026 errors:0 dropped:0 overruns:0 frame:0<br />          TX packets:8046 errors:0 dropped:0 overruns:0 carrier:0<br />          collisions:0 txqueuelen:100<br />          RX bytes:731709 (714.5 kb)  TX bytes:9149500 (8.7 Mb)<br /><br />lo        Link encap:Local Loopback<br />          inet addr:127.0.0.1  Mask:255.0.0.0<br />          UP LOOPBACK RUNNING  MTU:16436  Metric:1  ASYMMTU:0<br />          RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br />          collisions:0 txqueuelen:0<br />          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)<br /><br />ppp0      Link encap:Point-Point Protocol<br />          inet addr:82.56.122.167  P-t-P:192.168.100.1  Mask:255.255.255.255<br />          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1  ASYMMTU:1500<br />          RX packets:8038 errors:0 dropped:0 overruns:0 frame:0<br />          TX packets:6626 errors:0 dropped:0 overruns:0 carrier:0<br />          collisions:0 txqueuelen:100<br />          RX bytes:9025951 (8.6 Mb)  TX bytes:601726 (587.6 kb)<br /><br />usb0      Link encap:Ethernet  HWaddr 00:E0:A6:66:41:EB<br />          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  ASYMMTU:1500<br />          RX packets:0 errors:0 dropped:0 overruns:0 frame:0<br />          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0<br />          collisions:0 txqueuelen:100<br />          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)[Altro...]<br />

thanks in advance Wink

p.s.
ora come ora, non posso provare a vedere se le richieste arrivano sul serio dall'esterno.. domani proverò sul pc che dovrebbe ricevere le richieste dalla porta 80 con un

<br /> tcpdump -i eth2 tcp port 80<br />

e in caso posto il risultato.

Ritratto di kripsio
kripsio
(Collaboratore)
Offline
Collaboratore
Iscritto: 10/09/2004
Messaggi: 1511

ammappa quante interfacce! Smile

mi pare pero' che tu esca su internet con ppp0 che ha gia' un ippubblico (e' comune anzi normale. Un modem ethernet ti spara l'interfaccia su internet).

Se e' cosi' sei _gia'_ a posto senza ulteriori modifiche. Non devi nattare nulla, sei gia' pubblico.

1 - Verifica con quale interfaccia vai su internet
2 - Da remoto fai un nmap -sS o qualcosa del genere per vedere le porte che hai aperte. La 80 potrebbe essere filtrata dall'isp.
3 - _se_ il tuo isp e' infostrada le porte 25, 110 e 80 sono filtrate. C'e' una procedura sul loro sito per disabilitare tale filtro.

ciau

Ritratto di bertuz
bertuz
(Monster)
Offline
Monster
Iscritto: 13/12/2004
Messaggi: 213

No, ho alice adsl e l'80 non è stata mai filtrata. Perlomeno tutti raggiungevano senza problemi il mio server web apache Smile.
Il problema è proprio con questo modem/gateway. Essendo che il pc è connesso al modem tramite ethernet, mentre il modem è connesso a internet tramite ppp0 e al pc tramite eth0 è come avere un pc in mezzo che fa da firewall/gateway.

PC[eth2]------[eth0] MODEM [ppp0]-----+internet

Ad esempio amule mi si connette con lowid, e gli altri non possono raggiungere la mia porta 80. O meglio, raggiungono la porta 80 del mio modem! Infatti esce l'interfaccia di admin del modem [ovviamente provavo a redirigere altre porte del router sulla 80 del pc, ad esempio ippubblico:8080-->192.168.1.2:80].

Ritratto di kripsio
kripsio
(Collaboratore)
Offline
Collaboratore
Iscritto: 10/09/2004
Messaggi: 1511

/me capito poco.

btw mi sembra tu sia della ditta complicazioni faccenduole semplici (oltre ad avere forse una scheda di rete di troppo ed uno switch in meno! mi ricordi il tipo che per collegare tre macchine insieme aveva messo non so quante schede di rete per macchina e poi voleva farle vedere con oribili regole di iptables Big Grin)

Provo a capire cio' che vuoi fare:
Hai una macchina che si connette ad internet attraverso un modem ethernet che tira su un'interfaccia virtuale (ppp0). Sulla stessa macchina vuoi avere un indirizzo di classe C per la rete locale . La stessa macchina eventualmente potrebbe fare da router. Cio' preso?

Descrivi come tiri su ppp0.

Imho il problema non e' di iptables ma di logica di impostazione delle interfacce di rete.

Ciau Smile

Ritratto di bertuz
bertuz
(Monster)
Offline
Monster
Iscritto: 13/12/2004
Messaggi: 213

Quote:

Provo a capire cio' che vuoi fare:
Hai una macchina che si connette ad internet attraverso un modem ethernet che tira su un'interfaccia virtuale (ppp0).

NO! Il "modem" ha interfaccia ethernet e usb. E' praticamente come quei router con interfaccia adsl che vendono. Solo che invece di avere uno switch a 4 porte per la LAN, ha solo una porta (a cui colleghi il pc con cui vuoi navigare oppure lo colleghi ad uno switch in modo che faccia da gateway per una lan). L'ifconfig che ho postato non è di nessun computer ma del modem! Smile

Quote:

Sulla stessa macchina vuoi avere un indirizzo di classe C per la rete locale . La stessa macchina eventualmente potrebbe fare da router. Cio' preso?

Uhm in pratica sì, solo che la macchina in questione è appunto il modem (che contiene un kernel linux e una piccola shell, da cui ho ricavato l'ifconfig e le varie info che ho postato)

Quote:

Descrivi come tiri su ppp0.

si arrangia da solo il modem Smile.

Quote:

Imho il problema non e' di iptables ma di logica di impostazione delle interfacce di rete.

uhm, hai presente i router di cui ho parlato sopra? solitamente dalla loro interfaccia web hanno la sezione "NAT" su cui configuri le porte che vuoi redirigere, giusto? Smile. Ecco! Su questo modem "ibrido" manca l'interfaccia, ma ci si può smanettare tramite la shell che offre!

Ehm spero di essere stato abbastanza chiaro. Non so bene come spiegarlo :idea:

ciao Big Grin Big Grin

Ritratto di bertuz
bertuz
(Monster)
Offline
Monster
Iscritto: 13/12/2004
Messaggi: 213

per intenderci è tipo questo

http://www.linksys.com/servlet/Satellite?childpagename=US%2FLayout&packedargs=c%3DL_Product_C2%26cid%3D1115416831827&pagename=Linksys%2FCommon%2FVisitorWrapper

credo che ora gli abbiano dato un nome commerciale diverso, ma la minestra sia la stessa (il mio è denominato adsl2modem)

Ritratto di kripsio
kripsio
(Collaboratore)
Offline
Collaboratore
Iscritto: 10/09/2004
Messaggi: 1511

ooook... ora mi e' piu' chiaro..ecco perche' tutte quelle interfacce! Tongue

Lora se ho ben capito tu sulla tua macchina usi una eth2 (le altre eth0 e eth1 che fanno?) come interfaccia per uscire su internet.
Immagino quindi che come default route (gateway) della tua macchina avrai l'ip del modem (192.168.1.1) su interfaccia eth2.

Well.
il mio modem e' analogo al tuo puoi usarlo come router (come fai tu) ma non dispone neach'esso del nat delle porte e quindi ciccia ai servizi pubblici.
Oppure puoi impostare il dhcp interno. Tramite un buffo gioco che non ho ancora ben capito (un giorno mi documentero'), se da un'interfaccia (es eth0) della mia macchina do dhclient mi viene assegnato non un ip a caso dal modem della classe C ma il suo ip pubblico con l'ovvia conseguenza di avere eth0 come interfaccia pubblica. In questo modo poi gestisco io il resto dalla mia macchina (firewall e quel che mi pare) diventanto il modem trasparente.
Forse esiste la stessa possibilita' anche per il tuo e in mezo secondo fai tutto.

Se non sussiste tale possibilita' ammetto tutta la mia ignoranza di iptables.
netfilter.org - capitolo sul nat puo' essere utile, eventualmente domani (oggi ho finito il tempo sorry Laughing lo leggo un po'.

Sensazioni di pelle (quindi potrebbero essere sbagliate):
Trova la relazione tra eth0 e br0 del modem/router. br0 ha l'indirizzo ip della rete locale... why?
Questo perche', sempre a pelle caso mai sbaglio, nel comando che hai dato tu mi sembra che ridirigi il traffico su ppp0 (che ha indirizzo pubblico) ad un indirizzo locale di un'altra classe. Non so se si puo' fare in questo modo. Potrebbe (ribasdisco la mia ignoranza) ma ndove capisce (da quel comando) che il traffico deve essere ridiretto a br0 (eth0?) che e' l'interfaccia con la classe privata? Ripeto potrebbe farlo da solo, non zo...

Buona fortuna... ah.. ovviamente se trovi la soluzione postale. Inoltre ricordati di trovare anche il modo per salvare le impostazioni di iptables altrimenti al primo riavvio del modem, puf! Big Grin

Ritratto di bertuz
bertuz
(Monster)
Offline
Monster
Iscritto: 13/12/2004
Messaggi: 213

Quote:

kripsio ha scritto:
ooook... ora mi e' piu' chiaro..ecco perche' tutte quelle

ora siamo sulla stessa linea d'onda Big Grin. Oh yeah :pint:

Quote:

Lora se ho ben capito tu sulla tua macchina usi una eth2 (le altre eth0 e eth1 che fanno?) come interfaccia per uscire su internet.

esatto! La eth2 è l'ethernet, eth1 wirefire, eth0 wireless. Le ho momentaneamente disattivate per provare.

Quote:

Immagino quindi che come default route (gateway) della tua macchina avrai l'ip del modem (192.168.1.1) su interfaccia eth2.

esattamente! Big Grin

Quote:

se da un'interfaccia (es eth0) della mia macchina do dhclient mi viene assegnato non un ip a caso dal modem della classe C ma il suo ip pubblico con l'ovvia conseguenza di avere eth0 come interfaccia pubblica.

uhm, mi sembrava che se abilitassi il dhcp mi assegnasse un ip 192.168.1.0/24 (e in più non passasse i dns, che dovevo copiare da un resolv.backup ogni volta. Per questo assegnati tutto fisso e disabilitai da interfaccia web del modem il dhcp). Stasera provo meglio, magari ho pure io questo "errore" e non me la smeno più di tanto Wink

Quote:

eventualmente domani (oggi ho finito il tempo sorry Laughing lo leggo un po'.

ma no, tranquillo! Stasera do pure io una bella letta al sito Smile

Quote:

Sensazioni di pelle (quindi potrebbero essere sbagliate):
Trova la relazione tra eth0 e br0 del modem/router.
br0 ha l'indirizzo ip della rete locale... why?

già, mi era passato pure a me un mezzo pensiero ma non avevo voglia di controllare quei cavolo di bridge. Ehm Smile.

Quote:

ridirigi il traffico su ppp0 (che ha indirizzo pubblico) ad un indirizzo locale di un'altra classe. Non so se si puo' fare in questo modo.

Esatto! E' lì l'essenza del mio problema. Quella regola potrebbe funzionare o è una ciofeca? Smile

Quote:

Buona fortuna... ah.. ovviamente se trovi la soluzione postale. Inoltre ricordati di trovare anche il modo per salvare le impostazioni di iptables altrimenti al primo riavvio del modem, puf! Big Grin

uhm sì c'è un'opzione dalla shell preliminare per salvare la configurazione attuale sulla sua rom. Per fortuna. Certo che potevano evitare tutti sti bridge.. mah! Uno credo sia per la comunicazione ethernet/usb come una rete unica, l'altro... BOH?