OpenVPN


LET OP:
Ik had er behoorlijk wat tijd in gestoken om OpenVPN werkend te krijgen m.b.v. meerdere websites, daar heb ik onderstaande handleiding van gemaakt.
Maar: het lijkt erop dat het instellen van OpenVPN is gewijzigd in nieuwere versies! Ik ga het installeren van OpenVPN nog eens opnieuw proberen, het is een lastig in te stellen programma...

[UPDATE] Ik heb deze handleiding gemaakt met Rasbian versie "Wheezy". Ik vermoed dat deze handleiding niet meer goed is voor de nieuwere Raspbian versie "Jessie"... Dat ga ik nog eens uitproberen...


Op een Raspberry kun je ook OpenVPN installeren. Met OpenVPN kun je vanaf een andere lokatie (bijvoorbeeld een open Wifi verbinding bij een restaurant of op vakantie) een beveiligde verbinding maken naar je eigen internet verbinding! Vervolgens kun je op een veiliger manier internetten.

Onderstaande handleiding heb ik samengesteld met behulp van andere websites. Ik ben geen expert in VPN verbindingen, dus ik kan helaas niet garanderen dat deze instellingen 100% veilig zijn...

http://raspberrypihelp.net/tutorials/1-openvpn-server-tutorial
http://readwrite.com/2014/04/10/raspberry-pi-vpn-tutorial-server-secure-web-browsing

Wijzig voor de zekerheid de wachtwoorden van je Rasperry Pi:
Wachtwoord wijzigen voor root: sudo passwd
Wachtwoord wijzigen voor gebruiker pi: passwd

OpenVPN installeren:
sudo apt-get install openvpn

OpenVPN instellingen bestand in de juiste map zetten en instellingen goed zetten:
sudo -s
cp –r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
cd /etc/openvpn/easy-rsa
nano vars

export EASY_RSA=”/etc/openvpn/easy-rsa”

Voor zwaardere encryptie deze regel:
export KEY_SIZE=1024
Wijzigen in:
export KEY_SIZE=2048

Geef de volgende commando's:
source ./vars → This “sources” or loads the vars document you edited earlier.
./clean-all → This will remove any previous keys. If you have keys you don’t want to remove in this folder (like you’re doing this tutorial a second time), skip this command. 
./build-ca → This final line builds your certificate authority.
After the third command, the Raspberry Pi is going to shoot back with optional fields for you to fill out if you want to —Country Name, State or Province Name, Locality Name, Organization Name, Organizational Unit, Common Name, Name, and Email Address. If you don't care to fill out these fields, just hit “enter” each instance to have the Pi fill in the default value.

OpenVPN Server

Geef de openVPN server een naam (in dit voorbeeld de naam "vpnserver"):
./build-key-server vpnserver
Let op de volgende vragen die gesteld worden:
Common Name vpnserver Hier de server naam invullen, bijvoorbeeld "vpnserver".
A challenge password? niets invullen, leeg laten.
Sign the certificate? y
1 out of 1 certificate requests certified, commit? y

OpenVPN Gebruikers (clients)

Maak nu een toegangscertificaat voor elk apparaat/ gebruiker. Het is mogelijk om één certificaat te maken voor alle apparaten maar dan kan er maar één tegelijk inloggen...
Als voorbeeld een certificaat voor gebruiker: Henk.
./build-key-pass Henk
Enter PEM pass phrase Wachtwoord invoeren. 
A challenge password? LEEG laten.
Sign the certificate? y
cd keys
openssl rsa -in Henk.key -des3 -out Henk.3des.key

Enter pass phrase for Henk.key Dit is noodzakelijk voor OpenVPN Connect clients op Android of iOS apparaten. Hetzelfde wachtwoord als hiervoor weer invoeren.

Now let’s generate the Diffie-Hellman key exchange. This is the central code that makes your VPN server tick, an exchange that lets two entities with no prior knowledge of one another share secret keys over a public server. Like RSA, it’s one of the earliest cryptosystems out there. 
cd /etc/openvpn/easy-rsa/
./build-dh

Finally, we’re going to implement OpenVPN’s build-in Denial of Service (DoS) attack protection.
openvpn --genkey --secret keys/ta.key

nano /etc/openvpn/server.conf

local 192.168.2.201 # IP Adres van de Raspberry PI.
dev tun
proto udp #Some people prefer to use tcp. Don't change it if you don't know.
port 1194
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/vpnserver.crt # SWAP WITH YOUR CRT NAME
key /etc/openvpn/easy-rsa/keys/vpnserver.key # SWAP WITH YOUR KEY NAME
dh /etc/openvpn/easy-rsa/keys/dh2048.pem # Eventueel wijzigen naar 1024 als je geen 2048 hebt ingesteld!
server 10.8.0.0 255.255.255.0
# server and remote endpoints
ifconfig 10.8.0.1 10.8.0.2
# Add route to Client routing table for the OpenVPN Server
push "route 10.8.0.1 255.255.255.255"
# Add route to Client routing table for the OpenVPN Subnet
push "route 10.8.0.0 255.255.255.0"
# your local subnet
push "route 192.168.2.0 255.255.255.0" # IP Netwerk van Raspberry PI (eindigt op een 0).
# Set primary domain name server address to the SOHO Router
# If your router does not do DNS, you can use Google DNS 8.8.8.8
push "dhcp-option DNS 8.8.8.8" # This should already match your router address and not need to be changed.
# Override the Client default gateway by using 0.0.0.0/1 and
# 128.0.0.0/1 rather than 0.0.0.0/0. This has the benefit of
# overriding but not wiping out the original default gateway.
push "redirect-gateway def1"
client-to-client
duplicate-cn
keepalive 10 120
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
cipher AES-128-CBC
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn-status.log 20
log /var/log/openvpn.log
verb 1

OpenVPN Forward internet traffic

nano /etc/sysctl.conf
Verwijder het # teken: #net.ip4.ip_forward=1
The sysctl command “configures kernel parameters at runtime.” The -p tells it to reload the file with the changes you just made. 
sysctl -p

OpenVPN Raspbian Firewall aanpassen

nano /etc/rc.local
Add these two lines above exit 0;
iptables -t nat -A INPUT -i eth0 -p udp -m udp --dport 1194 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.2.201
 
sudo reboot

Bij problemen de logboeken bekijken: sudo cat /var/log/openvpn 
En ook: daemon.log
/var/log/syslog

OpenVPN xxx.ovpn gebruikers bestand aanmaken

Met een .ovpn bestand kan een ovpn client programma makkelijk worden ingesteld!

nano /etc/openvpn/easy-rsa/keys/Default.txt
99.99.99.99 vervangen door je eigen IP adres (te vinden bij deze website: http://www.whatismyip.com).

client
dev tun
proto udp
remote 99.99.99.99 1194 
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ns-cert-type server
key-direction 1
cipher AES-128-CBC
comp-lzo
verb 1
mute 20


Het volgende bestand is erg handig om een .ovpn bestand te kunnen genereren. Daarmee is een client erg makkelijk in te stellen.
nano /etc/openvpn/easy-rsa/keys/MakeOVPN.sh
 
#!/bin/bash
 
# Default Variable Declarations
DEFAULT="Default.txt"
FILEEXT=".ovpn"
CRT=".crt"
KEY=".3des.key"
CA="ca.crt"
TA="ta.key"
 
#Ask for a Client name
echo "Please enter an existing Client Name:"
read NAME
 
 
#1st Verify that client’s Public Key Exists
if [ ! -f $NAME$CRT ]; then
echo "[ERROR]: Client Public Key Certificate not found: $NAME$CRT"
exit
fi
echo "Client’s cert found: $NAME$CR"
 
 
#Then, verify that there is a private key for that client
if [ ! -f $NAME$KEY ]; then
echo "[ERROR]: Client 3des Private Key not found: $NAME$KEY"
exit
fi
echo "Client’s Private Key found: $NAME$KEY"
 
#Confirm the CA public key exists
if [ ! -f $CA ]; then
echo "[ERROR]: CA Public Key not found: $CA"
exit
fi
echo "CA public Key found: $CA"
 
#Confirm the tls-auth ta key file exists
if [ ! -f $TA ]; then
echo "[ERROR]: tls-auth Key not found: $TA"
exit
fi
echo "tls-auth Private Key found: $TA"
 
#Ready to make a new .opvn file - Start by populating with the default file
cat $DEFAULT > $NAME$FILEEXT
 
#Now, append the CA Public Cert
echo "<ca>" >> $NAME$FILEEXT
cat $CA >> $NAME$FILEEXT
echo "</ca>" >> $NAME$FILEEXT
 
#Next append the client Public Cert
echo "<cert>" >> $NAME$FILEEXT
cat $NAME$CRT | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' >> $NAME$FILEEXT
echo "</cert>" >> $NAME$FILEEXT
 
#Then, append the client Private Key
echo "<key>" >> $NAME$FILEEXT
cat $NAME$KEY >> $NAME$FILEEXT
echo "</key>" >> $NAME$FILEEXT
 
#Finally, append the TA Private Key
echo "<tls-auth>" >> $NAME$FILEEXT
cat $TA >> $NAME$FILEEXT
echo "</tls-auth>" >> $NAME$FILEEXT
 
echo "Done! $NAME$FILEEXT Successfully Created."
 
#Script written by Eric Jodoin

chmod 700 MakeOVPN.sh
Finally, execute the script with: 
./MakeOVPN.sh

Om een client OpenVPN in te stellen, is meestal alleen het x.ovpn bestand nodig. Kopieer dit ovpn bestand naar bijvoorbeeld je smartphone. Open op de smartphone een VPN programma en importeer het ovpn bestand. Alle instellingen worden dan automatisch gedaan!

Bestanden kopiëren (maar alleen het x.ovpn bestand is nodig!):

chmod 777 -R /etc/openvpn
Be sure to undo this when you’re done copying files, so others can’t do it! Put the permission back to 600 when you’re done, so only the Pi user can read/write files:
chmod 600 -R /etc/openvpn

Router instellingen aanpassen

Poort 1194 UDP doorzetten in router.

OVPN Client instellen (smartphone, tablet, laptop)

Het is handig om het .ovpn bestand te gebruiken voor het ovpn client programma. Daarin staan alle benodigde sleutels, en instellingen.
Dit zou goed moeten zijn, maar controleer eventueel de instellingen: TLS deze moet aan staan, en de TLS richting = 1.
 
Test niet op je eigen netwerk! Je kunt alleen goed testen met een apparaat op een ander netwerk, bijvoorbeeld je smartphone die niet is verbonden met je eigen wifi.Ga naar: http://www.whatismyip.com/ je moet het IP adres van je thuisnetwerk zien.