Inhalt

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:

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:
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:

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:

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:

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:

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!):

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):
/etc/init.d/ipsec start


Inhalt