Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Kleines OpenVPN Howto
Alpha Offline
Oskar

Beiträge: 16.347
Registriert seit: Jan 2009
Beitrag #1
Kleines OpenVPN Howto
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

Mark IV Style Motherfucker!
(Dieser Beitrag wurde zuletzt bearbeitet: 18.09.2009 19:41 von Alpha.)
18.09.2009 19:35
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
chiaki Offline
Die Pommesfee

Beiträge: 12.554
Registriert seit: Jul 2008
Beitrag #2
Kleines OpenVPN Howto
mensch gleich mal installieren hier EUDA
18.09.2009 19:37
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
chrisi1512 Offline
Benutzer

Beiträge: 104
Registriert seit: Sep 2009
Beitrag #3
Kleines OpenVPN Howto
Abend,

Coole Sache. Hab mir zwar schon was eingerichtet aber werde mich gleich mal dran machen und deins durchackern :)

Thx für das HowTo,
Chris
18.09.2009 20:24
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste