OpenVPN: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 17: | Zeile 17: | ||
* SSL-Zertifikate für alle Beteiligten. Um die kostengünstig (umsonst) und einfach zu erhalten, sei eine Anmeldung bei [http://cacert.org CaCert] empfohlen. | * SSL-Zertifikate für alle Beteiligten. Um die kostengünstig (umsonst) und einfach zu erhalten, sei eine Anmeldung bei [http://cacert.org CaCert] empfohlen. | ||
* Ein Netzwerkplan für das VPN, um folgende Fragen zu klären (''Melle, bitte ergänzen''): | * Ein Netzwerkplan für das VPN, um folgende Fragen zu klären (''Melle, bitte ergänzen''): | ||
** Welche LAN-Adressen (nach RFC 1918) sollen für das VPN verwendet werden? ''Todo: Ausnahmeregeln für Windoze verstehen und erklären.'' | ** Welche LAN-Adressen (nach RFC 1918) sollen für das VPN verwendet werden? Im Folgenden sei <tt>10.0.0.x</tt> als VPN-Netz angenommen. ''Todo: Ausnahmeregeln für Windoze verstehen und erklären.'' | ||
** Wer darf mit wem kommunizieren? Welches Routing und welche Firewall-Regeln werden dazu auf dem Server benötigt? | ** Wer darf mit wem kommunizieren? Welches Routing und welche Firewall-Regeln werden dazu auf dem Server benötigt? Bis auf weiteres sei davon ausgegangen, daß Clients Verbindungen ins Internet nutzen dürfen, aber nicht untereinander kommunizieren sollen. | ||
** Welche Namen haben die VPN- | ** Welche Namen haben die VPN-Teilnehmer? Nachfolgend sei <code>vpn-client.freifunk-potsdam.de</code> bzw. <code>vpn-server.freifunk-potsdam.de</code> angenommen. | ||
=== SSL-Certs === | === SSL-Certs === | ||
Benötigt werden mindestens ein Server-Cert, und mindestens ein Client-Cert. | |||
Um ein Cert zu erstellen, wird ein Key benötigt. Mit OpenSSL geht das so: | Um ein Cert zu erstellen, wird ein Key benötigt. Mit OpenSSL geht das so: | ||
openssl genrsa -out vpn.key 2048 | openssl genrsa -out vpn.key 2048 | ||
Um ein Cert zu erzeugen, braucht man zunächst ein CSR (''Certificate Signing Request''): | |||
openssl req -new -key vpn.key -out | openssl req -new -key vpn.key -out vpn.csr | ||
Es folgt ein Frage-und-Antwort-Spiel. Dabei ist die einzig wichtige Frage: <code>Common Name (eg, YOUR name)</code>. Dort den jeweiligen Rechnernamen eintragen, z.B. <code> | Es folgt ein Frage-und-Antwort-Spiel. Dabei ist die einzig wichtige Frage: <code>Common Name (eg, YOUR name)</code>. Dort den jeweiligen Rechnernamen eintragen, z.B. <code>vpn-server.freifunk-potsdam.de</code> bzw. <code>vpn-client.freifunk-potsdam.de</code>. | ||
Die CSRs klebt man der Reihe nach in das Eingabefeld bei [http://www.cacert.org/ CaCert] (unter <tt>Server Certificates</tt> → <tt>New</tt>). Postwendend erhält man ein halbwegs glaubwürdiges Zertifikat. Außerdem braucht man noch das [http://www.cacert.org/certs/root.crt Root-Cert] von CACert. | Die CSRs klebt man der Reihe nach in das Eingabefeld bei [http://www.cacert.org/ CaCert] (unter <tt>Server Certificates</tt> → <tt>New</tt>). Postwendend erhält man ein halbwegs glaubwürdiges Zertifikat. Außerdem braucht man noch das [http://www.cacert.org/certs/root.crt Root-Cert] von CACert. | ||
Die Gültigkeitsdauer der Zertifikate beträgt 6 Monate bis 2 Jahre, abhängig von den ''Assurance''-Punkten des Antragstellers. | Die Gültigkeitsdauer der Zertifikate beträgt 6 Monate bis 2 Jahre, abhängig von den ''Assurance''-Punkten des Antragstellers. Herrmann kann Punkte vergeben; dk kann Certs bis zu 2 Jahren ausstellen. | ||
Für die Clients kann man entweder individuelle Zertifikate benutzen, oder aber ein Sammel-Zertifikat für alle VPN-Nutzer. Da der Verwaltungsaufwand für individuelle Zertifikate höher ist, und diese in einem prinzipiell offenen Netz nicht wirklich benötigt werden, sei im Folgenden von einem Sammelzertifikat ausgegangen. | |||
Man kann unterschiedliche Keys für Server- und Client-Zertifikate nutzen, aber das bringt nicht wirklich etwas. | |||
=== Server-Config === | === Server-Config === | ||
Zeile 39: | Zeile 45: | ||
Die Server-Config besteht aus: | Die Server-Config besteht aus: | ||
* Der globalen Konfiguration <code>/etc/openvpn/server.conf</code> | * Der globalen Konfiguration <code>/etc/openvpn/server.conf</code> | ||
* Einer Konfigurationsdatei pro Client in <code>/etc/openvpn/ccd</code> | * Einer Konfigurationsdatei pro Client in <code>/etc/openvpn/ccd</code>. Diese muß so heißen wir der Common Name im Client-Cert, in unserem Fall also <code>vpn-client.freifunk-potsdam.de</code>. | ||
Die globale Config in <code>/etc/openvpn/server.conf</code> sieht so aus: | Die globale Config in <code>/etc/openvpn/server.conf</code> sieht dann so aus: | ||
port 33469 | port 33469 | ||
proto udp | proto udp | ||
Zeile 48: | Zeile 54: | ||
ca /etc/ssl/certs/cacert.org.pem | ca /etc/ssl/certs/cacert.org.pem | ||
cert /etc/ | cert /etc/openvpn/vpn-server.crt | ||
key /etc/ | key /etc/openvpn/vpn.key | ||
dh dh1024.pem | dh dh1024.pem | ||
Zeile 73: | Zeile 79: | ||
status openvpn-status.log | status openvpn-status.log | ||
In <code>/etc/openvpn/ccd</code> befindet sich eine Konfigurationsdatei pro Client, die exakt so heißen muß wie der CN im Zertifikat des Clients, also z.B. <code>/etc/openvpn/ccd/ | In <code>/etc/openvpn/ccd</code> befindet sich eine Konfigurationsdatei pro Client, die exakt so heißen muß wie der CN im Zertifikat des Clients, also z.B. <code>/etc/openvpn/ccd/vpn-client.freifunk-potsdam.de</code>: | ||
ifconfig-push 10.0.1.2 10.0.1.1 | ifconfig-push 10.0.1.2 10.0.1.1 | ||
push "route 10.0.0.0 255.255.0.0" | push "route 10.0.0.0 255.255.0.0" | ||
Zeile 82: | Zeile 88: | ||
dev tun | dev tun | ||
proto udp | proto udp | ||
remote vpn.freifunk-potsdam.de 33469 | remote vpn-server.freifunk-potsdam.de 33469 | ||
nobind | nobind | ||
persist-key | persist-key |
Version vom 27. August 2006, 16:34 Uhr
Überblick
OpenVPN leitet IP-Verbindungen durch unsichere Netze mithilfe kryptographisch gesicherter Tunnel. Die Nutzdaten werden mit SSL / TLS verschlüsselt, wodurch eine hohe Abhörsicherheit erzielt wird. Die OpenVPN-Software läuft als Hintergrundprozeß ("Daemon"), die Anbindung an den IP-Stack des jeweiligen Betriebssystemes wird durch einen Tunnel-Driver hergestellt.
Der Vorzüge von OpenVPN gegenüber PPTP oder IPsec sind Portabilität, offene Standards und einfache Konfiguration. Für folgende Systeme ist OpenVPN verfügbar:
- Linux: In den meisten Distributionen vorhanden.
- Windoze: GUI + Installer
- Mac OS X: Tunnelblick
Ein VPN besteht aus:
- Einem Server, der den Zugang zum virtuellen Netz kontrolliert und das Routing zwischen den Clients und Nicht-VPN-Netzen regelt,
- Mehreren Clients, die durch einen VPN-Tunnel mit dem Server kommunizieren. Mit Umweg über den Server ist so auch eine Client-zu-Client-Kommunikation möglich, sofern die Routing-Regeln des Servers dies zulassen.
Im üblichen Aufbau von OpenVPN-Netzen melden sich die Clients über ein SSL-Zertifikat am Server an, wobei der CN (Canonical Name) des Zertifikates als Rechnername verwendet wird, um die korrekte Netzwerk-Konfiguration des Client zu bestimmen. Dies setzt voraus, daß jeder Client ein individuelles Zertifikat erhält. Wenn die Clients nur ins Internet wollen, wäre ein Cert für alle und ein DHCP-Pool besser. Todo: Rausfinden, wie das geht.
Einrichtung
Für ein einfaches Client / Server-Setup wird benötigt:
- SSL-Zertifikate für alle Beteiligten. Um die kostengünstig (umsonst) und einfach zu erhalten, sei eine Anmeldung bei CaCert empfohlen.
- Ein Netzwerkplan für das VPN, um folgende Fragen zu klären (Melle, bitte ergänzen):
- Welche LAN-Adressen (nach RFC 1918) sollen für das VPN verwendet werden? Im Folgenden sei 10.0.0.x als VPN-Netz angenommen. Todo: Ausnahmeregeln für Windoze verstehen und erklären.
- Wer darf mit wem kommunizieren? Welches Routing und welche Firewall-Regeln werden dazu auf dem Server benötigt? Bis auf weiteres sei davon ausgegangen, daß Clients Verbindungen ins Internet nutzen dürfen, aber nicht untereinander kommunizieren sollen.
- Welche Namen haben die VPN-Teilnehmer? Nachfolgend sei
vpn-client.freifunk-potsdam.de
bzw.vpn-server.freifunk-potsdam.de
angenommen.
SSL-Certs
Benötigt werden mindestens ein Server-Cert, und mindestens ein Client-Cert. Um ein Cert zu erstellen, wird ein Key benötigt. Mit OpenSSL geht das so:
openssl genrsa -out vpn.key 2048
Um ein Cert zu erzeugen, braucht man zunächst ein CSR (Certificate Signing Request):
openssl req -new -key vpn.key -out vpn.csr
Es folgt ein Frage-und-Antwort-Spiel. Dabei ist die einzig wichtige Frage: Common Name (eg, YOUR name)
. Dort den jeweiligen Rechnernamen eintragen, z.B. vpn-server.freifunk-potsdam.de
bzw. vpn-client.freifunk-potsdam.de
.
Die CSRs klebt man der Reihe nach in das Eingabefeld bei CaCert (unter Server Certificates → New). Postwendend erhält man ein halbwegs glaubwürdiges Zertifikat. Außerdem braucht man noch das Root-Cert von CACert.
Die Gültigkeitsdauer der Zertifikate beträgt 6 Monate bis 2 Jahre, abhängig von den Assurance-Punkten des Antragstellers. Herrmann kann Punkte vergeben; dk kann Certs bis zu 2 Jahren ausstellen.
Für die Clients kann man entweder individuelle Zertifikate benutzen, oder aber ein Sammel-Zertifikat für alle VPN-Nutzer. Da der Verwaltungsaufwand für individuelle Zertifikate höher ist, und diese in einem prinzipiell offenen Netz nicht wirklich benötigt werden, sei im Folgenden von einem Sammelzertifikat ausgegangen.
Man kann unterschiedliche Keys für Server- und Client-Zertifikate nutzen, aber das bringt nicht wirklich etwas.
Server-Config
Noch nicht fertig, weil kein VPN-Plan vorhanden
Die Server-Config besteht aus:
- Der globalen Konfiguration
/etc/openvpn/server.conf
- Einer Konfigurationsdatei pro Client in
/etc/openvpn/ccd
. Diese muß so heißen wir der Common Name im Client-Cert, in unserem Fall alsovpn-client.freifunk-potsdam.de
.
Die globale Config in /etc/openvpn/server.conf
sieht dann so aus:
port 33469 proto udp dev tun0 ca /etc/ssl/certs/cacert.org.pem cert /etc/openvpn/vpn-server.crt key /etc/openvpn/vpn.key dh dh1024.pem mode server tls-server ifconfig 10.0.0.1 10.0.0.2 route 10.0.0.0 255.0.0.0 push "route 10.0.0.1" user nobody group nogroup client-config-dir ccd ccd-exclusive keepalive 10 120 comp-lzo persist-key persist-tun status openvpn-status.log
In /etc/openvpn/ccd
befindet sich eine Konfigurationsdatei pro Client, die exakt so heißen muß wie der CN im Zertifikat des Clients, also z.B. /etc/openvpn/ccd/vpn-client.freifunk-potsdam.de
:
ifconfig-push 10.0.1.2 10.0.1.1 push "route 10.0.0.0 255.255.0.0"
Client-Config
Die Clients werden alle identisch konfiguriert, wobei jeweils die Zertifikate in client.crt
individuelle CNs haben:
client dev tun proto udp remote vpn-server.freifunk-potsdam.de 33469 nobind persist-key persist-tun ca root.crt cert client.crt key vpn.key comp-lzo verb 3 mute 20
Routing / Firewall
Todo