Linux

SSH Tunnel su Android

Rieccoci.
Abbiamo settato il nostro server ssh per connetterci in sicurezza tramite il nostro laptop. Ma cosa succede se abbiamo un cellulare o un tablet a disposizione per navigare? Senza metterci a ripetere tutti i rischi di sicurezza relativi ad una connessione hot-spot pubblica, purtroppo gli stessi si ripresentano anche se navighiamo con i nostri due nuovi gadget tecnologici. L’inoltro del desktop è però in questi casi impossibile, allora come fare?
Abbiamo due strade: la prima, è quella di creare una vpn, instradando il traffico nel tunnel criptato che viene a crearsi, la seconda, a mio avviso più semplice e rapida, consiste nello sfruttare la connessione ssh esistente inoltrandovi tutto il traffico in arrivo ed in partenza dallo smartphone.
Ok, come?
Fortunatamente per android esiste l’applicazione SSH Tunnel, reperibile su google play a questo indirizzo oppure sullo store del telefono.
Prima di continuare però, devo avvisarvi che l’applicazione funziona solo su telefoni di cui si dispone dei permessi di root, altrimenti si collega solamente al server ssh remoto ma rimane inattiva. Per il root del vostro cellulare cercate le guide eventalmente presenti in rete riferite al vostro modello, tenendo bene a mente però che non mi assumo nessuna responsabilità nel caso in cui durante il processo di rooting doveste rendere inutilizzabile il vostro terminale.
Una volta quindi ottenuti i permessi di root ed installato l’applicazione, andiamo a vedere come configurarla.

Nel campo host inserite l’indirizzo ip pubblico del vostro server oppure l’hostname nel caso in cui abbiate attivato un servizio di dinamic-dns (consigliato) quali no-ip o similari. Per le prove da casa, basta andare sul browser e digitare http://www.iplocation.net per trovare l’ip pubblico della connessione. Confermate la porta standard oppure mettete quella personalizzata ed inserite nome utente e password della connessione ssh. Se avete scelto il login tramite chiavi pubbliche, dovete importare la chiave pubblica e privata di un vostro client (il portatile ad esempio) (si trovano in home/.ssh e sono i file id.rsa*) cliccando sul menù impostazioni e selezionare la voce “key file manager”.
Una volta fatto questo vi consiglio di attivare le voci “use socks proxy”, abilitando così il redirect dinamico di tutte le porte, “auto reconnect” e “global proxy” (tutto il traffico generato da tutte le applicazioni sul telefono viene instradato nel tunnel ssh cifrato), oppure selezionando “individual proxy” si possono scegliere ad una ad una le app che verranno instradate e quelle che invece seguiranno la via non criptata. Vi consiglio di abilitare anche la voce “enable dns proxy” che cripta anche le richieste al dns. Praticamente, uno sniffer se questa opzione non è abilitata può vedere su quale sito andiamo ma non il flusso dati generato, che rimane criptato. Ma fatto 30, facciamo 31, no?
Tutto qui!
Ora basta attivare la voce “Tunnel switch” ed il collegamento ssh avrà inizio. La prima volta può comparire un messaggio di avvertimento che l’host non è conosciuto (non è presente nel file known_hosts) ma non fa nulla. Se invece l’avvertimento continua a ripetersi, probabilmente state subendo un attacco del tipo “man in the middle” (una spiegazione molto sintetica qui, se volete maggiori approfondimenti la pagina inglese è decisamente migliore).
Per testare se tutto funziona, prima di attivare il collegamento, con la connessione dati 3G attiva sul cellulare andate sulla pagina www.iplocation.net ed annotatevi l’indirizzo ip assegnatovi dal vostro gestore di telefonia. Attivate quindi il tunnel ssh (dovreste avere se tutto è ok questa immagine tra le applicazioni in esecuzione) collegamento riuscito
Tornate sul browser e date il refresh della pagina. Vedrete per magilla l’indirizzo ip cambiare da quello del gestore di telefonia a quello di casa vostra. Ora, tutto il traffico è criptato.

Annunci
Standard
Linux

Installiamo un server multimedia/samba/torrent/Upnp/ssh/emule

Linux ovviamente!
Ovvero, come ridare nuova vita ad una macchina che giace inutilizzata da qualche parte perché ormai “vecchia” e farle fare cose davvero utili ed interessanti.
Questa guida sarà divisa in più parti, ognuna dedicata ad un server diverso (ssh già è presente a questo indirizzo) ed è basata su Debian.
Dedichiamo questa prima parte al reperimento del sistema operativo. Qui è possibile scaricare l’ultima versione di Debian per l’installazione via internet, ovvero un’immagine minima che ci consente di selezionare solo quello di cui realmente abbiamo bisogno. Qui c’è il manuale di installazione, dategli un’occhiata.
Avete quindi un vecchio pc con poca ram, una scheda video spompata ed una scheda di rete? Ottimo, è la macchina che fa al caso vostro.
Il mio server gira attualmente su una macchina headless (senza monitor) con 256Mb di ram, una cpu da 1ghz di clock ed un hd da 10Gb, oltre ad un hd da mezzo Tb usato come spazio di archiviazione.
Stiamo installando un ambiente server, quindi il desktop grafico non c’è. Fatevene una ragione. Con la shell potete fare di tutto, fidatevi. Anche navigare su internet, in via testuale ovvio, ma ne avete la possibilità. Ricordate i tempi dell’MS-Dos? Si faceva di tutto, senza ambiente grafico. Una volta inziati all’arte della shell, non tornerete più indietro, garantito!
Installiamo quindi il sistema operativo di base e poi andiamo a selezionare i server samba ed ssh. Il resto verrà installato da linea di comando successivamente.
Scegliamo il bootloader, la password di amministrazione (non ricordo se consente anche la creazione del primo utente o no, se si procedete alla sua creazione ed alla scelta di username e password) e la macchina è pronta. Noterete i tempi di avvio fulminei ed una scritta inquietante, su sfondo nero.
Debian GNU/Linux 3.X debian tty1
debian Login:
Siete arrivati! La macchina è viva! (Frankenstein docet)
Accedete con le credenziali da voi scelte (nome utente e password) e siete dentro. Il bello comincia proprio adesso.
Alla prossima puntata.

Standard
Linux

Installare e configurare un server SSH

openssh

Eccoci al dunque, si inizia a fare sul serio. OpenSSH. Cito da wikipedia: “OpenSSH (Open Secure Shell) è un insieme di programmi che rendono disponibili sessioni crittografate di comunicazione in una rete di computer usando il protocollo SSH. È stato creato come alternativa opensource al software proprietario Secure Shell.”

In poche parole, vi consente di collegarvi in remoto al vostro pc/server senza che i dati della vostra sessione vengano intercettati e decodificati, al contrario di quanto accade  con una sessione Telnet dove il flusso dati non è codificato ma trasmesso in chiaro.

Uno strumento di questo tipo è di una potenza eccezionale, pensate alla gestione di un server che si trova in un datacenter all’altro capo del globo, oppure più semplicemente alla possibilità di operare come se foste davanti al monitor del vostro pc di casa stando in spiaggia sotto l’ombrellone  (salvo rari casi, se avete fatto una cosa del genere avete dei seri problemi, sappiatelo 🙂 ) oppure al bar del centro commerciale sfruttando la connessione wifi gratuita per creare un ponte dati cifrato con l’adsl di casa per poi navigare tranquillamente. Per coloro che riterranno paranoie queste mie attenzioni, sappiate che le sessioni POP3 non sono crittografate, per cui tramite uno sniffer di pacchetti di rete (tipo wireshark) il vostro vicino di tavolino potrebbe spiare il vostro traffico dati e carpire informazioni sensibili, quali nomi utente e password di mail, dei vari social network, numeri di carte di credito e via dicendo. Creando invece un tunnel cifrato con SSH non correte nessun rischio.

Sono riuscito a convincervi e/o ad incuriosirvi? Ok, procediamo con l’installazione. I comandi di reperimento dei programmi fanno riferimento ad una distribuzione Debian based, per altre distribuzioni usate il gestore di pacchetti appropriato.

Installazione degli applicativi

Iniziamo installando sul server il pacchetto openssh-server ed il client ssh. Sul terminale da cui ci collegheremo, basterà installare solamente il client.

Digiteremo quindi sul server:

sudo apt-get install openssh-client
e
sudo apt-get install openssh-server

Per il lato client, basterà digitare

sudo apt-get install openssh-client

Configurazione

Il 99% del lavoro interessa il lato server, ed è a questo che ci rivolgeremo ora.
Iniziamo facendo una copia del file di configurazione originale del programma openssh-server, sshd è il nome del demone che viene lanciato all’avvio del sistema e che rimane in ascolto di eventuali richieste di connessione via client ssh, sulla base delle specifiche indicate nel file sshd_config, sito nella directory /etc/ssh/sshd_config

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original
sudo chmod a-w /etc/ssh/sshd_config.original

Con il primo comando diciamo di creare una copia del file sshd_config e di nominarla sshd_config.original, con il secondo gli applichiamo i permessi in sola lettura.

Iniziamo quindi a modificare il file di configurazione, dando da terminale

sudo nano  /etc/ssh/sshd_config

Analizzando il file, tutto ciò che è preceduto dal carattere”#” viene considerato come un commento e dunque non preso in considerazione dal sistema.
Iniziamo quindi, con:

Disabilitare il login come amministratore

Il perché di questa scelta è semplice: pensate ai danni che un eventuale cracker potrebbe fare al vostro sistema se riuscisse a loggarsi come amministratore. Meglio consentire il login solo a normali utenti e poi se necessario, guadagnare permanentemente l’account di root con sudo-s (anche se non ve ne è affatto la necessità, per le normali funzioni di amministrazione basta sudo xxxxxx)
Nel nostro file di configurazione quindi, troviamo la riga

PermitRootLogin yes

e sostiuiamola con

PermitRootLogin no

Cambiare la porta in ascolto

Di default, sshd rimane in ascolto sulla porta TCP 22. Per motivi di sicurezza, è meglio cambiare questa porta con una non standard
Cambiamo quindi la riga

#Port 22

Con la seguente, se vogliamo che la porta TCP 2323 sia in ascolto

Port 2323

Ovviamente, sul router a cui è connesso il server va chiusa la porta 22 (se aperta) ed abilitata la 2323 TCP.
Sul pc client, per evitare ogni volta di specificare il collegamento a questa porta non standard, modificare il file di configurazione presente in /etc/ssh/ssh_config

sudo nano  /etc/ssh/ssh_config

troviamo la riga

#Port 22

e decommentiamola, modificandola in

Port 2323

In questo modo, il client saprà automaticamente a quale porta non-standard dovrà collegarsi.

Disabilitare il login mediante l’inserimento di username e password

Troviamo la riga

#PasswordAuthentication yes

e sostituiamola con

PasswordAuthentication no
(attenzione, il # non è volutamente presente)

Controlliamo poi che il login tramite chiavi SSH sia abilitato (se non lo fosse, facciamolo)

PubkeyAuthentication yes
RSAAuthentication yes

A questo punto, salviamo e chiudiamo il file sshd_config.

Rimanendo sul server, prepariamoci quindi alla

Generazione delle chiavi SSH

Le chiavi SSH vengono generate con il comando

ssh-keygen -t dsa

Verrà proposto un prompt per inserire una password di sicurezza, in caso di smarrimento delle chiavi o furto della macchina da cui ci si logga. E’ meglio inserirla, ed anche “robusta”, in quanto il cracker con le vostre chiavi in mano è padrone della/e vostre macchine. La password, rappresenta l’ultima forma di difesa contro un accesso non autorizzato, per il tempo di arrivare a casa e cambiare le chiavi di sicurezza.

A questo punto, nella directory ~/.ssh/ (attenzione, il prefisso “.” davanti ad una directory indica che è nascosta, ma è possibile visualizzarla da terminale oppure sul front-end grafico nautilus premendo Ctrl+H) avremo due files: id_rsa.pub (chiave pubblica, può essere tranquillamente distribuita a tutti) e id_rsa (chiave privata, da tenere segreta)

Le chiavi vanno generate sia sulla macchina server, sia su tutti i client da cui ci vogliamo collegare

Inserimento della chiave pubblica del client sul server

A questo punto, se non è già presente, sulla macchina server creiamo ed editiamo il file authorized_keys

sudo gedit ~/.ssh/authorized_keys

ed aggiungiamo il contenuto del file id_rsa.pub della macchina client
Rendiamo quindi eseguibile solo dal proprietario il file in lettura e scrittura

chmod 600 ~/.ssh/authorized_keys

In alternativa, è possibile copiare direttamente la chiave pubblica del client sul server dando sul pc client il comando
ssh-copy-id -i /home/<username>/.ssh/id_rsa.pub utente@indirizzo_ip

Riavvio del demone sshd

Riavviamo ora il demone sshd per fargli recepire tutte le modifiche apportate:

sudo /etc/init.d/ssh restart

in versioni più recenti, il comando è stato sostituito dal seguente :

sudo service ssh restart

Stabilire il collegamento alla macchina remota

Sul pc client digitare

ssh utente@indirizzo_ip o dominio

dove utente è il nome dell’utente di destinazione sulla macchina remota
esempio,

ssh –X marco@89.92.158.1

abilita l’inoltro del server grafico X e lancia il tunnelling ssh

Tipica schermata di login SSH

Schermata del 2014-10-11 08:36:24

Tips and tricks

Per impostare il messaggio di benvenuto all’avvio della sessione ssh, editare il file /etc/motd con i permessi da root ed editare il file di configurazione /etc/ssh/sshd_config ed abilitare la sezione Banner indicando il nome del file (/etc/motd). Inserire dunque in quest’ultimo il messaggio di benvenuto che verrà visualizzato ad ogni login.
Per mountare via ssh una directory remota per averla disponibile in locale senza ricorrere ad scp, è necessario installare il pacchetto sshfs tramite apt-get
Una volta installato, per montare la directory remota digitare:

sshfs -o allow_other user@remotehost:/mountpoint_remoto/ /mountpoint_locale

esempio :

sshfs -o allow_other marco@10.0.0.120:/media/disco_USB/BT/ /media/samba

Per inviare o ricevere un file tramite ssh utilizzare scp

copia dal client al server:
scp nomefile nomeutenteserver@indirizzo:/percorso/
esempio:
scp nodes.dat emule@10.0.0.120:/home/emule/.aMule/

copia dal server al client
scp nomeutenteserver@indirizzo:/percorso/nomefile /percorsolocale/

Standard