Hamster und Stunnel
Mails über eine SSL-Verbindung abrufen


Wichtiger Hinweis

Der News- und Mailserver Hamster unterstützt SSL/TLS in der aktuellen Classic-Version direkt. Der hier beschriebene Ansatz sollte daher bei Verwendung einer Hamster-Version ab 2.0.0.0 (oder ab Beta 1.3.23.140) nicht mehr verwendet werden. Bitte lesen Sie hierzu die Hinweise zur Benutzung von Hamster mit SSL/TLS.


Inhalt:


Was ist Stunnel?

Stunnel (sprich: S-Tunnel) ist ein Programm, mit dem man TCP-Verbindungen mit SSL (Secure Sockets Layer) verschlüsseln kann. Dieser "Tunnel" ermöglich die Kommunikation zwischen einem SSL-Server und Programmen, die SSL nicht beherrschen.

Stunnel ist freie Software; der Quelltext wird unter der GNU General Public License veröffentlicht. Weitere Information über das Programm gibt es auf Homepage von Stunnel: http://stunnel.mirt.net/

Im Folgenden versuche ich zu erklären, wie Stunnel eine verschlüsselte Pop3-Verbindung herstellt:

unverschlüsselt
Beispiel einer unverschlüsselten Pop3-Verbindung:
Hamster holt als Client die Mails mit einer unverschlüsselten Pop3-Verbindung vom Mailserver ab. Gleichzeitig arbeitet Hamster als lokaler Mailserver. Damit der Datenaustausch zwischen Client und Server funktioniert, wird jedem Datenpaket die Information mitgegeben, wo es landen soll (im TCP-Header). Diese Information besteht aus der Adresse des Zielrechners und einem Port.
Durch Verwendung verschiedener Ports können gleichzeitig verschiedene Dienste verwendet werden, zum Beispiel News, Http und Pop3. Portnummern können im Bereich von 0 bis 65535 liegen. Die Ports 0 bis 1024 sind reserviert und dürfen nicht für selbstdefinierte Dienste genutzt werden.
Einige Beispiele für reservierte Portnummern:

Port unverschlüsselte Protokolle Port verschlüsselt Protokolle
80 HTTP (World Wide Web) 443 HTTPS (HTTP über TLS/SSL)
119 NNTP (News) 563 NNTPS (NNTP über TLS/SSL)
25 SMTP (E-Mail senden) 465 SMTPS (SMTP über TLS/SSL)
110 POP3 (E-Mail holen) 995 POP3S (POP3 über TLS/SSL)

verschlüsselt
Beispiel einer verschlüsselten Pop3-Verbindung:
Hamster verbindet sich nicht mehr direkt mit dem POP3 Server, sondern mit dem lokalen Port 1100. Stunnel verschlüsselt die Daten und leitet sie an den Port 995 des Pop3S-Servers weiter. Gleichzeitig empfängt Stunnel die verschlüsselten Mails, decodiert sie und leitet sie an Hamster weiter.


Download

Es wird benötigt:


Konfiguration von Hamster

Einrichten eines neuen lokalen Pop3-Mailservers über das Menü:
File -- Configuration -- Mailserver -- [POP3] Load mails from (Server, Port) -- Add

Add Mailserver

Wichtig: Es darf nicht "127.0.0.1,pop3" eingestellt sein! Die Portnummer ist hierbei frei wählbar, in unserem Beispiel wählen wir 1100. Der eingestellte Port sollte allerdings von keinem anderen Programm verwendet werden. Um Konflikte zu vermeiden, sollten folgende Ports auf keinen Fall verwendet werden: 0-1024, 3128, 4000, 4444, 8000, 8008, 8080

Wird nur ein Mailserver über SSL abgefragt, so man Passwort und Usernamen für den SSL-Mailserver unter
File -- Configuration -- Passwords -- 127.0.0.1
eintragen.

Tip: Sollen mehrere SSL-Mailserver gleichzeitig über ein Skript abgefragt werden, so kann man die Spezial-Passwort-Kombinationen $1, $2 usw. verwenden. In einem Hamsterskript sieht das dann beispielsweise so aus:

# SSL-Verbindung zu Web.de über lokalen Port 1100
execute( HamPath+"stunnel.exe -c -r pop3.web.de:995 -d  1100","",1,false )
# SSL-Verbindung zu GMX über lokalen Port 1101
execute( HamPath+"stunnel.exe -c -r pop.gmx.net:995 -d  1101","",1,false )

# 7 Sekunden warten
sleep( 7000 )

# Mails von Web.de abholen
HamFetchMail( "127.0.0.1", "1100", "$1", "", "" )
# Mails von GMX abholen
HamFetchMail( "127.0.0.1", "1101", "$2", "", "" )

Starten von Stunnel

Der Start von Stunnel muß nach dem Verbindungsaufbau mit dem Netz erfolgen. Die Syntax lautet:

stunnel.exe -c -r servername:995 -d 1100

servername ist der Name des POP3S-Servers (z.B. pop3.web.de)
1100 bezeichnet den lokalen Port und muß mit den Einstellungen von Hamster übereinstimmen


Mails abholen

Vor dem Abholen der Mails (siehe Bild) bitte erst warten, bis Stunnel die SSL-Verbindung mit dem Mailserver hergestellt hat. (Das dauert bei mir incl. Laden des Programms etwa 5 Sekunden)

Mails abholen

Beenden von Stunnel

Manuell kann Stunnel mit der Tastenkombination [Strg] + [c] beendet werden.


Skripte

Ein einfaches Beispielskript zum automatischen Mailabruf über eine verschlüsselte Verbindung könnte folgendermaßen aussehen:

#!hs2
#!load hamster.hsm

# Make sure, that Hamster is new enough to run this script
HamRequireVersion( "1.3.18.0", True )

#-------------------------------------------------------------------------------------
#  Skript zum automatischen Mailabruf über eine SSL-Verbindung mit Stunnel
#-------------------------------------------------------------------------------------

# Einstellungen

var( $POP3S_SERVERNAME, $RASDIAL_CONNECTION, $RASDIAL_USERNAME, $RASDIAL_PASSWORD )

$POP3S_SERVERNAME   = ""     # Name des Pop3S-Servers (muß SSL unterstützen)
$RASDIAL_CONNECTION = ""     # Name der DFÜ Verbindung; "" = Keine Einwahl
$RASDIAL_USERNAME   = ""     # Username für DFÜ Verbindung; "" = Hamster-Einstellung wird verwendet
$RASDIAL_PASSWORD   = ""     # Passwort für DFÜ Verbindung; "" = Hamster-Einstellung wird verwendet

#-------------------------------------------------------------------------------------

# Verbinden
var( $RASERR, $AUTOCONNECT)
$AUTOCONNECT = false
if( !RasIsConnected && $RASDIAL_CONNECTION<>"" )
      print( "Verbinden ..." )
      $AUTOCONNECT = true
      $RASERR = HamRasDial( $RASDIAL_CONNECTION, $RASDIAL_USERNAME, $RASDIAL_PASSWORD )
      if( $RASERR<>0 )
         Error( "Fehler bei der DFÜ-Verbindung ", $RASDIAL_CONNECTION, "! DFÜ-Fehler Code=", $RASERR )
      endif
endif

# Starten von Stunnel (den lokalen Port 995 ('-d 995') bei Bedarf anpassen)
print( "SSL Verbindung mit "+$POP3S_SERVERNAME+" wird hergestellt ..." )
execute( HamPath+"stunnel.exe -c -r "+$POP3S_SERVERNAME+":995 -d 995","",1,false )

# 7 Sekunden warten (Bei Bedarf länger)
sleep( 7000 )

# Mails mit Stunnel abholen (den lokalen Port 995 bei Bedarf anpassen)
print( "Mails werden verschlüsselt empfangen ..." )
HamFetchMail( "127.0.0.1", "0995", "", "", "" )

# Wait until all transfer-threads have finished
HamWaitIdle
print( "Fertig!" )

# Hanging up
if( $AUTOCONNECT = true )
   print( "Verbindung wird getrennt ..." )
   HamRasHangup
endif

# The End.
quit

Damit das Skript funktioniert, muß stunnel.exe im Arbeitsverzeichnis von Hamster liegen.

Hinweis: Mit diesem Beispielskript werden nur Emails über die verschlüsselte Verbindung abgerufen, Mailversand sowie das Abholen und Versenden von Newspostings erfolgt nicht.


Zuletzt geändert am 27.12.2002 von Martin Germann