Moin,
ein kleines OpenVPN Howto...
Falls es jemand gebrauchen kann...
Es richtet sich an Leute, die wissen, wie in etwa OpenSSL und OpenVPN funktionieren... aber bei Fragen könnt ihr ja hier posten...
0) Im Kernel MUSS der TUN-Device-Support aktiv sein!
1) OpenVPN installieren
Zitat:Pegasus / # emerge -av openvpn
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild N ] net-misc/openvpn-2.0.9 USE="iproute2 ssl threads -examples -minimal -pam -passwordsave (-selinux) -static" 654 kB
Total: 1 package (1 reinstall), Size of downloads: 654 kB
Would you like to merge these packages? [Yes/No]
2) OpenVPN konfigurieren
Code:
Pegasus / # cat /etc/openvpn/openvpn.conf
# OpenVPN
# Port und Protokoll
port 1339
proto udp
# Interface
dev tun0
# Serverzertifikate
ca /etc/openvpn/ssl/ca.crt
dh /etc/openvpn/ssl/dh.param
cert /etc/openvpn/ssl/server.crt
key /etc/openvpn/ssl/server.key
# IP-Range
server 192.168.254.0 255.255.255.0
client-to-client
tls-verify "/etc/openvpn/checkCN.sh /etc/openvpn/checkCN.txt"
# Ausführungsrechte
client-config-dir ccd
user nobody
group nogroup
# Timeout
keepalive 10 60
# Komprimierung
comp-lzo
# Dauerhafte Verbindung
persist-key
persist-tun
# Logs
status /var/log/openvpn.log
Für die folgenden Schritte nutzen wir diese OpenSSLkonfiguration:
Code:
Pegasus / # cat /etc/ssl/openssl.cnf
# OpenSSL
[ ca ]
default_ca = CA_default
[ CA_default ]
dir = /etc/openvpn/ssl
certs = $dir
crl_dir = $dir
database = $dir/database.txt
new_certs_dir = $dir
certificate = $dir/CA.crt
serial = $dir/serial.txt
private_key = $dir/CA.key
default_days = 10000
default_md = sha1
policy = policy_anything
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ server ]
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "Generated by OpenSSL"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
extendedKeyUsage = serverAuth
keyUsage = digitalSignature, keyEncipherment
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
req_extensions = v3_req
x509_extensions = v3_ca
[ req_distinguished_name ]
countryName = Country Name
countryName_default = DE
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name
stateOrProvinceName_default = N/A
localityName = Locality Name
localityName_default = N/A
organizationName = Organization Name
organizationName_default = N/A
organizationalUnitName = Organizational Unit Name
organizationalUnitName_default = N/A
commonName = Common Name
commonName_default = My OpenVPN CA
emailAddress = E-Mail Address
emailAddress_default = noreply@meine-domain.de
[ v3_req ]
subjectAltName = DNS:*.meine-domain.de,DNS:meine-domain.com
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer:always
basicConstraints = CA:true
Zusätzlich muss folgendes getan werden:
/bin/touch /etc/openvpn/ssl/database.txt
/bin/echo 01 > /etc/openvpn/ssl/serial.txt
3) CA anlegen
Code:
/usr/bin/openssl dhparam -out /etc/openvpn/ssl/dh.param 4096
/usr/bin/openssl req -new -x509 -config /etc/ssl/openssl.cnf -days 10000 -extensions v3_ca -keyout /etc/openvpn/ssl/CA.key -out /etc/openvpn/ssl/CA.crt
WICHTIG: Als CN (Common Name) die Beschreibung eurer CA angeben. Z.B.: My OpenVPN CA
4) OpenVPN Serverzertifikat erstellen und signieren
Code:
/usr/bin/openssl genrsa -out /etc/openvpn/ssl/server.key 4096
/usr/bin/openssl req -new -nodes -config /etc/ssl/openssl.cnf -extensions v3_req -key /etc/openvpn/ssl/server.key -out /etc/openvpn/ssl/server.csr
/usr/bin/openssl ca -config /etc/ssl/openssl.cnf -out /etc/openvpn/ssl/server.crt -extensions server -in /etc/openvpn/ssl/server.csr
WICHTIG: Als CN (Common Name) die Domain eures OpenVPN Servers angeben, wie z.B.: vpn.meine-domain.de
5) OpenVPN Clientzertifikate erstellen und signieren (Diesen Schritt für jeden User machen!)
Code:
/usr/bin/openssl genrsa -des3 -out clients/User1.key 4096
/usr/bin/openssl req -new -config clients/openssl.cnf -key /home/<username>/User1.key -out /home/<username>/User1.csr
/usr/bin/openssl ca -config /etc/ssl/openssl.cnf -out /home/<username>/User1.crt -in /home/<username>/User1.csr
WICHTIG: Als CN (Common Name) keine Domain angeben. Am Besten den Usernamen.
6) Mit einem Script bei OpenVPN den CN überprüfen
Wie oben in der Config angegeben, gibt es eine checkCN.sh und eine checkCN.txt.
Vorweg: Das Script hab ich von
ovpnCNcheck — an OpenVPN tls-verify script | Robert Penz Blog
Das Script prüft jedes Zertifikat vom Client, ob der eingetragene CN auch in der checkCN.txt steht. Damit kann man einzelne Zertifikate auch speren, ohne sofort eine neue CA anzulegen.
Code:
Pegasus / # cat /etc/openvpn/checkCN.sh
#!/bin/sh
[ $# -eq 3 ] || { echo usage: checkCN.sh userfile certificate_depth X509_NAME_oneline ; exit 255 ; }
# $2 -> certificate_depth
if [ $2 -eq 0 ] ; then
# $3 -> X509_NAME_oneline
# $1 -> cn we are looking for
grep -q "^`expr match "$3" ".*/CN=\([^/][^/]*\)"`$" "$1" && exit 0
exit 1
fi
exit 0
Pegasus / # cat /etc/openvpn/checkCN.txt
User1