====== Open VPN server op CentOS 7 ======
===== software =====
installeer de nodige software door:\\
''yum install epel-release''
en vervolgens:\\
''yum install openvpn''
===== Keys & Certificaten =====
==== server en client TLS ====
Maak de signing request als volgt aan op de VPN server zelf:
''yum install openssl''
''mkdir -p /etc/openvpn/certs/keys\\
chmod 400 /etc/openvpn/certs/keys\\
cd /etc/openvpn/certs''
Maak een config file aan voor de server csr: ''vi vpnserver.cnf''
en zet hier in:
# vpnserver.cnf
# This configuration file is used by the 'req' command when the server certificate is created.
[ req ]
default_bits = 2048
default_md = sha2
encrypt_key = no
prompt = no
string_mask = utf8only
distinguished_name = server_distinguished_name
req_extensions = req_cert_extensions
# attributes = req_attributes
[ server_distinguished_name ]
countryName = NL
stateOrProvinceName = zuid Holland
localityName = Den Haag
organizationName = Boerema CI&ND
organizationalUnitName = IT Dept.
commonName = vpnserver.auriel.nl
emailAddress = hostmaster@auriel.nl
[ req_cert_extensions ]
nsCertType = server
subjectAltName = email:hostmaster@auriel.nl
en maak de CSR aan door:\\
''openssl req -new -config vpnserver.cnf -keyout vpnserver.key -out vpnserver.csr\\
chmod 400 server.key''
transporteer deze naar de CA server en [[werkinstructies:ssl_tls#x509_certificaten_signen|sign]] deze.
Maak ook voor de client een certificaat-key pair aan (deze zullen we op alle clients gebruiken):
''vi vpnclient.cnf''
en zet hier in:
# vpnclient.cnf
# This configuration file is used by the 'req' command when the server certificate is created.
[ req ]
default_bits = 2048
default_md = sha2
encrypt_key = no
prompt = no
string_mask = utf8only
distinguished_name = client_distinguished_name
req_extensions = req_cert_extensions
# attributes = req_attributes
[ client_distinguished_name ]
countryName = NL
stateOrProvinceName = zuid Holland
localityName = Den Haag
organizationName = Boerema CI&ND
organizationalUnitName = IT Dept.
commonName = vpnclient.auriel.nl
emailAddress = hostmaster@auriel.nl
[ req_cert_extensions ]
nsCertType = client
subjectAltName = email:hostmaster@auriel.nl
en maak de CSR aan door:\\
''openssl req -new -config vpnclient.cnf -keyout vpnclient.key -out vpnclient.csr\\
chmod 400 vpnclient.key''
transporteer deze naar de CA server en [[werkinstructies:ssl_tls#x509_certificaten_signen|sign]] deze.
==== Diffie Hellman ====
''openssl dhparam -out dh2048.pem 2048''
==== HMAC key ====
''%%openvpn --genkey --secret ta.key%%\\
chmod 400 ta.key''
zowel de clients als de server moeten deze file hebben.
===== Server Setup =====
==== OpenVPN configuratie ====
Kopieer het voorbeeld configuratiefile naar de juiste locatie:
''cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn''
En pas deze aan: ''vi /etc/openvpn/server.conf''
en zorg dat de volgende parameters als volgt staan:
port 1194
proto udp
dev tun
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/vpnserver.auriel.nl.crt
key /etc/openvpn/certs/vpnserver.auriel.nl.key
dh /etc/openvpn/certs/dh2048.pem
server 10.8.1.0 255.255.255.0
ifconfig-pool-persist ipp.txt
duplicate-cn
comp-lzo
keepalive 10 120
cipher AES-256-CBC
tls-auth /etc/openvpn/certs/ta.key 0
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
explicit-exit-notify 1
==== Firewall ====
We routeren niet, we staan alleen een VPN verbinding toe. Open de firewall voor de poort die we net hebben geconfigureerd, 1194:
''firewall-cmd %%--permanent --%%add-port=1194/tcp\\
firewall-cmd %%--%%reload''
en start de applicatie nu en in de toekomst:
''systemctl enable openvpn@server.service\\
systemctl start openvpn@server.service''
===== SELinux aanpassen =====
Als je OpenVPN op een andere poort wil draaien dan de standaard 1194 moet je OpenVPN toegang geven tot niet standaard poort voor SELinux.
Vindt de SELinux service naam door:
''semanage port -l | grep openvpn''
de output is:
openvpn_port_t tcp 1194
openvpn_port_t udp 1194
en geef openvpn toegang tot een niet standaard poort, bijvoorbeeld poort 123:\\
''semanage port -a -t openvpn_port_t -p udp 123''
===== Client configuratie =====
We embedden de certificaten en keys hier in om configuratie op android enzovoort makkelijker te maken, De regels met een hash er voor zou de regel zijn als je de certificaten en key's niet zou embedden.
Maak een configuratie file: '' vi /etc/openvpn/client/client.ovpn''\\
en zet hier in:
vpnclient.auriel.nl
dev tun
proto udp
pull
comp-lzo
remote vpnserver.auriel.nl 1194
#ca ca.crt
-----BEGIN CERTIFICATE-----
MIID-etcetera.
-----END CERTIFICATE-----
#cert vpnclient.crt
-----BEGIN CERTIFICATE-----
MIID edcetera.
-----END CERTIFICATE-----
#key vpnclient.key
-----BEGIN PRIVATE KEY-----
MIIE edcetera.
-----END PRIVATE KEY-----
cipher AES-256-CBC
#tls-auth ta.key 1
key-direction 1
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
e56c4aa7f938605d22f394247f7bf88f
edcetera.
-----END OpenVPN Static key V1-----
===== bronnen =====
[[https://www.digitalocean.com/community/tutorials/how-to-setup-and-configure-an-openvpn-server-on-centos-7]]
[[https://weakdh.org/sysadmin.html]]
[[http://www.macfreek.nl/memory/Create_a_OpenVPN_Certificate_Authority]]
[[https://forums.openvpn.net/viewtopic.php?t=11913]]
[[https://forums.openvpn.net/viewtopic.php?t=20860]]
[[https://www.sparklabs.com/forum/viewtopic.php?t=1888]]
[[http://sysadmin-notepad.blogspot.nl/2013/05/custom-openvpn-port-with-selinux-enabled.html]]