HowTo im pdf-Format
Danny Heyn,
2002, 2003
Version 0.1.1
Ergänzungen
/ Änderungen bitte an ipsec@shinewelt.de
Voraussetzungen:
für die
Linux-Seite:
gcc
make
openssl
Kernel-Sourcen
Kernel selber kompilieren
können (und auch schon einmal selber kompiliert haben, sonst
meckert IPSEC ein wenig rum... :-)
für Windows 2000
Service Pack 2
Ipsec_Pol (Link s.u.)
für Windows 2000 /
Windows XP
Windows-IPSEC-Tool von
Marcus Müller
Links:
http://www.freeSwan.org
- Ipsec
http://www.strongsec.com/freeswan/
- x509-Patch für FreeSwan
http://agent.microsoft.com/windows2000/techinfo/reskit/tools/existing/ipsecpol-o.asp
– Ipsec_Pol für W2k
http://vpn.ebootis.de/package.zip
– Ipsec-Tool von Marcus Müller
# Neues Verzeichnis
anlegen und reinwechseln.
cd
/tmp && mkdir freeswan && cd freeswan
# Entpacken
tar
-zxvf freeswan_198btar.gz
tar
-zxvf x509patch_0914_freeswan_198b.gz
# Patchen
patch
-p0 <./x509patch-0.9.14-freeswan-1.98b/freeswan.diff
# FreeSwan kompilieren und
installieren
cd
/tmp/freeswan/freeswan-1.98b/
make
oldgo
Nun wird als erstes Ipsec
kompiliert. Sollte die gmp.h fehlen muss die libgmp (je nach
Distribution auch die Entwicklungsmodule) installiert werden. Ähnlich
ist bei einer fehlenden pcap.h zu verfahren – hier feht die
libpcap bzw. viel mehr deren includes. Durch den x509 Patch gibt es
extrem viele Warnings, die man in der Regel aber nicht beachten muss.
Während der Kernel
und die Module kompiliert werden, kann man bereits die Zertifikate
erstellen:
Zu allererst sollte man
für das Root-Zertifikat (unsere Certificate Authority, die
Zertifikate ausgibt) die Gültigkeitsdauer des Zertifikats
hochsetzen. Hierzu muss man in der openssl.cnf default_days = 365 auf
3650 erhöhen. (Angaben zum Pfad kann ich nicht machen, ist mal
wieder je nach Distribution unterschiedlich). Weiterhin setzen wir
hier default_bits auf 2048.
Nun sollte man ein
Verzeichnis anlegen und ein chmod auf 700 vornehmen, damit die
Sicherheit, wie sie gewünscht wird, auch bleibt – was
bringt es, wenn wir einen Zugang zu unserem Netz mit einem Zertifikat
absichern, das jeder User auf unserem System lesen kann.
mkdir
/etc/ssl/ipsec && chmod 700 /etc/ssl/ipsec && cd
/etc/ssl/ipsec
Nun wird die RootCA
erstellt: (auch hier ist der Pfad zur CA.sh wieder je nach
Distribution unterschiedlich. - locate ist Dein Freund) – alle
Eingaben von mir sind blau und kursiv dargestellt.
sh /usr/lib/ssl/misc/CA.sh -newca
CA
certificate filename (or enter to create) [ENTER]
Making
CA certificate ...
Using
configuration from /usr/lib/ssl/openssl.cnf
Generating
a 2048 bit RSA private key
............................+++
..................................................+++
writing
new private key to './demoCA/private/./cakey.pem'
Enter
PEM pass phrase: geheim
Verifying
password - Enter PEM pass phrase: geheim
-----
You
are about to be asked to enter information that will be incorporated
into
your certificate request.
What
you are about to enter is what is called a Distinguished Name or a
DN.
There
are quite a few fields but you can leave some blank
For
some fields there will be a default value,
If
you enter '.', the field will be left blank.
-----
Country
Name (2 letter code) [AU]:DE
State
or Province Name (full name) [Some-State]:Schleswig-Holstein
Locality
Name (eg, city) []:Henstedt-Ulzburg
Organization
Name (eg, company) [Internet Widgits Pty Ltd]:shinewelt.de
Organizational
Unit Name (eg, section) []:Shining-CA
Common
Name (eg, YOUR name) []:Danny Heyn
Email
Address []:RootCA@shinewelt.de
Dieses Zertifikat muss
auch noch ins x509-Format gewandelt und am richtigen Platz
installiert werden:
openssl
x509 -in demoCA/cacert.pem -outform DER -out
/etc/ipsec.d/cacerts/RootCA.der
Nun muss das Zertifikat
für das Linux-Gateway erstellt werden:
Als erstes ein Request:
sh
/usr/lib/ssl/misc/CA.sh -newreq
die Eingaben werden wie
schon beim CA gemacht – nur halt für das Gateway, also
nach Belieben mit anderen Eingaben, aber das Prinzip bleibt gleich.
Nach der Eingabe der eMail-Adresse wird noch ein Challenge-Passwort
und ein optionaler Firmenname abgefragt, beide Felder lassen wir
einfach leer:
Please
enter the following 'extra' attributes
to
be sent with your certificate request
A
challenge password []:
An
optional company name []:
Request
(and private key) is in newreq.pem
Nun muss dieser Request
von unserer CA „unterschrieben“ werden. Dies geschieht
mit
sh
/usr/lib/ssl/misc/CA.sh -sign
Using
configuration from /usr/lib/ssl/openssl.cnf
Enter
PEM pass phrase: geheim (Passwort
der CA von vorhin)
Check
that the request matches the signature
Signature
ok
The
Subjects Distinguished Name is as follows
countryName
:PRINTABLE:'DE'
stateOrProvinceName
:PRINTABLE:'Schlewswig-Holstein'
localityName
:PRINTABLE:'Henstedt-Ulzburg'
organizationName
:PRINTABLE:'shinewelt'
organizationalUnitName:PRINTABLE:'Shining-Gate'
commonName
:PRINTABLE:'Danny Heyn'
emailAddress
:IA5STRING:'dh-gatecert@shinewelt.de'
Certificate
is to be certified until Aug 26 21:59:49 2012 GMT (3650 days)
Sign
the certificate? [y/n]:y
1
out of 1 certificate requests certified, commit? [y/n]:y
#
Ausgabe gesnipped
Signed
certificate is in newcert.pem
Jetzt sollten newreq.pem
und newcert.pem einen sinnvollen Dateinamen erhalten, damit man
nachher nichts durcheinanderbringt.
osiris:/etc/ssl/ipsec#
mv newcert.pem gatecert.pem
osiris:/etc/ssl/ipsec#
mv newreq.pem gatekey.key
In der Datei gatekey.key
muss nun noch der Certicate Request gelöscht werden, dafür
editiert man die Datei und löscht alles nach -----END RSA
PRIVATE KEY-----
Das Gateway-Zertifikat
muss noch in das x509 Format gewandelt werden, und dabei gleich an
den richtigen Platz installiert werden:
openssl
x509 -in gatecert.pem -outform der -out /etc/x509cert.der
Nun erzeugen wir das
Zertifikate für unseren Windows-Roadwarrior:
Eigentlich das selbe
Prozedere wie bei der Erzeugung der Gateway-Zertifikate:
Request erzeugen:
sh
/usr/lib/ssl/misc/CA.sh -newreq
Ausgaben / Eingaben
gesnipped – siehe oben.
Nun den Request signen:
sh
/usr/lib/ssl/misc/CA.sh -sign
Die beiden neuen Dateien
bennennen wir der Übersicht halber auch noch einmal um:
mv
newreq.pem roadwarrior.key
mv
newcert.pem roadwarriorcert.pem
Damit Windows 2000 etwas
mit den Zertifikaten anfangen kann, müssen wir es noch in das
PKCS#12 – Format bringen:
openssl
pkcs12 -export -in roadwarriorcert.pem -inkey roadwarrior.key
-certfile demoCA/cacert.pem -out W2000.p12
Enter
PEM pass phrase: geheim
Enter
Export Password: geheim (wird auf der
Windows-Seite zum Import gebraucht)
Verifying
password - Enter Export Password: geheim
Als nächstes muss
eine Certificate revocation list erstellt werden:
openssl
ca -gencrl -out crl.pem
Nun, da alle Zertifikate
erfolgreich erstellt worden sind, fangen wir an sie an sinnvolle Orte
zu verteilen:
cp
gatekey.key /etc/ipsec.d/private/
cp
gatecert.pem /etc/ipsec.d/
cp
roadwarriorcert.pem /etc/ipsec.d/
cp
crl.pem /etc/ipsec.d/crls/
Das W2000.p12 muss einen
sicheren Weg zum Windows-Roadwarrior finden (Diskette / scp / CDRW –
wie auch immer).
Nun können wir schon
anfangen, die ipsec-Konfiguration zu beginnen:
Die /etc/ipsec.secrets
besteht nur aus einer Zeile:
:
RSA gatekey.key "geheim"
Hier ist darauf zu achten, dass nach dieser Zeile ein Linebreak
gemacht wird.
Die /etc/ipsec.conf ist
ein wenig umfangreicher:
config
setup
interfaces="ipsec0=eth0"
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
uniqueids=yes
conn
%default
keyingtries=1
compress=yes
disablearrivalcheck=no
authby=rsasig
leftrsasigkey=%cert
rightrsasigkey=%cert
conn
roadwarrior
right=%any
left=193.168.23.1
leftcert=gatecert.pem
rightid="C=DE, ST=Schlewswig-Holstein,
L=Henstedt-Ulzburg, O=shinewelt, OU=Shining-Gate, CN=Danny Heyn,
E=dh-gatecert@shinewelt.de"
auto=add
pfs=yes
Die Rightid bekommt man
folgendermassen raus:
openssl
x509 -in gatecert.pem -noout -subject
subject=
/C=DE/ST=Schlewswig-Holstein/L=Henstedt-Ulzburg/O=shinewelt/OU=Shining-Gate/CN=Danny
Heyn/Email=dh-gatecert@shinewelt.de
Wobei das ganze noch so
umformatiert werden muss, dass es aussieht wie in meiner
Beispielkonfiguration – also die / raus, dafür Kommas rein
und das Subject rausstreichen.
Auf der Linuxseite kann
man nun mit
ipsec
setup –start
Ipsec starten –
eigentlich sollte dies reibungslos ablaufen:
osiris:/#
ipsec setup --start
ipsec_setup:
Starting FreeS/WAN IPsec 1.98b...
ipsec_setup:
Using /lib/modules/2.4.19/kernel/net/ipsec/ipsec.o
osiris:/#
Nun kommen wir zur
Windows-Seite:
Microsofts
ipsecpol_setup.exe ausführen und nach C:\Programme\ipsec
installieren. In den selben Ordner das package.zip von Marcus Müller
auspacken.
Nun wechselt man in den
Ordner und führt die ipsec.msc aus. Hier klickt man sich über
Zertifikate auf den „Ordner“ Eigene Zertifikate. Hier
einen Rechtsklick, dann „Alle Tasks“ - „Importieren“.

Im Assistenten erst auf
Weiter klicken und dann den Dateinamen des Zertifikates angeben (Das
w2000.p12 – Ihr erinnert Euch? Liegt auf der Diskette :-). Dann
wieder auf Weiter und das Export-Passwort von vorhin angeben. Jetzt,
sehr wichtig, Windos den Zertifikatsspeicher automatisch auswählen
lassen. (Zertifikatsspeicher automatisch auswählen (auf dem
Zertifikatstyp basierend) anklicken) – Weiter – Fertig
stellen.
Wunderbar – Windows
hat unser Zertifikat gefressen. Nun der Endspurt: die
Windows-Konfiguration. Im OrdnerC:\programme\ipsec
findet sich die Datei ipsec.conf, deren Syntax der
Linux-Konfiguration doch ziemlich ähnlich sind. Hier meine, die
Ihr einfach nur anpassen müsst:
conn
roadwarrior
left=%any
right=193.168.23.1
rightca="C=DE,S=Schleswig-Holstein,L=Henstedt-Ulzburg,O=shinewelt,OU=Shining-CA,CN=Danny
Heyn,E=RootCA@shinewelt.de"
network=auto
auto=start
pfs=yes
Den Inhalt des Feldes
rightca bekommt man heraus, in dem man
openssl
x509 -in ./demoCA/cacert.pem -noout -subject
ausführt.
subject=
/C=DE/ST=Schleswig-Holstein/L=Henstedt-Ulzburg/O=shinewelt/OU=Shining-CA/CN=Danny
Heyn/Email=RootCA@shinewelt.de
Die Ausgabe muss man dann
noch Windows-konform umbauen, d.h. z.B. ST in S umbenennen und die
Slashes durch Kommata ersetzen.
Damit ist die
Windows-Seite auch durchkonfiguriert der Tunnel wird gestartet durch:
Start/Ausführen/cmd
cd
\programme\ipsec
C:\Programme\ipsec>ipsec
IPSec
Version 2.1.4 (c) 2001,2002 Marcus Mueller
Getting
running Config ...
Microsoft's
Windows 2000 identified
Host
name is: ramses
No
RAS connections found.
LAN
IP address: 192.168.23.254
Setting
up IPSec ...
Deactivating old policy...
Removing old policy...
Connection
roadwarrior:
MyTunnel : 192.168.23.254
MyNet : 192.168.23.254/255.255.255.255
PartnerTunnel: 192.168.23.1
PartnerNet : 192.168.23.1/255.255.255.255
CA (ID) :
C=DE,S=Schleswig-Holstein,L=Henstedt-Uluzburg,O=shi..
PFS : y
Auto : start
Auth.Mode : MD5
Rekeying : 3600S/50000K
Activating policy...
Der Tunnel ist nun
hochgefahren, aktivieren muss man ihn, indem man Traffic auf dem Netz
erzeugt:
C:\Programme\ipsec>
ping 192.168.23.1
Ping
wird ausgeführt für 193.168.34.1 mit 32 Bytes Daten:
IP-Sicherheit
wird verhandelt.
IP-Sicherheit
wird verhandelt.
IP-Sicherheit
wird verhandelt.
IP-Sicherheit
wird verhandelt.
Ping-Statistik
für 193.168.23.1:
Pakete: Gesendet = 4, Empfangen = 0, Verloren = 4 (100% Verlust),
Ca.
Zeitangaben in Millisek.:
Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms
Hiernach
sollte der Tunnel aufgebaut sein, was ein zweiter Ping zeigt:
Ping
wird ausgeführt für 193.168.0.2 mit 32 Bytes Daten:
Antwort
von 193.168.0.2: Bytes=32 Zeit<10ms TTL=255
Antwort
von 193.168.0.2: Bytes=32 Zeit<10ms TTL=255
Antwort
von 193.168.0.2: Bytes=32 Zeit<10ms TTL=255
Antwort
von 193.168.0.2: Bytes=32 Zeit<10ms TTL=255
Ping-Statistik
für 193.168.0.2:
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust),
Ca.
Zeitangaben in Millisek.:
Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms
|