===============================================================================
# Optional package: Stunnel                                         v3.6.1
===============================================================================
# this file is part of the opt_FAX2MAIL package for fli4l
## Creation:     2004-01-17  Norbert Jurka
## Last Update:  01.05.2011  Christoph Fritsch <fli4l@dechristo.net>
===============================================================================

OPT_STUNNEL bringt dem fli4l SSL-Verschlsselung fr beliebige Dienste bei.
Im einfachsten Fall kann der interne HTTPD - Status-Webserver per https verfgbar
gemacht werden (siehe Beispiel unten).

Stunnel ist ein SSL Encryption Wrapper zwischen Remoteclients und lokalen Diensten 
auf dem fli4l oder Remoteservern. Stunnel kann beliebiegen an sich nicht SSL-fhige Programme SSL-Verschlsselung zur Verfgung zu stellen. 

Beispiele und grafische Aufbereitungen finden sich unten.


===============================Konfiguration=================================
#config/stunnel.txt
#----------------------------------------------------------------------------
# Optional package: stunnel
#----------------------------------------------------------------------------
OPT_STUNNEL='no'                       #install stunnel: "yes" or "no"

STUNNEL_CONFIG_N='1'                   #by default only enable SSL fpr httpd
STUNNEL_1_IN='443'                     #Port to listen on (443 for https default)
STUNNEL_1_OUT='80'                     #Port to deliver (80 for http), 
                                       #should be set to HTTPD_PORT from httpd.txt
STUNNEL_1_HOST=''                      #Hostname/IP where to data is send (empty for localhost)
STUNNEL_1_DESC='https'
#----------------------------------------------------------------------------


---------------------------------Variablen-----------------------------------

OPT_STUNNEL
Diese Variable aktiviert oder deaktiviert OPT_STUNNEL.

STUNNEL_CONFIG_N
Legt die Anzahl der von OPT_STUNNEL gewrappten Dienste an

STUNNEL_X_IN
Hier wird der Port angegeben, auf dem der stunnel-daemon auf eingehende SSL-Verbindungen lauschen soll. Im Beispiel auf "https://IP_DES_FLI4L" (443).

STUNNEL_X_OUT
Hier wird der Port angegeben, zu dem der stunnel-daemon die entschlsselten Daten weiterleitet. Im Beispiel auf "http://" (80). 

STUNNEL_HOST
Wenn man diese Variable leer lsst oder auf 'localhost' setzt, werden die Daten an den Dienst weitergegeben der lokal am fli4l auf Port STUNNEL_X_OUT lauscht. Wenn eine andere Host angegeben wird, wird der dort laufende Dienst angebunden.

STUNNEL_X_DESC
Gibt der Konfiguration aus Input- und Outputport und optionalem Host einen eindeutigen Namen.


===============================SSL Zertifikat================================

OPT_STUNNEL erfordert ein SSL-Zertifikat. Unter Windows kann kann es z.B. mit 
Hilfe der Tools Portecle (http://portecle.sourceforge.net) oder SimpleCA (http://users.skynet.be/ballet/joris/SimpleCA/) erstellt werden. Unter Linux 
knnen CA.pl oder openssl verwendet werden. Das Vorgehen mir Portecle ist 
unten genauer beschrieben.

Ein solches selbsterstelltes SSL-Zertifikat erzeugt zwar eine Browserwarnung,
nach manueller Besttigung des Zertifikats ist die so verschlsselte Verbindung 
aber dennoch sicher. Um die Browserwarnung zu vermeiden, msste das verwendete 
Zertifikat von einer anerkannten CA wie beispielsweise Verisign signiert sein
und die verwendete Domain unter eigener Kontrolle sein. Dieser Aufwand lohnt 
sich fr einen fli4l in Normalfall nicht. Falls eh eine Domain vorhanden ist,
kann man sich bei StartSSL (http://www.startssl.com) kostenlos ein von den 
meisten Browsern akzeptiertes Zertifikat ausstellen lassen. 

OPT_SSL liefert unter config/etc/stunnel/stunnel_default.pem ein Standard-
zertifikat mit. Dieses kann durch Umbenennung in "stunnel.pem" verwendet 
werden. Dieses dient allerdings nur zu Testzwecken! Da auch der private 
Schlssel fr dieses Zertifikat in OPT_STUNNEL enthalten ist, rate ich 
dringend (!) davon ab, dieses mitgelieferte Zertifikat zu verwenden! Mit dem ffentlich verfgbaren privaten Schlssel ist es fr jeden mglich SSL-
Verschlsselung mit diesem Zertifikat zu entschlsseln.

Deshalb besser wie nachfolgend beschrieben ein eigenes Zertifikat erstellen.

----------------------------------Portecle-----------------------------------

Zertifikat mit Portecle erstellen: 
    (1) Portecle von http://portecle.sourceforge.net laden und starten
    (2) File -> New Keystore -> Type of KEystore: JKS
    (3) Tools -> Generate Key Pair
    (4) Key Algorithm: RSA; Key Size: [alles ab 2048 Bit ist ausreichend] -> ok
    (5) Signature Algorithm: [alle SHA* und RIPEMD* sind ok]
        Validity 1 Jahr oder lnger
        von den brigen Feldern ist _Common Name (CN)_ entscheidend. Hier den 
        Wert von HOSTNAME_ALIAS_1 aus der base.txt eintragen.
    (6) Enter Alias besttigen
    (7) Passwort kann leer gelassen werden
    (8) Rechtsklick auf gerade erstelltes Schlsselpaar --> Export
    (9) Export Type: Private Key and Certficate, Export Format: PEM Encoded
    (10) Passwort hier unbedingt leer lassen!
    (11)Speichern als config/etc/stunnel/stunnel.pem
    (12)Der Keystore braucht beim Beenden von Portecle nicht gespeichert zu werden



=================================Beispiele===================================
-----------------------------------HTTPD-------------------------------------

STUNNEL_CONFIG_N='1'
STUNNEL_1_IN='443'
STUNNEL_1_OUT='80'
STUNNEL_1_HOST=''


        Zugriff auf "https://IPdesFLI4L" 
                  |            A
LAN               |            |
                  V            |
        ----------------------------------
       |          |  Port 443  |          |
       |          |            A          |
       |          V            |          |
       | stunnel entschlsselt SSL-Daten  |
       |          |            |          |
FLI4L  |          V            A          |
       |          |            |          |
       |       Request an httpd auf       |
       |       Port 80 weitergeben        |
        ----------------------------------


----------------------------Interner Webserver-------------------------------

Angenommen man hat einen fli4l als Router und dahinter im lokalen LAN einen http-Server an IP 192.168.1.1, dessen Dienst auf Port 80 lauscht und den man vom Internet aus ber https erreichen mchte. Folgende Konfiguration deckt dieses Scenario ab:

STUNNEL_CONFIG_N='1'
STUNNEL_1_IN='443'
STUNNEL_1_OUT='80'
STUNNEL_1_HOST='192.168.1.1'

Zustzlich muss Port 443 am Router noch geffnet werden:
    PF_INPUT_1='443 ACCEPT'


Mit dieser Konfiguration ergibt sich folgendes Bild:

    Zugriff auf "https://ffentlicheIPdesFLI4L" 
                  |            A
Internet          |            |
                  V            |
        ----------------------------------
       |          |  Port 443  |          |
       |          |            A          |
       |          V            |          |
       | stunnel entschlsselt SSL-Daten  |
       |          |            |          |
FLI4L  |          V            A          |
       |          |            |          |
       |    Request an anderen Rechner    |
       |     auf Port 80 weitergeben      |
        ----------------------------------
                  |            A
LAN               |            |
                  V            |
                  --------------
WEBSERVER        |    Port 80   |
                  --------------
