L’idea di poter creare un canale virtuale cifrato tra due computer remoti attraverso internet  permette di scambiare dati in modo sicuro e apre le porte a numerose applicazioni.

Immaginiamo di dover accedere alla nostra rete privata di casa senza l’uso di VPN da una postazione esterna alla LAN.

Chiameremo server il pc di casa che accetta la connessione dall’esterno sulla porta 22 e client il pc remoto dal quale vogliamo connetterci. Per creare il nostro tunnell SSH non dobbiamo far altro che lanciare il seguente comando dal client:

ssh -N -D 9999 user@server.mydomain.com

Verrà creato un socket tra client e server, l’opzione -N impedisce che vengano eseguiti comandi remoti mentre l’opzione -D 9999 specifica che vogliamo creare un socket sulla porta 9999 del client. A questo punto abbiamo un canale collegato direttamente al nostro server accessibile dal nostro browser. Per poter navigare come se fossimo sul server è necessario configurare firefox in modo che utilizzi il socket. Abbiamo due opzioni, una consiste nel modificare le preferenze direttamente nel browser, la seconda consiste nell’installare l’estensione Foxy Proxy. Quest’ultimo è comodo per facilitare il passaggio tra navigazione diretta e navigazione tramite socket. Nel primo caso andiamo nelle preferenze di Firefox, selezioniamo la tab Avanzate, poi la tab Rete e clicchiamo su Impostazioni di rete, selezioniamo quindi la voce “Configurazione manuale del proxy“. Scriviamo localhost nella casella Proxy HTTP e 9999 nella casella Porta.

Read the rest of this entry

, , ,

Un’alternativa alla classica autenticazione tramite password in ssh è l’utilizzo della chiave pubblica.

Ecco una breve guida che può essere utile per configurare l’accesso a un server remoto senza inserire la password.

key_diagram

Questa metodo è utlite in alcuni casi:

  • Sicurezza: previene il rischio di attacchi brute force (solo se è disabilitata l’autenticazione con password)
  • Comodità: è utile quando si utilizzano script automatici che richiedono l’accesso ad un server remoto (per esempio script di backup)

Per semplicità in questa guida mostrerò l’autenticazione di un utente da una macchina client come utente in una macchina server.
Attenzione: evitare assolutamente l’autenticazione a chiave pubblica tra due sistemi root – root.

Generazione delle chiavi RSA

Innanzi tutto assicurarsi di avere la directory .ssh nella propria home. Se non è presente la creiamo e settiamo i permessi:

client$ mkdir ~/.ssh
client$ chmod 700 ~/.ssh

Ora è necessario generare la coppia chiave privata / chiave pubblica RSA sul client:

client$ ssh-keygen -f ~/.ssh/id_rsa -t rsa
Enter passphrase (empty for no passphrase): …
Enter same passphrase again: …

Viene richiesto l’inserimento di una passphrase. Essa dovrà essere non vuota ed è consigliabile inserirne una composta da almeno 16 caratteri. Non scegliere una frase semplice e facilmente rintracciabile. È abitudine creare passphrase estratte da libri, poemi, testi di canzoni, le cui parole sono spesso intervallate da caratteri non alfabetici.

Le chiavi RSA generate si trovano ora in ~/.ssh/id_rsa per la chiave privata e ~/.ssh/id_rsa.pub per la chiave pubblica.

È buona norma proteggere tali file settando adeguati permessi:

client$ chmod go-w ~/
client$ chmod 700 ~/.ssh
client$ chmod go-rwx ~/.ssh/*

Distribuzione della chiave pubblica

La chiave pubblica precedentemente generata ~/.ssh/id_rsa.pub nel client deve essere copiata sul server nel file ~/.ssh/authorized_keys. Iniziamo a copiare la chiave pubblica nella home dell’utente del server, che si trova all’indirizzo server.example.org:

client$ scp ~/.ssh/id_rsa.pub server.example.org:

Nota: fate attenzione ai due punti “:”.

A questo punto effettuaiamo il login al server e importaiamo la chiave del client:

server$ mkdir ~/.ssh
server$ chmod 700 ~/.ssh
server$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
server$ chmod 600 ~/.ssh/authorized_keys
server$ rm ~/id_rsa.pub

Nel caso in cui si vogliano importare più chiavi pubbliche è necessario effettuare un append della chiave pubblica al file ~/.ssh/authorized_keys. Ogni chiave pubblica deve stare su una riga.

Ora possiamo effettuare la nostra connessione dal client al server senza l’inserimento della password:

client$ ssh server.example.org
Enter passphrase for key ‘~/.ssh/id_rsa’:

Ci verrà richiesta la passphrase, precedentemente scelta, per verificare l’autenticazione.

Inconveniente

Ogni volta che vogliamo effettuare un accesso al server remoto ci verrà richiesto l’inserimento della passphrase. È evidente che non è ciò che volevamo ottenere.

Un’idea comoda, ma meno sicura, consiste nell’impostare la chiave RSA senza passphrase.

Un compromesso invece consiste nell’utilizzo del comando ssh-agent, ma questo è un altro capitolo. Rimando alla guida di manuale:

$ man 1 ssh-agent

ssh-agent is a program to hold private keys used for public key authenti‐
cation (RSA, DSA). The idea is that ssh-agent is started in the begin‐
ning of an X-session or a login session, and all other windows or pro‐
grams are started as clients to the ssh-agent program. Through use of
environment variables the agent can be located and automatically used for
authentication when logging in to other machines using ssh(1).

Fonti:
http://sial.org/howto/openssh/publickey-auth/

, ,