Der Mensch hat zwei Beine und zwei Überzeugungen:
eine, wenns ihm gut geht, und eine,
wenns ihm schlecht geht. Die letztere heißt Religion.
- Kurt Tucholsky
IPsec wurde dazu entwickelt, um schwaechen des Internetprotokolls IP zu beheben. Es stellt somit grob gesagt eine sichere Verbindung von einem Punkt zum anderen her. Das interessante ist hierbei, dass es im OSI-Schichtmodell eine Schicht vor den meisten anderen Verschluesselungsprotokollen greift. Falls es euch genauer interessiert, koennt ihr es unter http://de.wikipedia.org/wiki/Ipsec nachlesen.
Ein VPN (Virtual Private Network) ist ein Netzwerk, welches durch ein oeffentliches Netz eine Verbindung zu einem zweiten Netzwerk aufbaut um private Daten zu uebertragen. Das schoene hierbei ist, dass es sich um eine sichere Verbindung ueber eine unsichere handelt. Ein kleines Beispiel: Ihr seid unterwegs mit eurem Laptop und zu Hause in eurem Netzwerk habt ihr Daten die ihr unbedingt braucht. Wenn ihr nun ein VPN ueber das Internet zu eurem Netzwerk zu Hause aufbaut, ist es nicht nur sicher, sondern ihr koennt Daten austauschen, als ob ihr zu Hause im Netzwerk angeschlossen seid. Falls ihr wieder genaueres wissen wollt, koennt ihr hier weiter lesen. Hier sei noch schnell angemerkt, dass es mehrere Wege gibt ein VPN einzurichten. Der hier erklaerte Weg ist nur einer von vielen.
Da ich auf den verwendeten Computern Debian Etch benutzt habe, ist dieses Tutorial auch dafuer geschrieben. Es sollte allerdings kein Problem darstellen, dieses fuer andere Distributionen bzw Betriebssystem (da OpenSwanOS uebergreifend ist) zu uebernehmen. Fuer einen lokalen Test hatte ich auch einmal OpenSuse 10.2 als Distribution im Einsatz, mit dieser hat alles genau so gut geklappt (Dateien waren an der gleichen stellen usw). Zum einfachen Verstaendnis wird ein Computer CLIENT und der andere SERVER genannt.
Folgendes wird benoetigt:
* OpenSwan muss auf beiden Computern installiert sein um das VPN aufzubauen
* IPsec-Tools muss auf beiden Computern installiert sein um IPsec zu nutzen
* eine funktionierende Verbindung zwischen den Computern
* ein wenig Kreativitaet und Eigenintelligenz (und ein wenig Erfahrung mit Linux)
Diese Angaben habe ich aus dem Wiki von OpenSwan.
Um den IPsec-traffic durch eine Firewall zu leiten, muesst ihr die Folgenden Ports/Protokolle in beide Richtungen durchlassen:
Protokoll 50 ESP *
Protokoll 51 AH (Optional) *
UDP Port 500 IKE *
UDP Port 4500 (falls ihr NAT-Traversal nutzt (nat_traversal=yes) um den Traffic durch NAT/Firewalls zu tunneln) *
Wenn ihr dies getan habt, muesste sich aufgrund der Abhaengigkeiten auch IPsec-Tools mitinstalliert haben. Falls ihr noch genauer etwas nachlesen wollt oder andere Tutorials noch zusaetzlich zu rate ziehen wollt, so lege ich euch das Wiki von OpenSwan ans Herz.
RSA Signatur Key
Nun schaut ihr als aller erstes nach, ob der Computer CLIENT auch schon einen RSA-Key fuer die Signatur besitzt.
IPsec konfigurieren
Nun muesst ihr die Datei /etc/ipsec.conf bearbeiten. Dazu nehmt ihr einen Editor eurer Wahl. Hier ist die Konfigurationsdatei fuer den Computer CLIENT:
Dieses alleine in der Datei /etc/ipsec.conf sollte genuegen um eine VPN-Verbindung aufzubauen. Zur Erklaerung:
nat_traversal=yes ist bei Debian Etch in der Konfigurationsdatei sofort bei der Installation eingetragen gewesen und kann auch hier stehen bleiben. Dieses ist eigentlich fuer die Benutzung hinter einem/einer NAT/Firewall gedacht, kann aber genau so gut auch hier verwendet werden. Genauere Angaben zu diesem und allen anderen Parametern entnehmt ihr bitte dem Manual zu ipsec.conf (man ipsec.conf).
nhelpers=0 ist bei Debian Etch in der Konfigurationsdatei sofort bei der Installation eingetragen gewesen.
left=192.168.0.13 ist die IP-Adresse unseres Computer CLIENT.
leftrsasigkey=0sAQN1OLJR+JlGQEAqi[...] ist der RSA-Key unseres Computer CLIENT.
right=192.168.0.7 ist die IP-Adresse unseres Computer SERVER.
rightrsasigkey=0sAQNnk1RUApI0m1DnL[...] ist der RSA-Key unseres Computer SERVER.
auto=add autorisiert aber startet die Verbindung nicht beim starten von IPsec.
Nun muesste es reichen, wenn ihr genau das Gleiche in die Datei /etc/ipsec.conf von dem Computer SERVER eintragt. Dann startet ihr einmal auf beiden Computern OpenSwan neu (/etc/init.d/ipsec restart).
starten der VPN-Verbindung
Auf dem Computer CLIENT solltet ihr nun dieses hier eintippen:
CLIENT:/home/Tux# ipsec auto --up test-lokal
Ihr solltet eine Ausgabe wie folgt erhalten:
104 "test-lokal" #1: STATE_MAIN_I1: initiate
003 "test-lokal" #1: ignoring unknown Vendor ID payload [4f454e7c454d716b5f4d6c67]
003 "test-lokal" #1: received Vendor ID payload [Dead Peer Detection]
003 "test-lokal" #1: received Vendor ID payload [RFC 3947] method set to=110
106 "test-lokal" #1: STATE_MAIN_I2: sent MI2, expecting MR2
003 "test-lokal" #1: NAT-Traversal: Result using 3: no NAT detected
108 "test-lokal" #1: STATE_MAIN_I3: sent MI3, expecting MR3
004 "test-lokal" #1: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_RSA_SIG cipher=oakley_3des_cbc_192 prf=oakley_md5 group=modp1536}
117 "test-lokal" #2: STATE_QUICK_I1: initiate
004 "test-lokal" #2: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0x57e688bf <0x648bbe7d xfrm=AES_0-HMAC_SHA1 NATD=none DPD=none}
Allgemein
So, von hier an gehen wir davon aus, dass der Computer SERVER an einem entfernten Ort steht und der Computer CLIENT durch das Internet ein VPN aufbauen soll. Der Netzwerkaufbau sieht wie folgt aus:
Zu beachten ist hier, dass wir die Ports unbedingt im Router freigeben muessen, damit die Verbindung zu stande kommt. Da unser Computer CLIENT in einem Netzwerk ist, dessen WAN-IP sich andauernt aendert, nutzen wir hier einfach eine dynamische DNS (ein Anbieter davon ist z.B. dyndns.com).
Wichtig hierbei ist, dass in dem Abschnitt config setup der Eintrag nat_traversal=yes steht, da wir durch den Router tunneln muessen. Hier die Erklaerungen der noch nicht bekannten Konfigurationen:
leftnexthop=%defaultroute ist das naechste Gateway auf dem Weg zu dem Computer SERVER. Als default steht dort %direct, also direkt zu dem Computer SERVER, da CLIENT aber hinter einem Router ist, muss dieser als erstes Gateway passiert werden. %defaultroute koennen wir nehmen, da OpenSwan dann die Konfiguration unseres OS nutzt.
leftsubnet=192.168.0.0/24 ist das Netzwerk hinterdem sich unser Computer CLIENT versteckt. Hier wird das Netzwerk und die Subnetmask angegeben.
leftid=@CLIENT.dyndns.org gibt an, wie sich unsere linke Seite (also der Computer CLIENT) identifizieren soll bei der Authentifizierung.
rightid=@SERVER.de das gleiche fuer die rechte Seite (also der Computer SERVER).
Die Datei /etc/ipsec.conf auf dem Computer SERVER sieht nun ein wenig anders aus.
Auch hier ist wichtig, dass in dem Abschnitt config setup der Eintrag nat_traversal=yes steht, da wir durch den Router bei dem Computer CLIENT tunneln muessen.
starten der VPN-Verbindung
Auf dem Computer CLIENT solltet ihr nun dieses hier eintippen:
CLIENT:/home/Tux# ipsec auto --up test-remote
Wenn der Verbindungsaufbau erfolgreich war, solltet ihr soetwas hier sehen:
104 "test-h4des" #1: STATE_MAIN_I1: initiate
003 "test-h4des" #1: received Vendor ID payload [Openswan (this version) 2.4.6 X.509-1.5.4 LDAP_V3 PLUTO_SENDS_VENDORID PLUTO_USES_KEYRR]
003 "test-h4des" #1: received Vendor ID payload [Dead Peer Detection]
003 "test-h4des" #1: received Vendor ID payload [RFC 3947] method set to=110
106 "test-h4des" #1: STATE_MAIN_I2: sent MI2, expecting MR2
003 "test-h4des" #1: NAT-Traversal: Result using 3: i am NATed
108 "test-h4des" #1: STATE_MAIN_I3: sent MI3, expecting MR3
004 "test-h4des" #1: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_RSA_SIG cipher=oakley_3des_cbc_192 prf=oakley_md5 group=modp1536}
117 "test-h4des" #2: STATE_QUICK_I1: initiate
004 "test-h4des" #2: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0xb6f62289 <0x1d74a9f4 xfrm=AES_0-HMAC_SHA1 NATD=84.16.252.218:4500 DPD=none}
Nun koennt ihr einmal einen PING Versuch von dem Computer SERVER zu dem Computer CLIENT versuchen.
TUX@SERVER:~$ ping 192.168.0.13 -c4
PING 192.168.0.13 (192.168.0.13) 56(84) bytes of data.
64 bytes from 192.168.0.13: icmp_seq=1 ttl=64 time=28.3 ms
64 bytes from 192.168.0.13: icmp_seq=2 ttl=64 time=24.9 ms
64 bytes from 192.168.0.13: icmp_seq=3 ttl=64 time=25.3 ms
64 bytes from 192.168.0.13: icmp_seq=4 ttl=64 time=25.1 ms
--- 192.168.0.13 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 24.989/25.947/28.379/1.408 ms
Sehr gut, nun seht ihr, dass ihr den Computer CLIENT von dem Computer SERVER durch eine "lokale" IP-Adresse erreicht. Der VPN-Verbindungsaufbau war erfolgreich. Andersherum geschieht nun alles was mit dem Computer SERVER und der IP xxx.xxx.xxx.xxx zu tun hat durch den VPN-Tunnel. Ihr habt nun eine sichere Verbindung durch das Internet.