Stunnel

Aus DebianforumWiki
Wechseln zu: Navigation, Suche
WikiWeitere Dienste ‹ Stunnel


Baustelle.png 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.

Quellen

[1] http://www.openssl.org/

[2] http://www.stunnel.org/