Continuando la serie di articoli sulla VPN, ora installiamo OpenVPN su Ubuntu 16.04 Server. OpenVPN è un noto software VPN dell'omonima azienda. È un po' più difficile da configurare rispetto ad altri software VPN, quindi in questo articolo ci concentreremo sulla configurazione lato server e sulla creazione di file ovpn. Questa guida è progettata per essere eseguita come utente non root. Se hai effettuato l'accesso come root, per prima cosa iniziamo con l'aggiunta dell'utente non root.
adduser newuser
Quindi gli diamo 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 fai.
Ora effettuato l'accesso come newuser o qualsiasi altro utente non root, installeremo openvpn
sudo apt-get install openvpn easy-rsa
Certificati server e client
Prima di tutto, dobbiamo creare la directory per l'autorità di certificazione e modificare il file vars is
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
nano vars
Trova le righe che contengono export KEY_ e rendile così
export KEY_COUNTRY="US"
export KEY_PROVINCE="New York State"
export KEY_CITY="New York City"
export KEY_ORG="Linoxide"
export KEY_EMAIL="[email protected]"
export KEY_OU="LinuxGeeks"
C'è anche una riga denominata KEY_NAME nello stesso file, quindi inseriremo semplicemente il server come nome
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, quindi, digitiamolo per essere sicuri di eseguire l'ambiente pulito.
./clean-all
Ora passiamo alla parte di creazione del certificato:
./build-ca
Ti verranno richieste alcune domande, ma poiché abbiamo modificato vars, le nuove impostazioni predefinite dovrebbero essere ok, quindi puoi premere invio su tutti i conteggi.
./build-key-server server
Entra di nuovo, ma questa volta non su tutti i conti. Quando ti chiede di inserire la password, non inserirla e alla fine premi y 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, poiché 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
Le impostazioni predefinite di origine sono di nuovo ok, quindi premi semplicemente invio e y alla fine.
Configurazione del server
Come 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
Quindi dobbiamo modificare server.conf per rendere funzionante il nostro server. Puoi usare qualsiasi editor, ma 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 abbiamo fatto qui:impostiamo tutto il traffico in modo che vada su OpenVPN, impostiamo gruppo e utente su nogroup e nessuno e impostiamo i log in modo che vadano a /etc/openvpn/openvpn.log. Successivamente abbiamo bisogno di un'altra modifica su ta.key:
sudo nano /etc/openvpn/server.conf
E trova questa riga
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 di ufw devono essere modificate per consentire il masquerading, quindi aggiungilo all'inizio, prima di *filter
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 molto probabilmente devi cambiare per riflettere il nome reale della tua interfaccia di rete con connessione a Internet, quindi l'ho evidenziata. Successivamente abilitiamo l'inoltro 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 client
Con la parte di configurazione del client, utilizziamo 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 abbiamo copiato è un'impostazione di base, quindi deve essere modificato.
nano ~/client-configs/base.conf
E poi trova una riga che dice remote. Modificalo anche puntando all'indirizzo IP del tuo server di FQDN.
remote your.serv.ipor.fqdn 1194
Salvalo, 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
Allora cosa abbiamo fatto qui? Per prima cosa impostiamo utente e gruppo su nessuno e nessun gruppo. Quindi abbiamo commentato i percorsi dei certificati, poiché integreremo i certificati inline nel file .ovpn. Quindi abbiamo aggiunto il parametro key-direction 1.
Script per creare configurazioni client
Per incorporare la configurazione del client, le chiavi e i certificati in un unico file .ovpn per un trasferimento più semplice ai client remoti, utilizzeremo uno script semplice. Facciamo
nano ~/client-configs/make_config.sh
E poi incolla lì questo pastebin. Dopo averlo salvato, 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 all'interno della 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 altro nome ed esegui nuovamente questo comando. Se tutto è andato bene, nella directory client-configs/files dovrebbe contenere file ovpn. Devi trasferirli al tuo o ai tuoi clienti e connetterti. Lo farò con scp, dal mio laptop Fedora ho eseguito comandi in questo modo
scp [email protected]:/home/newuser/client-configs/files/client100.ovpn /home/miki/Documents/
Da lì puoi caricarlo su un telefono Android con un cavo USB o su AirDroid, o su Windows VM o su un Mac. Per il gestore di rete Linux dovresti smontare il file
Conclusione
Si tratta della configurazione del server, quindi dovremmo connetterci da vari 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 tutto questo.