

4. IPSec konfigurieren
Wie
schon bei den Verschlüsselungsarten möchte ich auch hier
wieder darauf hinweisen, dass das Kapitel 1 Einführung unbedingt gelesen werden sollte. In diesem
werden die in dieser Konfiguration benutzten Verbindungen und IP-Nummern
beschrieben.
Die Konfiguration erfolgt in den Dateien
/etc/ipsec.conf und
/etc/ipsec.secrets.
In der
ipsec.conf wird die
eigentliche Konfiguration vorgenommen und in
ipsec.secrets werden die
Informationen zu den Schlüsseln verwaltet - sie muß daher
Geheim bleiben (nur Lese- und Schreibzugriff für
root). Nach dem Start von
IPSec gibt es mindestens ein neues
Interface - das
ipsec0. Es
können bis zu vier angegeben werden. Dies bezieht sich jedoch nicht
auf die Anzahl der Verbindungen.
Der VPN-Gateway muß bei den angeschlossenen Rechnern als Gateway
eingetragen werden. Bei Aufbau einer Verbindung werden von
IPSec automatisch Routen anhand der
Informationen aus der
ipsec.conf
gesetzt.
In den folgenden Beschreibungen wird immer die Konfiguration der
Zentrale und die der
Zweigstelle beschrieben - bis auf
die
Roadwarrior-Verbindungen. Bei
diesen kann es sich als Gegenstelle um einen
Linux VPN-Gateway oder einen
Windows-Client mit dynamischer
IP-Nummer handeln. Die Beschreibung eines
Windows-Clients erfolgt
hier.
Anm.:
Viele der Parameter sind voneinander abhängig. Z.B. wenn man bei left die Variable %defaultroute benutzt muß
diese auch bei interface benutzt werden (statt "ipsec=ppp0"). Ich
selbst kenne nur ein paar wichtige Zusammenhänge, die ich hier nur
teilweise aufführe. Man sollte bei Verbindungsproblemen IMMER in
die /var/log/messages schauen
und die Meldungen überprüfen. Meist kann man anhand der
Fehlermeldungen sofort die richtigen Rückschlüsse ziehen.
4.1 Die Datei 'ipsec.conf'
In der Datei
/etc/ipsec.conf erfolgt eine
Basiskonfiguration (Abschnitt
config
setup) und die Definitionen der einzelnen VPN-Verbindungen
(Abschnitte
conn *name*). Der
Abschnitt
conn %default
enthält Defaultwerte für alle Verbindungen.
Ich beschreibe hier nur die wichtigsten Parameter. Detailinformationen
findet man in der Manualpage der
ipsec.conf
(
man ipsec.conf). Ein
Kommentar beginnt mit '#'. Allerdings
muß
der Kommentar den gleichen Einzug haben wie die Einträge (siehe
'config setup der Zentrale')! Weiterhin darf sich zwischen den einzelnen
Einträgen
keine Leerzeile
befinden - außer mindestens eine zum Abschluß.
4.1.1 Der Abschnitt config setup
In diesem Abschnitt wird die Basiskonfiguration von
IPSec vorgenommen.
config setup der Zentrale:
config setup
interfaces=%defaultroute
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
plutowait=no
plutobackgroundload=yes
uniqueids=no
config setup der
Zweigstelle:
config setup
interfaces="ipsec0=ppp0"
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
plutowait=no
plutobackgroundload=yes
uniqueids=no
Die wichtigsten benutzten Schlüsselwörter haben folgende
Bedeutung:
- interface: hier wird das zu verwendende Interface
angegeben. %defaultroute
bewirkt, dass das Interface
verwendet wird, auf das die Defaultroute zeigt. Man kann auch den Namen
des Interfaces angeben
(z.B. "ipsec0=ppp0"bei DSL
oder "ipsec0=ippp0" bei ISDN
oder "ipsec0=ppp0 ipsec1=ippp0" für zwei
Interfaces)
- klibsdebug: An- (All) oder Ausschalten (None) der Debuginformationen der
Kernelkomponente (funktionierte bei mir nicht!)
- plutodebug: An- (All) oder Ausschalten (None) der Debuginformationen der
Plutokomponente
- plutoload: none, conn-Name(n) oder %search; %search bewirkt dass alle
Verbindungen bei denen auto=start,
auto=add
oder auto=route
gesetzt ist in eine interne Datenbank von Pluto geladen werden; es
könnten auch die conn-Namen
angegeben werden
- plutostart: none,conn-Name(n) oder %search; welche Connections sollen
beim Start sofort verbunden werden;
bei %search werden die mit auto=start verbunden
- plutowait: OFFEN
- plutobackgroundload:
OFFEN
- uniqueids: yes oder no; bei no reicht eine
Connection-Beschreibung für alle mobilen Mitarbeiter (Roadwarrior) aus -
anderenfalls müsste für jeden Roadwarrioreine eigene Verbindungsbeschreibung
erstellt werden.
- manualstart: hier werden
die Connections angegeben die manuell
gestartet werden sollen (mit ipsec
manual) OFFEN
4.1.2 Die Connection-Abschnitte
(conn *name*)
In den
conn- (Connection) Abschnitten
werden die Einstellungen für jede einzelne VPN- Verbindung
definiert. Als Name kann eine einfache Kurzbezeichnung der Verbindung
benutzt werden (z.b.
conn n2n, oder
conn firma_home). Sie können in beliebiger Anzahl angelegt
werden. Die
conn %default
enthält Defaultwerte die für alle Verbindungen gelten, wenn
bei diesen nicht speziell ein anderer Wert definiert wurde.
Die Bezeichnungen
left und
right bezeichnen die jeweiligen
Knotenpunkte. Wobei
left meist
für den
lokalen und
right für den
remote Gateway benutzt werden. Bei
Gateway-to-Gateway-Verbindungen
muß sich in beiden
ipsec.conf-
Dateien ein Abschnitt mit dem gleichen Namen befinden - (fast) nur die
Einträge die mit
left und
right beginnen werden vertauscht.
Als Angaben können
IP-Adressen
oder auch die
Rechnernamen
verwendet werden. Bei der Verwendung von Rechnernamen muß
natürlich sichergestellt werden, daß sich diese Auflösen
lassen (
/etc/hosts).
Bei einer Connection mit
RSA-Verschlüsselung
wird bei den Parametern
leftid
und
rightid meist der
Fully-Qualified Domain Name (FQDN
- ermittelbar mit
hostname -f)
des Rechners beginnend mit einem @-Zeichen und bei
leftrsakey und
rightrsakey der jeweilige
Public Key der Gegenstelle
eingetragen (siehe auch
ipsec.secrets). Bei
Zertifikaten wird bei
leftid und
rightid der
Distinguished Name des Zertifikats
und bei
leftrsakey und
rightrsakey die Variable
%cert eingetragen.
4.1.2.1 conn
%default
Hier werden Einstellungen vorgenommen die für alle
conns gelten. Meist wird er benutzt
um die Daten des lokalen Gateways einzutragen - diese ändern sich
ja meist nicht. Standardmäßig benutzen wir hier
RSA-Verschlüsselung.
conn %default der Zentrale:
conn %default
keyingtries=0
authby=rsasig
left=erde
# oder left=193.158.2.160
#leftnexthop=
leftsubnet=192.168.0.0/24
leftid=@zentrale.rfsoft
leftrsasigkey=0sAQNCuX13UrH/CQAsJM/k058pA+4z+9aB0LgbK1nxZ9aaKQ...
# Zertifikate von Gegenstellen
rightrsasigkey=%cert
auto=add
conn %default der
Zweigstelle:
conn %default
keyingtries=0
authby=rsasig
left=mars
# oder left=238.195.2.100
leftnexthop=238.195.1.1
leftsubnet=192.168.1.0/24
leftid=@zweigstelle.rfsoft2
leftrsasigkey=0sAQPw2Dwc21EwObP/ROdqJpKpiTzY+dofMj3CmMZ80aeDkO...
# Zertifikate von Gegenstellen
rightrsasigkey=%cert
Die wichtigsten benutzten Schlüsselwörter haben folgende
Bedeutung:
- keyingtries: der Wert 0 bewirkt bei der
Neuverhandlung von Schlüsseln viel Geduld walten zu lassen
- authby: die
Authentifizierungsmethode OFFEN
- left: der lokale Gateway; entweder der Name, die IP-Nummer oder %defaultroute; %defaultroute darf natürlich
nicht bei right eingetragen
werden - man kennt die Defaultroute einer Gegenstelle ja garnicht
- leftnexthop: der nächste erreichbare
Gateway; wenn bei left nicht defaultroute verwendet wird
muß er mit
eingetragen werden;
- leftsubnet: die
Netzwerkmaske des lokalen Netzwerkes (hinter dem VPN-Gateway)
- leftid: der FQDN oder der Distinguished Name (siehe auch X.509-
Zertifikate)
- leftrsasigkey: die Art der Ausweisung; ein Public-RSA-Key oder %cert
für Zertifikate
- rightrsasigkey: wenn
Gegenstellen Zertifikate benutzen sollen, kann hier schon rightrsasigkey=%cert
eingetragen werden
- auto: add bedeutet, dass IPSec bei den
Verbindungen auf eine Anfrage der Clients wartet
Anm.:
Wenn bei left die Variable %defaultroute benutzt werden soll
dann muß diese auch bei interface
in der config setup benutzt werden!
4.1.2.2 conn
N2N (per RSA)
Dies ist eine Beispielkonfiguration
um eine Verbindung zwischen zwei den Firmennetzwerken aufzubauen. Da
beide Rechner Linux als Betriebssystem haben und ein sicherer
Schlüsselaustausch gewährleistet ist benutzen wir hier RSA.
conn N2N der Zentrale:
conn N2N
# Name
right=mars
# (oder right=238.195.2.100)
rightnexthop=238.195.1.1
rightsubnet=192.168.1.0/24
rightid=@zweigstelle.rfsoft2
rightrsasigkey=0sAQPw2Dwc21EwObP/ROdqJpKpiTzY+dofMj3CmMZ80aeDkO...
conn N2N der Zweigstelle:
conn N2N
# Name
right=erde
# (oder right=193.158.2.160)
#rightnexthop=
rightsubnet=192.168.0.0/24
rightid=@zentrale.rfsoft
rightrsasigkey=0sAQNCuX13UrH/CQAsJM/k058pA+4z+9aB0LgbK1nxZ9aaKQ...
auto=start
Die wichtigsten benutzten Schlüsselwörter haben folgende
Bedeutung:
- right: die Gegenstelle;
entweder der Name oder die IP-Nummer
- rightnexthop: Optional; der nächste
erreichbare Gateway
- rightsubnet: die
Netzwerkmaske des anderen Firmennetzwerkes
- rightid: der FQDN oder der Distinguished Name
- rightrsasigkey: ein Public-RSA-Keyoder%cert
für Zertifikate
- auto: start bedeutet, dass die Verbindung
beim Starten von IPSec aufgebaut werden soll
(siehe auch plutoload und plutostart in config
setup)
4.1.2.3 conn
N2NCert (per Zertifikat)
Dies ist eine Beispielkonfiguration
um eine Verbindung zwischen zwei den Firmennetzwerken aufzubauen. Da
beide Rechner Linux als Betriebssystem haben und ein sicherer
Schlüsselaustausch gewährleistet ist benutzen wir hier RSA.
conn N2NCert der Zentrale:
conn N2NCert
keyingtries=0
#
# Left
leftid="C=DE, L=Homburg, O=rf Software, OU=Zentrale, CN=Ralf Fehlmann"
leftrsasigkey=%cert
#leftupdown=/usr/lib/ipsec/_updown.x509
#
# Right
right=mars
rightsubnet=192.168.1.0/24
rightid="C=DE, L=Homburg, O=rf Software, OU=Mobil, CN=Dirk Bender"
rightrsasigkey=%cert
conn N2NCert der
Zweigstelle:
conn N2NCert
keyingtries=0
#
# Left
leftid="C=DE, L=Homburg, O=rf Software, OU=Mobil, CN=Dirk Bender"
leftrsasigkey=%cert
leftcert=ZweigstelleCert.pem
#
# Right
right=erde
rightsubnet=192.168.0.0/24
#rightid="C=DE, L=Homburg, O=rf Software, OU=Zentrale, CN=Ralf Fehlmann"
rightrsasigkey=%cert
rightcert=ZentraleCert.pem
#
auto=start
Die wichtigsten benutzten Schlüsselwörter haben folgende
Bedeutung:
- right: die Gegenstelle;
entweder der Name oder die IP-Nummer
- rightnexthop: Optional; der nächste
erreichbare Gateway
- rightsubnet: die
Netzwerkmaske des anderen Firmennetzwerkes
- rightid: der FQDN oder der Distinguished Name
- rightrsasigkey: ein Public-RSA-Keyoder%cert
für Zertifikate
- auto: start bedeutet, dass die Verbindung
beim Starten von IPSec aufgebaut werden soll
(siehe auch plutoload und plutostart in config
setup)
4.1.2.4 conn
G2G (per RSA) OFFEN
Dies ist eine Beispielkonfiguration
die meist nur für Administrative Zwecke benötigt wird. Sie
verbindet zwei VPN-Gateways miteinander. Ein Zugriff auf das Firmennetz
ist nicht möglich. Hier wird keine Subnetmaske definiert.
conn G2G der Zentrale:
conn G2G
leftsubnet=erde/32
# oder
# leftsubnet=193.158.2.160/32
right=mars
#rightnexthop=
rightsubnet=mars/32
rightid="C=DE, O=rf Software GmbH, OU=Zweigstelle, CN=meier@rf-software.de"
rightrsasigkey=%cert
auto=ignore
conn G2G der Zweigstelle:
conn G2G
leftsubnet=mars/32
# oder
# leftsubnet=238.195.2.100/32
right=erde
#rightnexthop=
rightsubnet=erde/32
rightid="C=DE, O=rf Software GmbH, OU=Zentrale, CN=zentrale@rf-software.de"
rightrsasigkey=%cert
auto=ignore
Die wichtigsten benutzten Schlüsselwörter haben folgende
Bedeutung:
- leftsubnet: hier wird
der Defaultwert überschrieben und als Subnet nur die Adresse des
Gateways angegeben
- right: die Gegenstelle;
entweder der Name oder die IP-Nummer
- rightnexthop: Optional; der nächste
erreichbare Gateway
- rightsubnet: wie leftsubnet - nur für remote
- rightid: die
Authentifizierung/ Identität bzw. der Bezeichner des Zertifikats
(OFFEN)
- rightrsasigkey: die Art der Ausweisung; %cert
für Zertifikate oder ein RSA-Key,
der dann auf beiden Seiten eingetragen werden muß
- auto: ignore bedeutet, dass die Verbindung
manuell aufgebaut werden soll (siehe auch plutoload und plutostart in config
setup)
4.1.2.5 conn
Roadwarrior (per Zertifikat)
Dies ist eine Beispielkonfiguration
um Roadwarriorn eine Verbindung
zum Firmennetzwerk zu ermöglichen. Da diese Windows 2000 als
Betriebssystem haben müssen wir hier ein Zertifikat benutzen.
OFFEN testen
conn Roadwarrior der
Zentrale:
conn Roadwarrior
#
leftrsasigkey=%cert
leftcert=RoadwarriorCert.pem
#
# Right
right=%any
rightrsasigkey=%cert
rightid="C=DE, L=Homburg, O=rf Software, OU=Notebook, CN=Dirk Bender"
rightcert=RoadwarriorCert.pem
#
pfs=yes
Die wichtigsten benutzten Schlüsselwörter haben folgende
Bedeutung:
- right: Da diese
Verbindung für mehrere Roadwarrios
benutzt wird kann kein Name oder eine IP angegeben werden;
hier wird die Variable %any
benutzt
- rightid: hier der Distinguished Name
- rightrsasigkey: %cert für Zertifikate
- auto: add bewirkt dass die Verbindung erst
bei Anfrage des Roadwarrios
aufgebaut wird
4.2 Die Datei 'ipsec.secrets'
In der Datei
ipsec.secrets werden die
Private Keys und
Zertifikate eingetragen. Diese Datei
darf daher nur von
root les-
und änderbar sein (
chmod 600
ipsec.secrets)! Es können mehrere Schlüssel und
Zertifikate eingetragen werden. Wie auch bei der
ipsec.conf muß hier ebenfalls
eine gewisse Formatierung eingehalten werden.
Ein Eintrag beginnt mit '
: RSA'
(wichtig ist mindestens eine Leerstelle zwischen dem Doppelpunkt und
RSA). Falls man mehrere Einträge (bzw.
Private Keys oder
Zertifikate)
benutzt, muß man
vor dem Doppelpunkt noch einen
Bezeichner oder
IP-Nummern eintragen. Als Bezeichner
benutzt man hierfür bei
Private
Keys den
FQDN und bei
Zertifikaten den entsprechenden Namen, jeweils beginnend mit einem '@'.
Der hier eingetragene Bezeichner muß
mit der benutzten leftid
identisch sein! Für IP-Nummern werden die Nummern von
left und
right hintereinander eingetragen.
Für
Roadwarrior kann auch
die '0.0.0.0' eingetragen werden.
Anm.: Wenn kein Bezeichner bzw. IP
benutzt wird und mehrere Einträge vorhanden sind benutzt IPSec den ersten Eintrag.
OFFEN: auch bei Zertifikaten?
# Bezeichner
@zentrale.rfsoft: RSA {...
# IPs
193.158.2.160 238.195.2.100 : RSA ...
# Roadwarrior
193.158.2.160 0.0.0.0 : RSA ...
4.2.1 RSA
Wenn man die
RSA-Verschlüsselung benutzt
wird der erstellte
Private Key
in die
ipsec.secrets
eingetragen (siehe auch
RSA
generieren). Der Eintrag des Schlüssels beginnt und
endet mit geschweiften Klammern. Die erste Klammer befindet sich, mit
Leerstelle oder
Tabulator getrennt, hinter dem
Eintrag '
: RSA' und die letzte
steht in einer eigenen Zeile. Der letzten muß eine
Leerstelle oder ein
Tabulator vorrangehen. Der
Schlüssel selbst muß mit
Tab
eingerückt werden.
@zentrale.rfsoft: RSA {
# RSA 1024 bits server Sat Jun 28 11:27:41 2003
# for signatures only, UNSAFE FOR ENCRYPTION
#pubkey=0sAQPw2Dwc21EwObP/ROdqJpKpiTzY+dofMj3CmMZ80aeDkO...
#IN KEY 0x4200 4 1 AQPw2Dwc21EwObP/ROdqJpKpiTzY+dofMj3Cm...
# (0x4200 = auth-only host-level, 4 = IPSec, 1 = RSA)
Modulus: 0xf0d83c1cdb513039b3ff44e76a2692a9893cd8f9da1f3...
PublicExponent: 0x03
# everything after this point is secret
PrivateExponent: 0x28240a04cf3832b448aa8b7be7066dc6ec34c...
Prime1: 0xfc561fe98e02f4230cebf6b27915a92a1943f659e740e1...
Prime2: 0xf45765e2ab6bcef6ac64415fca0e66ea805ca34ec78cd0...
Exponent1: 0xa8396a9bb401f8175df2a476fb63c61c10d7f99144d...
Exponent2: 0xa2e4ee971cf289f9c842d63fdc0999f1aae86cdf2fb...
Coefficient: 0x926239dbc46303f8af89b2168945b5485efc4630c...
}
In diesem Beispiel habe ich den Schlüssel wegen der Lesbarkeit ein
wenig gekürzt.
4.2.2 X.509-Zertifikat
Bei Zertifikaten wird nur der Name und, wenn nötig, die Passphrase eingetragen. Nach einem
Eintrag ist eine abschließende Leerzeile
wichtig!
193.158.2.160 0.0.0.0 : RSA ZweigstelleKey.pem "Passphrase"
LEERZEILE
4.3 Ein Windows-VPN-Client
OFFEN Als Windows-Clients beschreibe
ich hier nur einen Zugang mit
Windows
2000 Professional. Nur
Windows
2000 und XP besitzen von Haus aus die Möglichkeit eine
VPN-Verbindung aufzubauen
. Bei
XP
dürfte die Konfiguration ähnlich wie bei
2000 sein. Ältere
Windows-Versionen können dies (zumindest ohne Fremdsoftware) nicht.
Das Zertifikat wurde bereits wie hier beschrieben übermittelt und
importiert.
VPN-Verbindung einrichten (es mußschon eine
DFÜ-Verbindung zu einem Provider vorhanden sein!):
OFFEN
Hier gibt es ein Tool um die Verbindung herzustellen. Allerdings habe
ich damit noch keine Verbindung hinbekommen. Da ich nicht unbedingt
eine benötige war ich auch noch zu faul zum Stundenlangen
rumspielen. DAHER: Tips willkommen.
4.4 IPSec starten
Der Start von IPSec ist abhängig von der
jeweiligen Onlineverbindung. Je nachdem ob man eine feste IP und
ständige Onlineverbindung (keine
Flatrate!) oder eine dynamische IP (Einwahl per Provider - auch
Flatrate) besitzt ändert sich die Vorgehensweise. Bei fester IP
kann IPSec im jeweiligen
Runlevel (meistens 3 und 5) nach
dem Verbindungsaufbau gestartet werden. Bei dynamischer IP sollte IPSec per Script gestartet werden
Der manuelle Start kann mit folgender Befehlzeile ausgeführt
werden (evtl. je nach Distribution andere Verzeichnisangaben):

