Come posso configurare OpenVPN in modo da poter utilizzare in modo sicuro Internet da un hotspot non protetto?


31

Obiettivo: voglio essere in grado di utilizzare Internet in modo sicuro tramite il mio PC di casa mentre il mio notebook è collegato a un hotspot / punto di accesso aperto.

Io non so che posso usare un tunnel SSH / proxy SOCKS, ma io non voglio smanettare con le applicazioni (che li rende lo usano, se ancora possibile). Immagino che ciò di cui ho bisogno sia una configurazione OpenVPN, quindi sto cercando una guida dettagliata su come:

  1. Installa e configura il server OpenVPN
  2. Configurare il client OpenVPN (NetworkManager)

Le versioni di Ubuntu su cui dovrebbe funzionare sono 10.10 e 11.04.


Questa è più una domanda serverfault che una Ubuntu penso.
Luis Alvarado,

1
@Cyrex: 1) è, 2) probabilmente no
Lekensteyn,

Risposte:


40

Ho la domanda esatta qualche mese fa, ma in più volevo avere una connessione IPv6 se possibile. Potresti essere interessato alle mie domande su Serverfault:

Avevo solo una scheda di rete ("interfaccia di rete") sul mio server per l'uso. Nella mia configurazione, NetworkManager non era sufficiente perché ho bisogno di eseguire uno script personalizzato per supportare IPv6. Per semplicità, userò NetworkManager qui e ometterò il supporto IPv6.

Innanzitutto, prendi una decisione sul metodo di autenticazione. Userò il metodo di certificazione più sicuro che funziona come SSL: durante l'handshake viene scelto un segreto comune che verrà utilizzato per la sessione. Gli altri metodi sono una chiave condivisa; un nome utente e una password.

server

1. Preparare

Innanzitutto, installa il server openvpn. Questo è facile come sudo apt-get install openvpn. La parte difficile è configurarlo. La configurazione è presente in /etc/openvpn.

2. Configurare l'autenticazione

Il server ha bisogno di certificati per identificare se stesso e i suoi client. Questi certificati sono recuperati da un'autorità di certificazione (autorità comune). La creazione dei certificati e delle relative chiavi private può essere eseguita su qualsiasi macchina, non deve essere eseguita sul server. Se sei veramente paranoico, dovresti farlo su una macchina che non è connessa a una rete e usare una memory stick per trasferire i certificati.

Creare una CA e certificati per il server

Questo passaggio deve essere eseguito una volta a meno che la chiave privata della CA non sia stata compromessa. In tal caso, è possibile creare certificati validi che verranno accettati dal server, determinando una violazione della sicurezza.

La documentazione ufficiale suggerisce di fare l'amministrazione in /etc/openvpn. Non sono un grande fan di eseguire tutto come root, quindi lo inserirò in una directory diversa.

  1. Crea la directory di amministrazione e copia i file in essa contenuti eseguendo:

    mkdir ~/openvpn-admin
    cd ~/openvpn-admin
    cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa
    cd easy-rsa
    
  2. Modifica le impostazioni predefinite in base varsalle esigenze, ad esempio impostando KEY_SIZE=2048perché sei paranoico.
  3. Carica le variabili e crea la directory delle chiavi eseguendo:

    . vars
    
  4. Se viene visualizzato un errore No ... openssl.cnf file could be found Further invocations will fail, eseguirlo ln -s openssl-1.0.0.cnf openssl.cnf, quindi di . varsnuovo.

  5. Se è la prima volta che usi questa CA, prepara l'ambiente delle chiavi. Do Non eseguire questo comando se si desidera mantenere il vostro CA. creato in precedenza In questo modo sarà necessario distribuire un nuovo ca.crt.

    ./clean-all
    
  6. Creare la CA eseguendo ./build-ca. È possibile inserire tutti i dettagli desiderati, ma si noti che queste informazioni saranno visibili nei file di registro quando i client si connettono al server. Questo creerà i file ca.keye ca.crtnella sottocartella keys. Mantieni il ca.keyfile segreto in ogni circostanza . In caso contrario, chiunque disporrà della chiave potrà connettersi al proprio server.
  7. Se si dispone di un certificato precedente perso o scaduto, è necessario revocare prima quello precedente ./revoke-full server. Altrimenti viene visualizzato un errore del database.
  8. Creare il certificato per il server eseguendo:

    ./build-key-server server
    

    Quando ti viene richiesta una password, lasciala vuota a meno che tu non sia disposto a inserire la password ogni volta che il server viene avviato (non consigliato). Conferma al momento della firma del certificato e del suo impegno. Due nuovi file appariranno nella directory keys: server.keye server.crt.

DH e uso preparano per tls-auth

Generare i parametri Diffie-Hellman usando:

./build-dh

Per suggerimenti sulla tempra , usare tls-auth. Per questo, genera la chiave segreta condivisa usando:

openvpn --genkey --secret ta.key

Il file risultante ( ta.key) deve essere distribuito anche ai client, ma non è necessario renderlo pubblico.

Creare certificati per i clienti

Per ogni client, è necessario ripetere questi passaggi:

  1. Immettere la directory in cui è stato creato il certificato CA e server:

    cd ~/openvpn-admin/easy-rsa
    
  2. Se hai saltato il passaggio di creazione della CA perché ne hai già uno, devi prima caricare le variabili:

    . vars
    
  3. Se stai creando nuovi certificati perché quelli vecchi vengono persi o scaduti , devi prima revocare il vecchio ./revoke-full you. Altrimenti viene visualizzato un errore del database.
  4. Creare il certificato client you.keye il relativo certificato corrispondente you.crt:

    ./build-key you
    

    La CommonNamedeve essere univoco. Lascia la password vuota se stai usando KDE poiché non è ancora supportato dal 10.10. Come per la generazione del certificato del server, confermare la firma del certificato e confermare le modifiche.

3. Configurare il servizio OpenVPN

Per impostazione predefinita, OpenVPN viene eseguito come root quando si accettano connessioni. Non è una buona idea se il servizio è raggiungibile dalla malvagia Internet.

  1. Crea un utente dedicato per OpenVPN, ad esempio openvpn:

    sudo useradd openvpn
    
  2. Copiare i file server.key, server.crt, ca.crte dh1024.pem(o dh2048.pemse hai cambiato dimensione della chiave) dalla directory chiavi in /etc/openvpn. Un'autorizzazione di 400 (sola lettura per il proprietario) va bene.

    sudo cp ~/openvpn-admin/easy-rsa/keys/{server.key,server.crt,ca.crt,dh*.pem} /etc/openvpn
    sudo chmod 400 /etc/openvpn/{server.key,server.crt,ca.crt}
    
  3. Copia anche il file ta.key:

    sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
    sudo chmod 400 /etc/openvpn/ta.key
    
  4. Crea il file /etc/openvpn/server.confe inserisci le righe successive:

    proto udp
    dev tap
    ca ca.crt
    cert server.crt
    key server.key
    dh dh1024.pem
    server 10.8.0.0 255.255.255.0
    push "redirect-gateway def1"
    ifconfig-pool-persist ipp.txt
    keepalive 10 120
    tls-auth ta.key 0
    # Compress data to save bandwidth
    comp-lzo
    user openvpn
    group openvpn
    persist-key
    persist-tun
    # Logs are useful for debugging
    log-append openvpn-log
    verb 3
    mute 10
    
  5. Impostare le autorizzazioni appropriate su di esso, non è necessario che sia segreto, ma preferisco non perdere i dettagli di configurazione, quindi:

    sudo chmod 640 /etc/openvpn/server.conf
    

4. Completamento del server

Se hai creato i certificati sul server, è una buona idea crittografarli o spostarli dal server. In ogni caso, non perdere il ca.keye server.key. Nel primo caso gli altri saranno in grado di connettersi al tuo server. In quest'ultimo caso è possibile un MITM .

Cliente

Oltre all'indirizzo IP del server, l'amministratore del server deve consegnare i seguenti file:

  • ca.crt: per la verifica dei certificati
  • server.crt: per verificare il server e comunicare con esso
  • ta.key: per rafforzare la sicurezza
  • you.crt: per identificarti con il server
  • you.key: è come la tua password, i permessi dei file dovrebbero essere 400 (sola lettura per il proprietario)

1. Installazione

Installa OpenVPN e il plug-in NetworkManager (adatto per KDE e Gnome):

sudo apt-get install openvpn network-manager-openvpn

network-manager-openvpn è nel repository dell'universo.

2. Configurazione

Nel pannello di controllo, utilizzare i seguenti dettagli:

  • Gateway: l'indirizzo IP del server
  • Tipo: "Certificati (TLS)" (Gnome) o "Certificato X.509" (KDE)
  • Certificato CA: percorso a ca.crt
  • Certificato utente: percorso a you.crt
  • Chiave privata: percorso a you.key

A livello avanzato :

  • Porta gateway: automatica (1194) (non è necessario modificarla)
  • Usa compressione dati LZO: abilitato
  • Usa connessione TCP: disabilitato
  • Usa dispositivo TAP: abilitato
  • Cifra: impostazione predefinita
  • Autenticazione HMAC: impostazione predefinita
  • Usa autenticazione TLS: abilitato
    Specificare il percorso del file chiave ta.keye impostare "Direzione chiave" su 1.
  • ( todo - check out ) il server invia il gateway predefinito in modo che tutto il traffico passi attraverso la connessione VPN. L'ultima volta che ho controllato, il plug-in network-manager-openvpn non lo ha fatto.

Se non riesci a far funzionare NetworkManager o non desideri utilizzarlo, inserisci i file ( ca.crt, ...) /etc/openvpne crea il /etc/openvpn/client.conffile:

client
dev tap
proto udp
# replace 1.2.3.4 by your server IP
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert you.crt
key you.key
ns-cert-type server
tls-auth ta.key 1
comp-lzo
user nobody
group nogroup
verb 3
mute 20

Se non si desidera abilitare questa VPN all'avvio, modificare /etc/default/openvpne rimuovere il commento dalla riga successiva rimuovendo #:

#AUTOSTART="none"

Per avviare questa connessione, eseguire:

sudo /etc/init.d/openvpn start client

clientdovrebbe essere rinominato se il tuo file di configurazione non è nominato client.conf. Esempio: se hai nominato il tuo file di configurazione safe.conf, devi eseguirlo sudo /etc/init.d/openvpn start safe.

Per interrompere OpenVPN, devi eseguire:

sudo /etc/init.d/openvpn stop

1
Qual è la configurazione del server per l'accesso basato su nome utente / password, in cui il mio client non ha alcuna conoscenza per configurare il client VPN tutto ciò che voglio che usi ip server, nome utente, password.

@YumYumYum Non hai idea di come usare username / password, dai un'occhiata alla pagina di manuale di openvpn ( man openvpn). Le versioni recenti di openvpn hanno la possibilità di incorporare certificati e file di chiavi, quindi forse è ancora più facile fornire all'utente quel singolo file di configurazione.
Lekensteyn,

Si noti che le versioni più recenti di Ubuntu vengono fornite con OpenSSL 1.0.1 e l'esecuzione del . varscomando sopra può generare un errore che "è possibile trovare il file openssl.cnf. Ulteriori invocazioni falliranno". È necessario sudo -s; cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/; ln -s openssl-1.0.0.cnf openssl.cnf, quindi eseguire . varse gli altri comandi.
Dan Dascalescu il

@DanDascalescu Lo script whichopensslindividua il openssl-1.0.0.cnffile correttamente per me (easy-rsa 2.3.2, OpenSSL 1.0.1e)
Lekensteyn

Risposta molto istruttiva e approfondita. Potresti rispondere a questa domanda ?
JB0x2D1,

8

In realtà non è necessario giocherellare con nessuna applicazione. Funziona "proprio come VPN".

  1. Prima installa il tsockspacchetto (calze temporanee):

    sudo apt-get install tsocks
    
  2. Quindi modifica /etc/tsocks.confe inserisci

    server = 127.0.0.1
    server_port = 3333
    
  3. Ora apri un terminale e digita (questo ti connette):

    ssh -ND 3333 ssh.url.to.your.home.machine
    
  4. Esegui (tramite un altro terminale o ALT-F2):

    tsocks firefox
    

Ora, Firefox trasmette tutte le comunicazioni al server SOCKS sul computer creato da SSH. Questo viene ulteriormente collegato al tuo computer di casa, dove va al web. Tutto ciò di cui hai bisogno sul tuo computer di casa è un server SSH. Dopo la prima volta, ripeti i passaggi 3 e 4.

Esso funziona magicamente! Purtroppo, al cromo non piacciono gli tsocks, ma ehi, Firefox funziona.


3
Bene, vedi la tua ultima frase - Non voglio prima controllare tutti i miei programmi se funzionano davvero bene insieme a tsocks, quando potrebbe essere solo un clic nell'applet NetworkManager con OpenVPN.
htorque,

OK. La mia risposta sarà probabilmente utile per le persone che desiderano una soluzione rapida per accedere ai siti Web.
MarkovCh1

1

La soluzione tunnel SSH è più semplice di quanto si pensi. Un programma come gSTM avvierà / arresterà i tunnel con una GUI. Quindi basta aprire Network Proxy e cambiarlo dalla connessione Internet diretta alla configurazione proxy manuale, premere "Applica a livello di sistema" e tutte le tue app dovrebbero inviare i loro dati nel tunnel - non c'è bisogno di giocherellare con ognuna individualmente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.