Stunnel
Baustelle: Dieser Artikel ist eine Baustelle. Das heißt, jemand hat sich dieses Artikels angenommen und überarbeitet ihn gerade. |
Die Anwendung stunnel ist ein Wrapper der zwei Programmen verschlüsselte Kommunikation erlaubt, selbst wenn dies in den Programmen nicht vorgesehen ist. In diesem Artikel soll dieses anhand der Authentifizierung von Dokuwiki gegen tinyldap beschrieben werden. Dabei soll zum einen das System auf dem das Wiki betrieben wird als Client und das System auf dem der LDAP-Server läuft als Server bezeichnet werden. Zum anderen soll in diesem Artikel ausschließlich die Konfiguration von stunnel beschrieben werden, die Einstellungen von dokuwiki zur Authentifizierung gegen LDAP können aus diesem Artikel entnommen werden.
Grundidee
Die Idee besteht nun darin, dass die Anwendungen nicht direkt miteinander kommunizieren sondern nur noch mittels eines Wrappers (hier stunnel). Der Wrapper bildet dabei eine Schnittstelle zum Serverdienst, indem er auf dem Client die Anfragen an den Server entgegen nimmt und diese durch einen ssl-Tunnel an den Wrapper der auf dem Server installiert ist weiterleitet. Der serverseitige Wrapper stellt die Anfrage an den Server und leitet die ergebnisse der Anfrage durch den ssl-Tunnel zurück.\\ Hierdurch wird eine verschlüsselte Kommunikation zwischen zwei Anwendungen möglich auch wenn die Anwendungen selbst keine Verschlüsselung unterstützen.
Grundkonfiguration
Sowohl der Client als auch der Server wurden auf einem Debian 5.0 "Lenny" eingerichtet. Dabei wurden neben den im folgenden Artikel beschriebenen Programme, zusätzlich die Pakete
- vim
- mc
- openssh-server
installiert.
Installation
Die Installation kann auf zwei Wegen erfolgen, entweder direkt aus den Programm-Sourcen oder über die Pakete, hier sollen beide Wege beschrieben werden. Unabhängig welcher Weg gewählt wird, wird neben stunnel auch openssl benötigt. Mit SSL werde die zur Verschlüsselung benötigten Zertifikate erstellt.
als Pakete
Die Installation der Pakete kann einfach mittels
root@debian:~# apt-get install stunnel4
root@debian:~# apt-get install openssl
erfolgen.
über die Sourcen
openssl
Die Quellcodes von openssl können direkt bei openssl.org mittels
user@debian:~$ wget http://www.openssl.org/source/openssl-XXXXX.tar.gz
heruntergeladen werden. Danach müssen diese konfiguriert und schließlich kompiliert sowie installiert werden. Das erfolgt durch den Aufruf der Befehle
root@debian:~# tar -xzvf openssl-XXXXX.tar.gz
root@debian:~# cd openssl-XXXXX
root@debian:~# ./config
root@debian:~# make
root@debian:~# make test
root@debian:~# make install
stunnel
Dies wird nun analog für stunnel durchgeführt. Die Sourcen sind auf der Seite stunnel.org zu finden und können mit dem Befehl
user@debian:~$ wget http://www.stunnel.org/download/stunnel/src/stunnel-XXXXX.tar.gz
heruntergeladen werden. Diese können nun ebenfalls entpackt, konfiguriert und kompiliert bzw. installiert werden. Diese geschieht durch
root@debian:~# tar -zxvf stunnel-XXXXX.tar.gz
root@debian:~# cd stunnel-XXXXX
root@debian:~# ./configure
root@debian:~# make
root@debian:~# make install
Unabhängig auf welchen Weg die beiden Programme installiert wurden, den Abschluß der Installation von stunnel bildet die Erstellung eines Zertifikates. Falls dieses nicht geschieht kann das Zertifikat manuell erstellt werden.(siehe nächster Abschnitt) Ebenfalls unabhängig von der Art der Installation sollte sich nach der Installation das binary von stunnel in /usr/local/bin und das binary von openssl in /usr/bin befinden.
Zertifikate
Konfiguration
Eine vollständige Kopie der stunnel.conf ist hier zu finden, im folgenden sollen dabei die wichtigsten Änderungen sowohl auf Server als auch auf Client-Seite beschrieben werden.
Grundeinstellungen
Unabhängig ob stunnel auf dem Server oder dem Client betrieben wird, muss zunächst eine Konfigurationsdatei angelegt werden. Falls stunnel über den Paketmanager installiert wurde, kann einfach die mitinstallierte Beispielkonfiguration durch
root@debian:~# cp /usr/share/doc/stunnel-XXXX/examples/stunnel.conf-sample /etc/stunnel.conf
kopiert werden. Ansonsten befindet sich die Beispielskonfiguration in den Sourcen. Da stunnel in einer chroot Umgebung laufen soll, muss als erstes das Verzeichnis stunnel unter /var/run/ angelegt und die Rechte korrekt gesetzt werden. Dies geschieht mittels
root@debian:~# mkdir /var/run/stunnel
root@debian:~# chmod 755 /var/run/stunnel
Zusätzlich muss unter Umständen noch in der Konfigurationsdatei, der Eintrag
chroot = /var/run/stunnel
angepasst werden. Falls Probleme auftreten oder ein grundsätzliches Loggen gewünscht ist, kann dieses sowohl auf dem Server als auch auf dem Client geschehen indem in der Konfigurationsdatei der Eintrag
output = /var/log/stunnel.log
einkommentiert bzw. eingetragen wird.
Server
Als erstes muss auf dem Server der Eintrag client entweder auskommentiert oder auf no gesetzt werden. Des weiteren muss auch hier definiert werden welches Art von Zertifikat für die Kommunikation verwendet werden soll, beispielhaft soll hier das CRL-Zertifikat verwendet
cert = /etc/stunnel/key.pem
werden, wobei zu beachten ist, das dieses Zertifikat vom Server zwingend benötigt wird. Nun muss neben einem Namen für den zu verschlüsselnden Dienst festgelegt werden, von wo die Anfragen entgegen genommen werden sollen. Außerdem muss definiert werden wohin diese weitergeleitet werden sollen:
[ldap]
accept = 192.168.0.42:389
connect = 389
Die letztgenannten Einträge bestehen, aus einer IP sowie dem Port. Es kann aber auch ausschließlich der Port angegeben werden, dann ist dies eine implizite Nennung von localhost. Schließlich ist noch bemerkenswert das die Ports nicht zwingend über einstimmen müssen.
Client
Auf dem Client müssen nun folgende Änderungen durchgeführt werden, dabei wird stunnel in den so genannten Client-Modus gesetzt, dieses geschieht indem in der Datei der Punkt client auf yes gesetzt wird also
client = yes
in der Datei enthalten ist. Das heißt stunnel nimmt ausschließlich Anfragen entgegen und leitet diese an den stunnel der auf dem Server installiert ist weiter. Im Anschluß kann optional das Zertifikat festgelegt werden das von stunnel benutzt werden soll. Dabei stehen verschiedene Möglichkeiten zur Verfügung beispielhaft soll hier das CRL benutzt werden. Dazu wird in der Datei der Eintrag
CRLfile = /etc/stunnel/key.pem
einkommentiert, sowie der Pfad zum Zertifikat definiert. Zum Schluß muss die Weiterleitung der Anfragen definiert werden. Diese geschieht auf ähnliche Weise wie auf dem Server d.h. neben einem Namen muss auch die IP bzw. der Port festgelegt werden, von dem die Anfragen akzeptiert werden bzw. zudem der Verbindungsaufbau stattfindet. Der Eintrag hat den Aufbau
[ldap]
accept = 389
connect = 192.168.0.42:389
Dabei ist auch hier anzumerken das die Ports nicht zwingend überein stimmen müssen, sowie das das Fehlen einer IP wieder der impliziten Angabe von localhost entspricht.