Windows 2000 IPSEC Roadwarrior mit FreeSWAN

Kontakt: Danny Heyn



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



zurück
Fruehstuecksfleischfalle