È necessario configurare il server affinché risponda alle richieste del client per creare il tunnel.
Le richieste di VPN con SSH devono essere dirette ad un particolare utente sul server. Per sicurezza e tracciabilità, si raccomanda di riservare un utente per le sole risposte alle richieste di VPN. Con i passi seguenti si creerà un utente di sistema con il nome "vpn" per questo scopo.
Come prima cosa, si crei l'account utente. Esistono account con ID in due intervalli: quello di sistema (solitamente tra 100 e 999) e quello degli utenti comuni (1000 e oltre). "--system" comunica a adduser di aggiungere l'utente nell'intervallo di sistema e di assegnargli /bin/false come shell di login. "--group" sta a indicare di creare un gruppo con lo stesso nome dell'utente, e di aggiungervi l'utente stesso.
server# adduser --sytem --group vpn |
Dato che l'utente vpn necessita di effettuare il login via ssh, si cambi la shell di vpn da /bin/false a /bin/bash nel file /etc/passwd. È possibile modificare /etc/passwd utilizzando vi o qualsiasi altro editor di testo.
Si crei una password per l'utente vpn. Può e dovrebbe essere molto complessa, dato che verrà digitata solo alcune volte mentre si imposta la VPN. Dopo non sarà più necessario digitarla di nuovo.
server# passwd vpn Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully |
Ora si provi a collegarsi al server per assicurarsi di avere creato l'account correttamente.
client% ssh eldivino.domain.com -l vpn vpn@eldivino's password: Linux eldivino 2.2.19 #6 Mon Jun 4 10:32:19 PDT 2001 i686 unknown No mail. vpn@eldivino:~$ |
Potrebbe essere necessario un po' di tempo a ssh per collegarsi se non si è impostato correttamente il DNS inverso. Si può correggere tale problema in qualsiasi momento. Esso causerà soltanto un ritardo nell'avvio della VPN: non le impedirà di funzionare.
Se il programma ssh rimane bloccato, allora il protocollo ssh viene probabilmente scartato da un firewall tra le due macchine. Si veda nuovamente la sezione la Sezione 3.5.
Sarebbe scomodo dovere digitare una password ogni volta che si desidera avviare il collegamento VPN, quindi imposteremo l'autenticazione tramite RSA di SSH. Si salti questa sezione se non si considera impraticabile la soluzione di digitare una password ogni volta.
È necessario assicurarsi che l'account root sulla macchina client abbia una chiave pubblica nella propria home directory (~/root/.ssh/identity.pub). Se tale file non esiste è necessario crearlo. Come utente root si esegua ssh-keygen:
# ssh-keygen Generating public/private rsa1 key pair. Enter file in which to save the key (/root/.ssh/identity): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/identity. Your public key has been saved in /root/.ssh/identity.pub. The key fingerprint is: 15:61:57:7e:5c:26:91:09:5c:e6:10:b7:a1:74:bd:25 root@paradis |
Ora, si copi identity.pub al posto del file authorized_keys nell'account vpn sul server. Quasi sicuramente sarà da creare eseguendo i seguenti comandi sul server.
server# cd ~vpn server# mkdir .ssh server# chown root.vpn .ssh server# chmod 755 .ssh server# cd .ssh |
Si copi il file /root/.ssh/identity.pub sul client nella posizione ~vpn/.ssh/authorized_keys (è costituito da una sola riga). È possibile aggiungere altre linee ad authorized_keys, una per ogni client, se si desidera consentire più connessioni da client diversi.
server# chown root.vpn authorized_keys server# chmod 644 authorized_keys |
Diventando root sul client si provi a collegarsi con SSH al server. Si può utilizzare o meno l'opzione -P, a seconda di come è configurato il firewall sul client. Se la porta 22 è bloccata sul client (che non è una brutta idea se si ha un server ssh in esecuzione), l'opzione -P dice a ssh di usare una porta non privilegiata anche se sta eseguendo come utente privilegiato.
client# ssh -P eldivino.domain.com -l vpn Linux eldivino 2.2.19 #6 Mon Jun 4 11:03:22 PDT 2001 i686 unknown No mail. vpn@eldivino:~$ |
In questo modo ci si è appena autenticati con RSA. Bisogna tenere segreta la propria chiave privata (~root/.ssh/identity file sulla macchina client). Chiunque abbia accesso a questo file può collegarsi all'account vpn sul server.
pppd richiede di essere avviato come root. Comunque, sul server, stiamo avviando tutto come utente "vpn". Come può l'utente vpn eseguire pppd?
Ci sono molti modi di risolvere questo problema. Uno è utilizzare il bit suid, ed impostare i permessi per i gruppi. Però questo può condurre a confusione e difficoltà nell'amministrare agevolmente, creando falle non intenzionali nella sicurezza del sistema. Personalmente, ho trovato che l'utility sudo sia la soluzione migliore.
sudo dà agli utenti ordinari i privilegi del superutente, ma solo per una serie molto limitata di comandi. L'amministratore di sistema può decidere quali comandi sono consentiti e quanto log produrre. Nel nostro caso, vogliamo consentire all'utente "vpn" di avviare pppd con i privilegi di superutente, ma non vogliamo consentirgli di fare altro.
Occorre editare il file di configurazione di sudo, /etc/sudoers. Per impostare le restrizioni adeguate, in modo da prevenire inconvenienti e corse critiche, si usi il comando visudo che permette di editare /etc/sudoers. Chi non ha familiarità con vi, può consultare VIM HOWTO.
server# visudo |
Aggiungere queste due righe alla fine del file:
Cmnd_Alias VPN=/usr/sbin/pppd vpn ALL=NOPASSWD: VPN |
Ora, occorre verificare che sudo sia configurato correttamente. Per farlo basta provare a lanciare, come utente "vpn", pppd utilizzando sudo:
server# su - vpn server$ sudo /usr/sbin/pppd noauth ~9}#ÀZ}!}!} }9}"}k} }r} }'}%}zt2-·}'}"} |
Se si ottiene un mucchio di spazzatura PPP sullo schermo (come l'ultima linea riportata sopra), questo è un risultato positivo. Significa che l'utente vpn è autorizzato a lanciare pppd. Ora è possibile andare su un altro terminale e terminare il processo, oppure si può aspettare che pppd termini l'esecuzione. Dovrebbe smettere di provare a connettersi dopo circa 30 secondi.
Invece, se si ottiene "bash: /usr/sbin/pppd: Permission denied" o qualche altro tipo di errore, o chiede una password, allora sudo probabilmente non funziona. Occorrerà cercare di trovare cosa non va. Si verifichi che pppd sia in /usr/sbin e che il file sudoers sia stato compilato correttamente.