Come configurare OpenVPN su Ubuntu 16.04
Continuando la serie di articoli VPN, ora stiamo installando OpenVPN sul server Ubuntu 16.04. OpenVPN è un noto software VPN dell’omonima società. È un po’ più difficile da configurare rispetto ad altri programmi VPN, quindi ci concentreremo sulla configurazione del server e sulla creazione dei file ovpn in questo articolo. Questa guida è progettata per essere eseguita come utente non root. Se hai effettuato l’accesso come root, iniziamo aggiungendo prima l’utente non root.
adduser newuser
Quindi gli concediamo i diritti sudo e accediamo come utente
usermod -aG sudo newuser
su newuser
Puoi saltare questi passaggi se hai già utenti non root e molto probabilmente lo farai.
Ora che hai effettuato l’accesso come nuovo utente o qualsiasi altro utente non root, installeremo openvpn
sudo apt-get install openvpn easy-rsa
Certificati server e client
Innanzitutto, dobbiamo creare dir per la CA e modificare il file vars
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
nano vars
Trova le righe che contengono export KEY_ e rendile tali
export KEY_COUNTRY="US"
export KEY_PROVINCE="New York State"
export KEY_CITY="New York City"
export KEY_ORG="Linoxide"
export KEY_EMAIL="newuser@example.com"
export KEY_OU="LinuxGeeks"
C’è anche la riga chiamata KEY_NAME nello stesso file, quindi inseriremo il server come nome lì
export KEY_NAME="server"
Dopo aver salvato il file vars, la prossima cosa che digitiamo è:
source vars
che dovrebbe darti la nota sul comando ./clean-all. Quindi scriviamo per assicurarci di eseguire l’ambiente pulito.
./clean-all
Ora passiamo alla parte della creazione del certificato:
./build-ca
Ti farà alcune domande, ma dato che ho modificato le variabili, i nuovi valori predefiniti dovrebbero essere ok, quindi puoi premere invio a tutti gli effetti.
./build-key-server server
Entra di nuovo, ma questa volta non in tutti i modi. Quando ti chiede di inserire la password, non inserirla e infine premi per creare il certificato. Il prossimo è Diffie Hellman:
./build-dh
Ci vorrà del tempo, quindi sii paziente. Successivamente abbiamo bisogno di ta.key per migliorare la sicurezza del server.
openvpn --genkey --secret keys/ta.key
E poi copiamo tutti i file rilevanti nella directory /etc/openvpn perché openvpn legge solo da lì.
cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
Abbiamo finito con il certificato del server, quindi ora creiamo un certificato per client100.
cd ~/openvpn-ca
source vars
./build-key client100
I valori predefiniti dalla fonte sono di nuovo ok, quindi basta premere invio e y alla fine.
Configurazione del server
Per il punto di partenza copiamo la configurazione di esempio con il seguente comando:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
Successivamente, dobbiamo modificare server.conf per far funzionare il nostro server. Puoi usare qualsiasi editor, ma per ora useremo il comando sed
sudo sed -i 's/;push "redirect-gateway def1 bypass-dhcp"/push "redirect-gateway def1 bypass-dhcp"/g' /etc/openvpn/server.conf
sudo sed -i 's/;push "dhcp-option DNS 208.67.222.222"/push "dhcp-option DNS 208.67.222.222"/g' /etc/openvpn/server.conf
sudo sed -i 's/;push "dhcp-option DNS 208.67.220.220"/push "dhcp-option DNS 208.67.220.220"/g' /etc/openvpn/server.conf
sudo sed -i 's/;user nobody/user nobody/g' /etc/openvpn/server.conf
sudo sed -i 's/;group nogroup/group nogroup/g' /etc/openvpn/server.conf
sudo sed -i 's/;log-append/log-append/g' /etc/openvpn/server.conf
Cose che ho fatto qui: ho impostato tutto il traffico su OpenVPN, ho impostato il gruppo e l’utente su nogroup e nessuno e ho impostato i log in modo che andassero su /etc/openvpn/openvpn.log. Successivamente, abbiamo bisogno di un’altra modifica su ta.key:
sudo nano /etc/openvpn/server.conf
E trova questa linea
tls-auth ta.key 0 # This file is secret
key-direction 0
Questo è tutto per server.conf, quindi dobbiamo abilitare l’inoltro dei pacchetti per il nostro server Ubuntu
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sudo sysctl -p
Anche le regole ufw devono essere modificate per consentire il mascheramento, quindi aggiungilo all’inizio, prima del filtro *
sezione
sudo nano /etc/ufw/before.rules
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
Nota che la parte eth0 che molto probabilmente dovrai modificare per riflettere il nome effettivo della tua interfaccia di rete rivolta a Internet, quindi l’ho evidenziata. Successivamente, abilitiamo il reindirizzamento in ufw come abbiamo fatto in sysctl:
sudo sed -i 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
Configuriamo il firewall
sudo ufw allow 1194/udp
sudo ufw disable
sudo ufw enable
sudo systemctl start openvpn@server
sudo systemctl status -l openvpn

Se tutto è andato bene, abilita l’avvio di openvpn all’avvio
sudo systemctl enable openvpn@server
Configurazione del cliente
Con la parte di configurazione del client, utilizziamo i certificati che abbiamo già creato, ad esempio client100. Abbiamo anche bisogno dei file di configurazione del client
mkdir -p ~/client-configs/files
chmod 700 ~/client-configs/files
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Il file che ho copiato è la configurazione di base, quindi deve essere modificato.
nano ~/client-configs/base.conf
E poi trova una riga che dice telecomando. Modificalo e punta all’indirizzo IP del tuo server dell’FQDN.
remote your.serv.ipor.fqdn 1194
Salva questo, come il resto della modifica che faremo con i comandi sed ed echo:
sudo sed -i 's/;user nobody/user nobody/g' ~/client-configs/base.conf
sudo sed -i 's/;group nogroup/group nogroup/g' ~/client-configs/base.conf
sudo sed -i 's/ca ca.crt/#ca ca.crt/g' ~/client-configs/base.conf
sudo sed -i 's/cert client.crt/#cert client.crt/g' ~/client-configs/base.conf
sudo sed -i 's/key client.key/#key client.key/g' ~/client-configs/base.conf
sudo echo key-direction 1 >> ~/client-configs/base.conf
Quindi cosa ho fatto qui? Per prima cosa impostiamo utente e gruppo su nessuno e nessun gruppo. Quindi ho commentato i percorsi dei certificati poiché integreremo i certificati in linea nel file .ovpn. Quindi ho aggiunto il parametro chiave di direzione 1.
Script per effettuare configurazioni client
Per incorporare la configurazione, le chiavi e i certificati del client in un singolo file .ovpn per un trasferimento più semplice ai client remoti, utilizzeremo un semplice script. facciamo
nano ~/client-configs/make_config.sh
E poi incolla . Dopo aver salvato questo, dobbiamo aggiungere il bit eseguibile, quindi esegui questo comando:
chmod +x ~/client-configs/make_config.sh
Quindi possiamo facilmente creare file di configurazione
cd ~/client-configs
./make_config.sh client100
ls ~/client-configs/files
La sintassi del comando è semplice, devi essere nella directory client-configs ed eseguire il comando con l’argomento che dice il nome del client che hai creato in precedenza. Se hai bisogno di più client, crea più certificati client con un nome diverso ed esegui di nuovo questo comando. Se tutto è andato bene, la directory client-configs/files dovrebbe contenere file ovpn. Devi trasferirli al tuo cliente o ai tuoi clienti e accedere. Lo farò con scp, dal mio laptop Fedora ho fatto l’ordine in questo modo
scp newuser@ip.of.my.srvr:/home/newuser/client-configs/files/client100.ovpn /home/miki/Documents/
Da lì puoi caricarlo sul tuo telefono Android con un cavo USB o tramite AirDroid, oppure su una VM Windows o un Mac. Per il gestore di rete Linux, dovresti smontare il file
Conclusione
Si tratta della configurazione del server, quindi dovremmo connetterci da diversi client. Per Android possiamo usare OpenVPN Connect, per Mac Tunnelblick, per Windows c’è OpenVPN dal sito ufficiale e per Linux c’è il gestore di rete. In alcuni dei seguenti articoli tratteremo tutti questi.