Newsgroup: it.comp.os.linux.iniziare
Titolo: Tunnel ssh

Si ha accesso come semplice utente ad un servizio che offre
un'account ssh.
In pratica accedo ad un sistema remoto eseguendo il login e
ritrovandomi davanti una shell.
In alcune occasioni mi torna utile tunnelizzare la mia
navigazione internet per cui ho predisposto uno script che mi
crea il reindirizzamento delle richieste verso la porta $PORT
Il comando �:
ssh -C -fND ${LOCAL_HOST}:${LOCAL_PORT} ${USER}@${SERVER_HOST}
Da qui posso impostare nel browser l'indirizzo del sock server
locale e se il link ssh � in piedi, tutta la navigazione passa
attraverso il server ssh remoto.
Per l'autenticazione ho gi� provveduto a sostituire il login
digitato con una coppia di chiavi pubblica privata.
Ora, vorrei fare un passo avanti, non so se sia possibile...
Vorrei tunnelizzare l'intero traffico internet, non la singola
applicazione in cui si possa impostare un sock_proxy.
Ho letto qualcosa sul tunnel ppp-ssh, ma a quanto dice, servono
dei privilegi sul server che non ho...
In quel caso si metterebbe in piedi sul client un'interfaccia
PPP. Con a disposizione un ip locale e uno remoto e la
possibilit� di insradare con regole di routing il traffico locale
su quella interfaccia.
Esiste qualche altro modo per creare una interfaccia di rete
corrispondente al link ssh e sul quale reindirizzare il
traffico?
grazie in anticipo. :-)

 cui si possa impostare un sock_proxy.
Se potessi installare squid (o un qualsiasi altro proxy) sulla macchina 
remota, e fare il tunnelling della porta su cui gira squid con 
ssh -L ${REMOTE_SQUID_PORT}:localhost:${LOCAL_PORT} ${USER}@${SERVER_HOST}
e settando il tuo proxy http locale (system wide, non solo nel browser) 
come localhost:${LOCAL_PORT}
risolveresti alla grande...Tempo fa avevo fatto in questa maniera e 
funzionava. Se non hai abbastanza permessi però la vedo dura...

 ssh -L ${REMOTE_SQUID_PORT}:localhost:${LOCAL_PORT} ${USER}@
${SERVER_HOST}
ovviamente era 
ssh -L ${LOCAL_PORT}:localhost:${REMOTE_SQUID_PORT} ${USER}@${SERVER_HOST}

 come localhost:${LOCAL_PORT}
Ma in questo modo, otterrei unicamente il tunneling del traffico
http o no?
Invece volevo creare proprio una specie di vpn per� sfruttando
l'accesso che ho alla shell remota.
Ho gi� nominato la soluzione via sock proxy che per� non
coinvolge tutte le applicazioni.
Tu hai fatto notare che � possibile reindirizzare una certa porta
locale verso una porta definita del sistema remoto...
In effetti dopo qualche lettura ho visto che in teoria si
potrebbe configurare un file di configurazione per ssh ben
architettato in modo di imporre un "forwarding diffuso" al fine
di reindirizzare sul sistema remoto (attravareso il tunnel) tutti
i servizi che vogliamo (ommeglio tutti quelli che chi gestisce il
sistema remoto permette). Ecco una spiegazione:
http://tinyurl.com/c7lejq
Da riga di comando in effetti � in se piuttosto semplice e si pu�
sintetizzare come hai ricordato nell'opzione:
-L porta_locale:nodo_remoto:porta_remota
Io ho provato a scaricare le mail usando la connessione del
sistema remoto e il tunnel verso il mio sistema locale, ma oltre
essere un po' macchinoso, non ha funzionato penso a causa di
limitazioni sul sistema remoto, a meno che non abbia pasticciato
io:
____________________
LOCAL_HOST=127.0.0.1
L_POP3_PORT=2110
POP3_PORT=110
L_SMTP_PORT=2025
SMTP_PORT=25
ssh -fN ${USER}@${SERVER_HOST} \
-L ${L_POP3_PORT}/${LOCAL_HOST}/${POP3_PORT} \
-L ${L_SMTP_PORT}/${LOCAL_HOST}/${SMTP_PORT}
______________________________________________
Poi per� ho dovuto anche configurare il client di posta
modificando la porta che deve usare per accedere all'account che
ho provato.
Questo � un po' noiso perch� quando non si vuole usare il tunnel
bisogna rimettere le cose apposto...ma tanto per fare una prova
ci pu� stare.
Il problema per� � che non funge. Resto dell'idea che la
limitazione sia imposta dal servizio remoto che mi d� accesso via
ssh. Se per� vedeste un chiaro errore nel pezzo di script sopra o
nel discorso che ho fatto dite pure, magari ho ceffato qualcosa
io.
La soluzione definitiva sempre ovviamente vincolata dalle
limitazioni imposte dal'account ssh sarebbe la seguente:
http://a2.pluto.it/a2513.htm
Ovvero la creazione di una interfaccia tun con tanto di ip
locale, e remoto su cui instradare tutto il traffico.
Per� per farlo occorre che sul server sia configurato
opportunamente sshd.
Per esempio la direttiva:
PermitTunnel point-to-point
Che nel caso del mio account � commentata (ho sbirciato nel file
di configurazione remoto).
Mi metto alla ricerca di un servizio gratuito che permetta questa
possibilit� per fare qualche prova.
Saluti!  :-)

 
http://a2.pluto.it/a2513.htm
Devo approfondire...ciao ciao

 Devo approfondire...ciao ciao
Non � nulla di complesso, assomiglia molto ad openvpn, l'unica
cosa un po' pi� difficile � la parte server, ma se stiamo
parlando di un servizio remoto altrui non � compito nostro (nel
bene e pi� pesantemente nel male in quanto non ho trovato servizi
gratuiti del genere).
Inoltre avviato il tunnel e messa in piedi l'interfaccia tun0 per
esempio, occorre modificare opportunamente la tabella di routing.
Per il resto si tratta di un banale comando ssh.

 resto si tratta di un banale comando ssh.
OK ho visto, ma per il tuo problema (che se non ho capito male consiste 
nel raggirare in qualche modo i limiti assurdi imposti dagli operatori 
mobili) mi sembra una soluzione eccessiva (il classico cannone per 
sparare una mosca :) )

> ${L_SMTP_PORT}/${SMTP_SERVER}/${SMTP_PORT}
Dimenticavo una cosa importante: con questo meccanismo le tue credenziali 
viaggiano in chiaro tra server ssh e pop/smtp. Quindi il metodo ha senso 
solo se ti fidi di chi ti "regala" la shell. Altrimenti ci penserei due 
volte...

 sparare una mosca :) )
Perch� mai?
La connessione via apn wap � fortemente limitata se utilizzata da
PC (d'altra parte � pensata per un cellulare e per interfacciarsi
alle applicazioni tipiche di questi device).
Per esempio, la navigazione non � normale ma passi da un proxy
che taglia e ritaglia le pagine per adattarle a browser per
cellulari, con l'effetto cllaterale che da PC non le visualizzi
bene. Poi ho riscontrato problemi con alcune sessioni criptate e
persion con il login presso alcuni forum.
Le soluzioni leggere ci sono, tipo, impostare un proxy pubblico,
oppure tunnelizzare via ssh una porta ed impostare poi il proxy
socks nel browser.
Per� la limitazione riguarda anche altri applicativi, per esempio
i dns: se non sono impostati quelli di tim non si naviga.
Non funziona neanche un banale ping verso qualsiasi sito. Secondo
me hanno applicato politiche restrittive a protocolli come udp
per esempio.
Poi come dicevo, non funziona neanche il pop3 e smtp se non per
alcuni accounts.
Insomma ti assicuro che la cosa pi� pratica rapida ed indolore
� mettere in piedi una vpn con qualche nodo affacciato ad
internet. Almeno redirigi tutto verso l'interfaccia
corrispondente bypassando completamente oqquasi l'isp.
Riassumendo, se la limitazione riguardasse solo le mail non ci
sarebbe problema: potrei accedere da web o potrei tunnelizzare
via ssh come visto sopra. Ma essendo la limitazione diffusa su
molti servizi differenti, non abbiamo pi�a che fare con una mosca
ed � per questo che non mi pare fuori luogo il cannone..  ;-D
Ovviamente resta una soluzione di fortuna perch� la connessione
via wap presenta limiti soprattutto nel volume di traffico delle
offerte prepagate. Ed in effetti utilizzando le applicazioni da
cellulare si dice che il traffico sia molto pi� limitato...
In ogni caso se conosci o vieni a conoscenza di un servizio che
offra una vpn via ssh o anche una vpn pi� tradizionale via
openvpn o ppptp, benvenga.
Dal canto mio ho visto il servizio SDF che offre una shell unix
gratuita. Per� alcune funzinalit� sono esclusive degli utenti
paganti (il costo � poco, 34 dollari annui mi pare di ricordare).
Tra quelle funzionalit� c'� anche l'accesso via vpn, anche se non
ho capito di che tipo di vpn si tratti esattamente.
Va b�, saluti  e grazie per la dritta.  :-)


Ahh...ecco, b� non � bello in effetti.  :-\
e come si potrebbe fare per colmare questa lacuna?
Tipo accedere al server mail via connessione criptata?
Tipo so di alcuni account che lo permettono, tipo gmail se non
ricordo male, no?
I server della tim non so se predisponessero porte diverse per
accedere al servizio in modo sicuro...dovrei controllare ma mi
pare di no.


Un'altra domada: invece se utilizzassi una vpn via ssh sarebbe
diverso? oppure il tratto server ssh <---> mail-server sarebbe
sempre in chiaro agli occhi di chi gestisce la shell?



Sì, se usano pop3 e smtp senza tls/ssl il traffico tra proxy e server 
mail va tutto in chiaro, anche con una vpn. 
gmail, yahoo, poste italiane, alice (solo dentro la loro rete) e altri 
offrono protocolli crittografati, e in quel caso il traffico è 
indecifrabile al nodo intermedio.

 indecifrabile al nodo intermedio.
Grazie mille della conferma. � chiaro a questo punto che il
problema sta "lato server" ovvero se il mailserver dove sta
l'account non offre nessun accesso sicuro...c'� poco da fare.
Meglio sarebbe non utilizzare quell'account...almeno se si ha
necessit� d'appoggiarsi ad un nodo intermedio gestito da terzi.

 automatico dei messaggi...e la cosa diventa pi� o meno trasparente
Mi � venuta in mente una cosa..
ricapitolando col comando ssh seguente praticamente e detto
molto semplicisticamente:
ssh -fN us...@server.ssh -L 2110/remote.pop.server/110
si reindirizza la porta 2110 del localhost verso la porta 110
del server pop remoto sparando tutto nel tunnel ssh.
La soluzione del doppio account non mi garba troppo sinceramente
e pensavo ad un'alternativa.
Teniamo sempre presente che il client mail punti alla porta 2110
locale. E che per scaricare la posta via tunnel ssh facciamo
partire uno script con il comando ssh sopracitato.
MA in alcuni casi non voglio passare dal tunnel...perch� non ne
ho bisogno.
In quei casi mi piacerebbe lanciare un comando che semplicemente
reindirizzi la porta locale 2110 sulla 110 del server pop3
remoto, ma senza tirare in ballo ssh.
Quale comando devo utilizzare?
Mi s� a naso che occorra tirare in ballo iptables...ma vorrei se
possibile risolvere senza privilegi di root, per semplicit�.
Se puede?

 Se puede?
Ho riportato tutta la situazione per chiarezza.
Ho visto che forse il programma netcat potrebbe funzionare...ora
non posso provare, ma pazienza. Vi chiedo conferma:
1) nc -L 
pop.gmail.com:995
 -p 2995
2) Nel client di posta configuro l'account gmail in modo che
punti al localhost alla porta 2995
La situazione quindi sarebbe:
- client di posta configurato per collegarsi al localhost sulla
  porta/e decise (nell'aesempio sopra la 2995).
- poi due script. Uno che stabilisce un tunnel via ssh
  reindirizzando le porte opportunamente (vedi comando ssh in
  cima).
  E un secondo script che esegue lo stesso reindirizamento di
  porte, ma senza ssh, senza hosts "terzi" lavorando sul routing
  locale grazie a netcat (vedi comado sopra nc ... ).
- Quando mi serve passare per il tunnel, attivo lo script che usa
  ssh. Quando invece posso fare a meno del tunnel ssh, attivo il
  secondo script.
  In questo modo, il client di posta non lo tocco pi�.
Entrando nello specifico:
Quando usare il tunnel e quando no?
Dipende da come mi connetto ad internet: ho due tipi di
connessione dialup...una limitata e l'altra completa.
Ho due script di connessione per pppd e due set di regole
distinte in /etc/ppp/ip-up che si basano sul parametro ipparam
definito nello script corrispondente di pppd.
In soldoni se parte la connessione "completa" viene eseguita tutta
una serie di operazioni appena connesso ad internet. Se parte la
connesione limitata invece, viene eseguita un'altra serie di
operazioni.
L'idea �: quando parte la connessione completa eseguo
automaticamente lo script di forwarding che usa netcat.
Quando parte la connessione limitata invece non faccio partire
nessuno script di forwarding e se mi servono le mail lo eseguo a
mano...perch�? perch� coinvolge una connessione ssh che mi erode
banda...ne ho pochina, per cui lo uso solo se mi serve.
Cosan� ne dite?

 Cosa ne dite?
Chiedo scua per il quoting, un po' abbondante...
Visto l'argomento e nello specfico le domande sul tunneling
reindirizzamento ecc.. E visto che non ho ottenuto ancora
risposte, sono portato a pensare che forse questo non � il gruppo
pi� adatto ad andare cos� nello specifico della faccenda,
nonostante il terreno di gioco sia linux.
Avreste eventualmente un consiglio circa un gruppo o altro canale
pi� adatto a discuterne?
grazie in anticipo!  :-)

 più adatto a discuterne?
forse linux.software;
r
-- 
Abruzzo 2009: dopo 162 giorni consegnati 47 chalet per 200 persone.
Irpinia 1981: dopo 122 giorni consegnati 150 chalet per 450 persone.
Un Minuto Per Favore:
Home Page, The Pentangle, I Salon di Baudelaire: 
http://www.umpf.net

 che non ho ottenuto ancora risposte
Mi sembrava che avessi fatto tutto da solo...non ti resta che provare la 
soluzione dei due script, per quanto mi riguarda non c'è nulla da 
eccepire a livello tecnico.
Comunque su argomenti del genere troverai certamente più risposte su sys.
Ciao

 risposte su sys.
L'ho pensato anch'io, ma ho fatto due considerazioni:
1- Il tema ci pu� stare ampiamente, ma il tenore delle domande
   rivela il basso livello della mia esperienza in materia.
	Probabilmente su sys hanno ben altri intenti che non spiegare
	a me argomenti base del tunneling o simili.
2- Moltissimi che frequentano ICOLS, leggono anche ICOLI....

 il mio sistema un facile bersaglio di eventuali "hackeraggi"???
No, il tuo sistema non può essere compromesso, però permette ad eventuali 
spammer di mascherare connessioni verso il tuo server di posta e farle 
apparire come originate dal tuo IP. Certo uno dovrebbe sapere a priori 
che la porta 3995 dell'indirizzo IP vattelappesca punta alla 25 di 
smtp.gmail.com...ti ripeto però, solo nell'ipotesi che la porta 3995 sia 
raggiungibile dall'esterno. Per toglierti il dubbio puoi usare questo 
servizio:
http://www.canyouseeme.org/
Ciao

 
http://www.canyouseeme.org/
s� anche questa � una prova utilissima. Prover�. Poi faccio
sapere. Grazie intanto.

 sapere. Grazie intanto.
Ho fatto entrambe le prove lanciando netcat cos�:
netcat -v -L 
pop.gmail.com:995
 -p 3995
Dal server ssh remoto connettendomi con telnet verso
il mio IP pubblico alla porta 3995 riesco a raggiungere
il server mail di gmail.  Non buono quindi  :-\
Anche il servizio canyouseeme afferma che:
"Success: I can see your service on x.x.x.x on port (3995)
Your ISP is not blocking port 3995"
Meglio quindi non usare netcat cos�.
Invece aggiungendo l'opzione -s:
netcat -v -L 
pop.gmail.com:995
 -p 3995 -s 127.0.0.1
Dal server ssh....provo con telnet..ma nada non riesco a
raggiungere il server di gmail. E netcat in locale resta
in piedi, segno che non ha considerato la richiesta remota...
nel caso precedente s'era invece interrotto termiate la
sessione telnet.
Inoltre canyouseeme sta volta dice:
"Error: I could not see your service on x.x.x.x on port (3995)
Reason: Connection refused"
Segno che conferma la presenza di netcat come servizio solo
per le richieste provenienti dal localhost e non da hosts
remoti di eventuali hackers.
Somma, anche sta volta forse riesco a schivare iptables?  ;-)
Ok, le prove le ho fatte e mi sembrano rassicuranti..tuttavia
un vostro commentoa mo' di conferma sarebbe graditissimo!  :-D
Che dite il mio pinguino pu� dormire sonni tranquilli anche con
netcat acceso (ovviamente nel secono modo, con opzione -s).
Saluti e grazie ancora per le dritte!  :-)

 Somma, anche sta volta forse riesco a schivare iptables?  ;-)
Sembrerebbe proprio di sì :)
Però io approfitterei per studiarmelo...anche perché il forwarding 
ottenuto con netcat potevi farlo direttamente con iptables, senza dover 
avviare un altro servizio locale. Comunque il risultato è raggiunto, ed è 
quello che conta. Alla prossima!

 servizio locale.
Infatti, iptables era la prima cosa che m'era venuta in mente.
Cos� per curiosit� e se conosci iptables, quale sarebbe stato il
comando per reindirizzare la porta 3995 locale verso la porta 995
del server pop di google 
pop.gmail.com
 ??
Sempre che sia possibile condensare l'operaznione in un semplice
o un paio di comandi eh...

 o un paio di comandi eh...
]zac[
google -> iptables + redirect port
opzioni --sport e --dport di iptables.
Poi esistono varie interfacce grafiche per configurare iptables, che sono
una buona cosa per chi inizia da zero e non vuole pazientare il periodo di
apprendimento iniziale.
#!/bin/sh
#
# Interface delle rete esterna
WAN_IFACE="ppp0"
# WAN_IFACE="eth0"
# Any and all addresses from anywhere.
ANYWHERE="0/0"
# Azzera le regole di tutti i chains.
iptables -F
iptables -X
# Imposta le politiche di default dei built-in chains.
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
# Chains utente
iptables -N DROPLOG
iptables -N NEWCONN
iptables -N INVPACK
## Chains di drop e di log
# Non logga i pacchetti relativi a SQL server, http
iptables -A DROPLOG -p tcp -m multiport --dports 1433,1434,80 -j DROP
# Non logga i pacchetti relativi al multicast
iptables -A DROPLOG -d 
224.0.0.0/8
 -j DROP
# Non logga i pacchetti relativi alle porte 1026, 1027
iptables -A DROPLOG -p udp -m multiport --dports 1026,1027 -j DROP
#iptables -A DROPLOG -p icmp -j DROP
#iptables -A DROPLOG -d ! localhost -j DROP
iptables -A DROPLOG -j LOG -m limit --limit 10/minute --log-prefix "IPNF:
Dropping: "
iptables -A DROPLOG -j DROP
## Chains dei pacchetti in stato 'NEW'
# Reject delle conferme di inizio connessione di connessioni non iniziate
iptables -A NEWCONN -p tcp --tcp-flags SYN,ACK SYN,ACK -j
REJECT --reject-with tcp-reset
# Accetta le richieste di inizio connessione delle rete virtuale locale
iptables -A NEWCONN -i tap+ -j ACCEPT
iptables -A NEWCONN -i tun+ -j ACCEPT
# Drop delle richieste di inizio connessioni non locali
iptables -A NEWCONN -i ! lo -j DROPLOG
#iptables -A NEWCONN -s ! localhost -j DROPLOG
# Accetta le richieste di inizio connessione locali o della rete locale
iptables -A NEWCONN -i ! $WAN_IFACE -j ACCEPT
## Chains dei pacchetti in stato 'INVALID'
# Reject delle conferme di connessioni non iniziate
iptables -A INVPACK -i $WAN_IFACE -p tcp --tcp-flags SYN,ACK ACK -j
REJECT -m limit --limit 10/minute
iptables -A INVPACK -i $WAN_IFACE -p tcp -j DROPLOG
# SNAT per le connessione delle rete virtuale locale
#
# Controlla il traffico relativo a nuove connessioni
iptables -A FORWARD -m state --state NEW -j NEWCONN
# Accetta il traffico relativo a connessioni gi� iniziate
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Reject delle conferme di connessioni non iniziate
iptables -A FORWARD -m state --state INVALID -j INVPACK
iptables -A FORWARD -j LOG -m limit --limit 10/minute --log-prefix "IPNF:
Forward def. dropping: "
# Attiva il nat per le connessione delle rete virtuale locale
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# Imposta le regole di filtro
#
# Can still ping out.
#iptables -A INPUT -p icmp --icmp-type echo-reply -i $WAN_IFACE -j  ACCEPT
#iptables -A INPUT -p icmp --icmp-type destination-unreachable -i
$WAN_IFACE -j ACCEPT
#iptables -A INPUT -p icmp --icmp-type time-exceeded -i $WAN_IFACE -j ACCEPT
# Log degli ack con window a 0
#iptables -A INPUT -p tcp --tcp-flags SYN,ACK ACK -m u32 --u32 "4&0x1FFF=0
&& 0>>22&0x3C@12&0xFFFF=0x0" -j LOG -m limit --limit
10/minute --log-prefix "IPNF: Window 0: "
# Controlla il traffico relativo a nuove connessioni
iptables -A INPUT -m state --state NEW -j NEWCONN
# Accetta il traffico relativo a connessioni gi� iniziate
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Reject delle conferme di connessioni non iniziate
iptables -A INPUT -m state --state INVALID -j INVPACK
# Deve essere posta prima dei DROP/REJECT/LOG ma impedirebbe i test
con 'dummy'
# # Accetta il traffico localhost/loopback.
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j LOG -m limit --limit 10/minute --log-prefix "IPNF: Def.
dropping: "
echo "Impostate regole firewall il `date`."