Se avete effettuato l’aggiornamento al firmware 0.7.1r1 della Fonera, avrete notato la repentina comparsa di un’interfaccia di port forwarding:

L’interfaccia di port forwarding, in seguito alla “pulizia” da me effettuata in vista della scrittura di codesto articolo
Ora, sebbene essa possa sicuramente andar bene per un utilizzo basilare, non mi è parsa proprio esente da errori di programmazione (potrebbe essere stata solo una mia impressione, o una particolare concentrazione di energia negativa dovuta a Murphy. Ecco quelli che mi sono risultati più evidenti:
- É impossibile reinidirizzare la porta 80 (tengo un server HTTP su una delle mie macchine, per rapido accesso ad alcuni file che uso spesso (niente dati sensibili
): non appena ci ho provato, mi è andata in tilt la connessione, e non ho potuto fare altro che effettuare il reset - che, tra l’altro, mi è riuscito solo dopo due ore di tentativi e bestemmie in aramaico. - Non si capisce bene dove vengano memorizzati questi dati: probabilmente nella NVRAM - non sono però ancora abbastanza esperto di dispositivi embedded per poterlo affermare con certezza
Fin qui le brutte notizie. Ora cominciamo a cantare.
Se siete riusciti ad abilitare SSH, vi ricorderete che abbiamo modificato il file /etc/firewall.user. Ebbene, con un po’ di scaltrezza e tanta manualità, potremo ricavare da questo stesso script un mini-firewall che faccia esattamente quello che vogliamo noi.
Gli utenti Winzozz, a questo punto, storceranno il naso. Linea di comando? E che è?, direte. Io vi rispondo Il passato, il presente, il futuro dell’informatica fatta come Dio, se avesse messo il naso anche lì, avrebbe comandato. Prima vi liberate dei preconcetti, prima rimuoverete l’infezione Windows dai vostri computer, meglio sarà per voi e per tutto il genere umano.
Gli amanti della Bourne Again Shell, invece, gioiranno, quasi fossimo a Pasqua
- l’implementazione della Almquist Shell utilizzata nel nostro firmware è abbastanza buona da permettere alcuni bashisms come l’operatore postfisso di incremento stile C.
Questo post non vuole sostituire in alcun modo la lettura della documentazione di iptables, in primis la pagina man. Voglio solo mostrare un paio di righe di codice.
## Porte di eMule
# 4662/tcp: Client TCP port - trasferimenti da client a client.
iptables -t nat -A prerouting_rule -i $WAN -p tcp –dport 4662 -j DNAT –to 192.168.10.124:4662
iptables -A forwarding_rule -i $WAN -p tcp –dport 4662 -d 192.168.10.124 -j ACCEPT
# 4665/udp: ricerche globali di server e sorgenti (sempre Client TCP port + 3)
# 4672/udp: protocollo Extended eMule, valutazione coda, ping sulla disponibilita’
for porta in 4665 4672
do
iptables -t nat -A prerouting_rule -i $WAN -p udp –dport $porta -j DNAT –to 192.168.10.124:4665
iptables -A forwarding_rule -i $WAN -p udp –dport $porta -d 192.168.10.124 -j ACCEPT
done
## Porte di BitTorrent
# Fino alla versione 3.2: 6881-6889/tcp
# Dalla versione 3.2 in poi: 6881-6999/tcp - noi ci atterremo a questa regola.
# (BitTorrent non usa il protocollo UDP)
porta=6880 # Non filtreremo questa porta in particolare, serve per il contatore.
while [ $((porta++)) -le 6998 ]
do
iptables -t nat -A prerouting_rule -i $WAN -p tcp –dport $porta -j DNAT –to 192.168.10.124:$porta
iptables -A forwarding_rule -i $WAN -p tcp –dport $porta -d 192.168.10.124 -j ACCEPT
done
Con queste poche righe sono in grado di usare sia Deluge (ottimo client BitTorrent - leggete il post di Felipe, è molto più informativo del sito del progetto stesso IMHO) che aMule sul mio portatile, che ha indirizzo (a proposito: ho installato Ubuntu Edgy Eft
), con mia somma soddisfazione.
La procedura da seguire è semplice:
- Collegatevi alla Fonera con
ssh root@192.168.10.1
- Aprite /etc/firewall.user con vi:
vi /etc/firewall.user
(ricordatevi di premere I per abilitare l’inserimento di nuovo testo)
- Incollate il blocco di codice che vi ho scritto prima, magari alla fine del file.
- Salvate il file e uscite premendo :wq, in sequenza.
- Attivate le nuove impostazioni del firewall eseguendo lo script:
/etc/firewall.user
Se avete fatto un lavoro pulito, tutto dovrebbe essere perfettamente funzionante.
Ovviamente, non dovete sentirvi limitati da quel che vi offro io. Il vantaggio fondamentale dell’uso estensivo della riga di comando è che potete realizzare tutti i vostri sogni più reconditi. Nel caso voleste aggiungere una nuova porta, vi basteranno due comandi:
ATTENZIONE: se volete, potete anche non usare le variabili d’ambiente PROTOCOLLO, PORTA_ORIGINALE e simili, e inserire direttamente il testo nelle due linee di comando: io le ho messe per rendere il tutto un po’ più esplicativo
PROTOCOLLO=tcp # PORTA_ORIGINALE e PORTA_REDIRETTA possono essere uguali, dipende dalla vostra configurazione. PORTA_ORIGINALE=nnnn PORTA_REDIRETTA=mmmm INDIRIZZO_CUI_REDIRIGERE_LA_PORTA=192.168.10.130 iptables -t nat -A prerouting_rule -i $WAN -p $PROTOCOLLO --dport $PORTA_ORIGINALE -j DNAT --to $INDIRIZZO_CUI_REDIRIGERE_L:$PORTA_REDIRETTA iptables -A forwarding_rule -i $WAN -p $PROTOCOLLO --dport $PORTA_REDIRETTA -d $INDIRIZZO_CUI_REDIRIGERE_LA_PORTA -j ACCEPT
Seguite la procedura che vi ho descritto per attivare la nuova regola, e sarete a cavallo.
Enjoy
P.S. Se volete impratichirvi un po’ di più nello scripting bash-style, provate a leggere questa guida. Non posso garantire che tutto quel che apprenderete funzionerà con ash, ma sarà, comunque, un buon investimento.










2 commenti
Ciao, per quanto riguarda il reindirizzamento della porta 80 hai provato anche su una porta diversa???
Te lo chiedo perchè ho un pc con tomcat e vorrei fosse visibile dalla rete.
Ho provato con il portforwarding sulla porta 8080 (e su altre) ma niente da fare..
Dovrò rassegnarmi.
@Lerio: No. Quel che non ho capito è se hai verificato che non funziona da un host esterno alla tua rete locale - perchè dall’interno, a causa del bridging, potrebbe sembrare che non funzioni (come succede per la porta 80).