3. Installazione del Software

3.1. Terminologia

Poiché l'installazione di VPN assomiglia molto a una transazione client-server, mi servirò di questa terminologia per dare un nome al computer alla fine di ogni passaggio:

3.2. Requisiti

3.3. Progettazione

Per impostare un collegamento PPP-SSH occorre specificare i seguenti parametri:

Hostname del server

Qual'è lo hostname o l'indirizzo IP del server VPN?

Utente del server VPN

Sul vostro server, con quale nome utente il software per la VPN funzionerà? Questo HOWTO comprende istruzioni riguardanti la creazione di un utente di nome "vpn" specificamente per questo scopo. Il software non deve essere eseguito da root! Per esigenze di sicurezza e di registrazione degli accessi, si dovrebbe usare un account riservato.

Indirizzo IP dell'interfaccia del server

La VPN PPP-SSH necessita di interfacce di rete dedicate sia sul client che sul server. L'interfaccia sarà pppN, dove N è il numero della prima interfaccia ppp inutilizzata (per esempio sarà ppp1 se si sta già utilizzando ppp0 per una chiamata con il modem).

Sarà necessario specificare l'indirizzo IP per l'interfaccia sul server. Questo indirizzo sarà visibile solo da client e server (e dalle macchine sulle subnet a cui il client o il server potrebbero inoltrare i pacchetti de-mascherati).

Se non è noto l'indirizzo IP da specificare, si legga il capitolo 2.2 in Linux Network Administrators Guide e si guardi in particolare alla tabella 2-1. Per esempio, 192.168.0.1 è una buona scelta.

Indirizzo IP dell'interfaccia del client.

È necessario impostare l'indirizzo IP dell'interfaccia sul client. Deve ovviamente apartenere alla stessa rete dell'indirizzo del server. Non deve essere in conflitto con altre reti dal lato del client e non può essere lo stesso indirizzo IP dell'interfaccia di rete del server. Se è stato scelto 192.168.0.1 per la precedente risposta, probabilmente qui si dovrebbe usare 192.168.0.2.

La mia configurazione è:

SERVER_HOSTNAME = eldivino.domain.com
SERVER_USERNAME = vpn
SERVER_IFIPADDR = 192.168.3.1
CLIENT_IFIPADDR = 192.168.3.2

3.4. Configurare PPP

Il codice per PPP può essere compilato nel kernel stesso o può essere presente in moduli caricabili nel kernel. Se è stato compilato nel kernel, si può saltare al passo successivo: non occorre altro. Invece, se si sta caricando PPP sotto forma di moduli, bisogna assicurarsi che vengano caricati in modo appropriato.

Si può controllare se ppp è incluso nella lista di tutti i moduli correntemente caricati eseguendo lsmod. Si ricordi di controllare che il modulo PPP sia caricato sia sul client che sul server.

server$ /sbin/lsmod
Module                  Size  Used by
ppp                    20780   0 (unused)
slhc                    4376   0 [ppp]
3c59x                  21636   1

client$ lsmod
Module                  Size  Used by
ppp_deflate            40308   0  (autoclean)
bsd_comp                4076   0  (autoclean)
ppp                    20844   2  [ppp_deflate bsd_comp]
slhc                    4376   1  [ppp]

Se si è sicuri di avere compilato ppp come modulo, ma non è caricato nel kernel, si provi a caricarlo con modprobe.

# modprobe ppp

Se modprobe non ritorna alcun errore, si controlli di nuovo lsmod: a questo punto ppp dovrebbe essere presente nella lista. Se è così, significa che il modulo ppp non viene caricato al momento dell'avvio. Ciò non costituisce un problema se si ha intenzione di eseguire il demone per il kernel, poiché i moduli PPP verranno caricati su richiesta. Se non si intende fare così, si renderà necessario caricare i moduli al momento dell'avvio inserendo una riga contenente la sola parola "ppp" nel file /etc/modules.

Si veda Linux Kernel HOWTO per maggiori informazioni al riguardo.

3.5. Permettere a SSH l'attraversamento del firewall

Il traffico di rete tra le due macchine (risultante dal tunnel, naturalmente) sarà basato sul solo protocollo SSH.

SSH impiega solo flussi TCP, nessun pacchetto UDP o ICMP. Il server ssh (sshd) normalmente è in ascolto sulla porta 22. Il client (dato che useremo il flag -P) utilizzerà solo le porte non privilegiate dalla 1024 alla 65535. Questa descrizione dovrebbe fornire informazioni sufficienti per potere impostare un firewall.

Per esempio, ecco i comandi per ipchains necessari a permettere le connessioni ssh verso il server. Consentiremo di passare alle connessioni dirette alla porta 22 sulla macchina locale e provenienti da qualsiasi porta sulla macchina remota. SI sostituisca eth0 con l'interfaccia di rete su cui viaggerà il traffico ssh e $IPADDR con l'indirizzo IP di quella interfaccia.

ipchains -A input  -i eth0 -p tcp -d $IPADDR 22 -j ACCEPT
ipchains -A output -i eth0 -p tcp ! -y -s $IPADDR 22 -j ACCEPT

I comandi seguenti sono necessari per impostare il firewall sulla macchina client. Non sono permesse le connessioni ssh in ingresso, mentre viene consentito al protocollo di passare tra la porta 22 della macchina remota e le porte non privilegiate su questa macchina. Ancora una volta, si sostituisca a eth0 l'interfaccia che trasporterà il traffico ssh, e a $IPADDR l'indirizzo IP di tale interfaccia.

ipchains -A input  -i eth0 -p tcp ! -y --source-port 22 -d $IPADDR 1024:65535 -j ACCEPT
ipchains -A output -i eth0 -p tcp -s $IPADDR 1024:65535 --destination-port 22 -j ACCEPT