Der Betrieb eines Mailservers wie QMail in einem Netzwerk verlangt ein hohes Maß an Verantwortung gegenüber den eigenen Nutzern, aber auch gegenüber anderen Mail-Admins. Die Aufgabe, den Server abzusichern, ergibt sich folglich bereits aus der Tatsache, dass man ihn überhaupt betreibt.
Ungeschützte Mailserver laden zum Missbrauch ein: So dürfen sich QMail-Neulinge, deren Mail Transfer Agent (MTA) im Auftrag von Spammern unerwünschte Mails verschickt (siehe Kasten “Offenes Relay?”), nicht wundern. Ihr Server verhält sich standardmäßig[1] wie ein offenes Relay – eine ebenso verantwortungslose, möglicherweise sogar jobgefährdende Einstellung.
SMTP, aber nicht für jeden
Die Achillesferse jedes MTA ist der SMTP-Zugang. Darüber liefern die Mailprogramme berechtigter User ihre elektronische Post zur Weiterleitung an die Empfänger ein. Doch deren Mailaufkommen verblasst, sobald Spammer Mails hierüber auf einen Schlag an tausende Benutzer zustellen lassen. Bleibt solchen Schmarotzern der Zugang verwehrt, suchen sie sich üblicherweise andere offene SMTP-Server aus. Wem nicht gefällt, dass das Absichern des eigenen Servers somit dem Sankt-Florians-Prinzip (“0h heiliger Sankt Florian, verschon mein Haus, zünd andre an!”) folgt, konfiguriert seinen Rechner als Teergrube[2], doch führt dies an dieser Stelle zu weit.
Die QMail-eigene Variante der Zugriffsbeschränkung mit Hilfe der Konfigurationsdatei »rcpthosts« deckt zunächst nur ein sehr eingeschränktes Szenario ab: Die Datei nimmt alle Domains auf, für die der Mailserver Mails empfangen soll. Das verhindert das Mailrelaying allerdings nicht nur für die unberechtigten Benutzer, sondern für alle.
Zum Glück lässt sich diese Einschränkung mit Hilfe des Programms »tcpserver« aus dem Paket »ucspi-tcp-0.88.tar.gz« aufheben [1], [3], [4]. Es erlaubt einen Schutz des SMTP-Ports, bei dem nicht die Empfängeradresse den Ausschlag gibt, sondern der Absender. Jedoch darf das Programm »qmail-smtpd«, das am SMTP-Port lauscht, dann nicht mehr wie in[1] gezeigt per »inetd« starten, sondern muss der Obhut der Daemontools (siehe Kasten “Daemontools”) übergeben werden.
Für den »tcpserver« legt man explizit fest, von welchen IP-Adressen der Server weiterzuleitende Mails annimmt. Zu diesem Zweck füllt man zunächst eine Datei (etwa »/etc/tcp.smtp«) mit Leerzeichen-freien Einträgen der Art:
IP-Adresse:allow,RELAYCLIENT=""
Statt » IP-Adresse« dürfen nicht nur einzelne IP-Nummern, sondern auch Bereiche nach dem Muster »192.168.0.« für ein gesamtes Subnetz stehen. Der Eintrag »RELAYCLIENT=””« setzt für jede Verbindung aus diesem Adressbereich eine Umgebungsvariable. Deren leeren Inhalt interpretiert QMail als Erlaubnis zum Relaying. Vergisst man »RELAYCLIENT« zu setzen, bleibt Relaying verboten; nur Mails an die in »rcpthosts« gelisteten Domains sind erlaubt.
Ein Aufruf von »tcprules« aus[4] überführt diese Datei ins »cdb«-Format[11]:
tcprules /etc/tcp.smtp.cdb U /etc/tcp.smtp.tmp < /etc/tcp.smtp
Im Aufruf des »tcpserver« fügt man nun den Parameter »-x /etc/tcp.smtp.cdb« ein; der anschließende Neustart des Daemons aktiviert den Schutz.
Für Road-Warriors
Benutzer mit von Dritten dynamisch zugewiesener IP-Adresse können den Mailserver auf diese Art und Weise jedoch nicht als Smarthost benutzen. Dann bleibt nur übrig, die einliefernden Mailclients aufzufordern, sich zu authentifizieren. Dabei spielen zwei Varianten in der Praxis eine Rolle; keine davon kennt QMail von Haus aus.
SMTP-Auth fordert den Benutzer dazu auf, sich zu authentifizieren, wenn er eine Mail einliefern will. SMTP after POP hingegen gibt ihm ein – konfigurierbares – Zeitfenster (oft 15 Minuten), um seine Mails nach einem authentisierten Zugriff über POP zuzustellen. Bei der Entscheidung für die eine oder andere Methode gilt es zu beachten, dass ältere Mailclients oft noch kein SMTP-Auth unterstützen.
Die SMTP-Auth-Funktionalität lässt sich über das derzeit von Eric M. Johnston gepflegten Patch »qmail-smtpd.c«[5] nachrüsten (Listing 1). Da falsche Zugriffsrechte für das neue Tool »checkpassword« immer wieder für Schwierigkeiten sorgen, werden sie dort präventiv gesetzt. Den »smtp«-Eintrag in der »inetd .conf« ändert man zu
smtp stream tcp nowait qmaild U /usr/sbin/tcpd /var/qmail/bin/tcp-env U /var/qmail/bin/qmail-smtpd U /bin/checkpassword /bin/true
und startet den »inetd« mit »/etc/init.d/inetd restart« neu. Kommen die Daemontools zum Einsatz, hängt man
/bin/checkpassword /bin/true
an den Aufruf von »/var/qmail/bin/qmail-smtpd« an und startet neu.
Zum Testen des SMTP-Auth-Zugangs per Telnet (Listing 2) sind Username und Passwort des Testkontos in Base64-kodierter Form erforderlich. Dazu verhilft das Perl-Modul MIME::Base64 (siehe Kasten “Perl-Module installieren”):
berbig@chekov:~$ perl -e
'use MIME::Base64 qw(encode_base64);
print encode_base64("berbig");'
YmVyYmln
Anschließend kann die Umstellung der Clients beginnen.
Alle Anstrengungen zur Absicherung des Zugangs über Passwörter sind natürlich nutzlos, wenn die Passphrase dem Accountnamen entspricht oder leer, simpel oder leicht zu erraten ist. Eine Passwort-Policy muss die genannten Schritte daher begleiten und unterstützen.
|
Offenes |
|---|
|
Relaying im Allgemeinen bezeichnet das Verarbeiten und Weiterleiten von Mails an ihre Zieladresse. Üblicherweise versendet und empfängt jeder Mailserver Nachrichten nur für seine lokalen Benutzer sowie die jener Domains, für die der Rechner als Mailexchanger (MX) im DNS eingetragen ist. Diese Anforderung ist jedoch vergleichsweise jung und eine Folge des zunehmenden Spam-Problems. In den Jugendtagen des Internet war es sogar üblich, dass jeder Mailserver Mail beliebiger Nutzer annahm und versuchte, sie an beliebige Empfänger weiterzuleiten, eine Arbeitsweise, die man als “offenes Relay” bezeichnet und die einige Mail-Transfer-Agenten, darunter QMail, leider immer noch als Default-Konfiguration haben. Schmarotzer im NetzDamit ist es auch möglich, große Mails zu versenden, ohne seine Identität preiszugeben. Seit der Zunahme des Spam-Unwesens führt dies zu großen Problemen: Spammer wollen in der Regel anonym bleiben und außerdem möglichst nicht für Rechenleistung, Speicherplatz und Netzwerkbandbreite zahlen. Die schmarotzen sie bei den Betreibern der missbrauchten Mailserver – und denen der Empfänger-Server. Doch die bleiben nicht untätig und setzen sich zur Wehr: Wenn man den Spammer selbst schon nicht so leicht herausfindet, bestraft man stellvertretend jene, die sich durch Fehlkonfiguration ihrer Mailserver zu Helfershelfern machen. Blacklists wie die Open Relay Database (ORDB, [http://ordb.org/]) fahnden nach offenen Relays und eine stetig zunehmende Anzahl Mail-Administratoren konfiguriert ihre MTAs so, dass sie Mail von dort gelisteten Rechnern grundsätzlich abweist. Zweierlei KopfschmerzenWer seinen Mailserver nicht oder nur unzureichend überprüfen lässt, ob weiterzuleitende Mail von berechtigten Benutzern stammt, bekommt daher über kurz oder lang zwei Probleme: Spammer entdecken das offene Relay und verwenden dessen Ressourcen dankend für ihre Zwecke. Aber auch Blacklists finden und sperren das Relay mit der Folge, dass Mails berechtigter User vom Empfängersystem abgewiesen werden. Prominentestes Beispiel aus der letzten Zeit sind die Mailserver von Gmx.de und Gmx.net, die Ende Mai auf der schwarzen Liste von ORDB standen – mit der Folge, dass tausende Mails von GMX-Usern niemals ihre Empfänger erreichten. |
Bitte nach ihnen!
Für SMTP after POP benötigt QMail das Programm »envdir« aus den Daemontools[6] (siehe Kasten “Daemontools”) sowie das Paket »relay-ctrl« von Bruce Guenter[7], dessen Installation Listing 3 beschreibt. Der Eintrag in der Datei »RELAY_CONTROL_EXPIRY« (im Beispiel »900«) gibt die Zeit in Sekunden an, die der Benutzer Zeit hat, seine Mails nach einem erfolgreichen POP-Connect abzuliefern.
Um »relay-ctrl« zu aktivieren, müssen die »run«-Skripte für »qmail-pop3d« und »qmail-smtpd« bearbeitet werden. Listing 4 zeigt den neuen Inhalt der Datei »/service/qmail-pop3d/run«; Listing 5 beschreibt, wie sich »/service/qmail-smtpd/run« mit und ohne Unterstützung für SMTP after POP unterscheiden.
»envdir /etc/relay-ctrl relay-ctrl-chdir« bedeutet, dass das Verzeichnis »/etc/relay-ctrl« als Quelle für Umgebungsvariablen des Programms »relay-ctrl-chdir« Verwendung findet. Für jede Datei in diesem Verzeichnis setzt »envdir« eine gleichnamige Variable und weist ihr den Datei-Inhalt als Wert zu.
»relay-ctrl-chdir« wiederum bekommt das Programm »tcpserver« übergeben und macht dessen Ausführung von den Berechtigungen abhängig. Der Eintrag »relay-ctrl-check« vor dem Aufruf von »qmail-smtpd« überprüft, ob dem User der Zugriff erlaubt wird.
»relay-ctrl-allow« auf POP-Seite (Listing 4) erzeugt für den über POP authentifizierten Benutzer eine Datei mit dessen IP-Adresse als Dateinamen (zum Beispiel »192.168.0.1«), die den Usernamen in der Form »USER= frank« enthält. »relay-ctrl-check« liest sie bei einem SMTP-Zugriff aus.
Um die Bereinigung dieser Dateien in dem Verzeichnis »/var/spool/relay-ctrl/allow/« kümmert sich der in Listing 3 genannte Cronjob: Er löscht die Einträge zu alter Authentifizierungen – eine Vorsichtsmaßnahme, die nicht zwingend erforderlich ist, da »relay-ctrl« von sich aus das Alter der Dateien überprüft.
Nicht nur Initskripte, auch die von den Daemontools verwalteten Services müssen nach Änderungen neu gestartet werden. Die Befehle
svc -d /service/* und<a> svc -u /service/* </link>
stoppen und starten alle im »services«-Verzeichnis abgelegten Dienste neu. Alternativ ist statt »*« das Verzeichnis des gewünschten Dienstes anzugeben.
Zum Testen schickt man anschließend eine Mail, ohne vorher per POP auf den passenden Account zugegriffen zu haben. Der Versuch muss scheitern. Erst beim Zugriff auf die Mailbox über POP sollte das Versenden anschließend funktionieren.
|
Listing 1: |
|---|
01 patch -d /Pfad/zu/qmail-1.03 < /Pfad/zu/<$>qmail-smtpd.c 02 cd /Pfad/zu/qmail-1.03 03 make 04 make setup check 05 chmod 4711 /bin/checkpassword |
|
Listing 2: |
|---|
01 berbig@chekov:~$ <strong>telnet localhost 25</strong> 02 Trying 127.0.0.1... 03 Connected to localhost. 04 Escape character is '^]'. 05 220 testrechner ESMTP 06 <strong>EHLO testrechner</strong> 07 250-testrechner 08 250-AUTH=LOGIN 09 250-PIPELINING 10 250 8BITMIME 11 <strong>auth login</strong> 12 334 VXNlcm5hbWU6 13 <strong>YmVyYmln</strong> 14 334 UGFzc3dvcmQ6 15 <strong>cGFzc3dvcnQ=</strong> (Base64 für »passwort«) 16 235 go ahead (erfolgreiche Authentifizierung) 17 <strong>quit </strong> |
|
Listing 3: SMTP |
|---|
01 tar xzvf relay-ctrl-3.1.1.tar.gz 02 cd relay-ctrl-3.1.1 03 mkdir -p /var/spool/relay-ctrl/allow 04 chmod 700 /var/spool/relay-ctrl 05 chmod 777 /var/spool/relay-ctrl/allow 06 mkdir /etc/relay-ctrl 07 echo "/var/spool/relay-ctrl/allow" > /etc/relay-ctrl/RELAY_CTRL_DIR 08 echo "900" > /etc/relay-ctrl/RELAY_CONTROL_EXPIRY 09 echo "1-59 * * * * root envdir /etc/relay-ctrl /usr/sbin/relay-ctrl-age" >> /etc/crontab |
Schwarze Listen
Nun lässt sich QMail zwar kaum mehr als offenes Relay missbrauchen, doch gegen Spam, der an Benutzer des Mailservers geschickt wird, hilft keine der genannten Maßnahmen. Hier setzen RBLs (Realtime Blocking oder Black Lists) wie die in Kasten “Offenes Relay?” erwähnte ORDB an. RBL-Projekte testen und sammeln mit unterschiedlichen Schwerpunkten Mailserver, die als (potenzielle) Spamquelle auffallen.
QMail kann diese mit dem Programm »rblsmtpd« aus dem Paket »ucspi-tcp« ([3], [4]) über DNS abfragen und blockt dann alle Mail-Zustellversuche der gelisteten Server ab. Hierzu muss das »run«-Skript für den SMTP-Daemon entsprechend Listing 6 so angepasst werden, dass das Programm »rblsmtpd« inklusive Optionen vor dem Aufruf von »qmail-smtpd« stehen bleibt.
Bei der Auswahl der RBLs ist jedoch abzuwägen, in welchem Rahmen man das Risiko eingehen möchte, dass unter den abgewiesenen Mails auch erwünschte sein können: Auf sehr aktiven RBLs landen unter Umständen schon mal unschuldige Server und wenn ein gängiger Freemailer geblacklistet wird, bedeutet das auch den Verlust erwünschter Mails, deren Absender von diesem Mailprovider unter Umständen nicht einmal informiert werden.
|
Listing 4: |
|---|
01 #!/bin/sh 02 exec /usr/local/bin/softlimit -m 2000000 envdir /etc/relay-ctrl relay-ctrl-chdir /usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup host.domain.tld /pfad/zu/checkpassword relay-ctrl-allow /var/qmail/bin/qmail-pop3d Maildir 2>&1 |
|
Listing 5: |
|---|
|
Im Daemontool-»run«-Skript ohne SMTP after POP: exec /usr/local/bin/softlimit -m 2000000 /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" -u "$QMAILDUID" -g U "$NOFILESGID" 0 smtp /var/qmail/bin /qmail-smtpd 2>&1 Mit SMTP after POP: exec /usr/local/bin/softlimit -m 2000000 envdir /etc/relay-ctrl relay-ctrl-chdir /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c U "$MAXSMTPD" -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp relay-ctrl-check /var/qmail/bin/qmail-smtpd 2>&1 |
|
Listing 6: Aufruf |
|---|
|
Die entscheidende Zeile exec /usr/local/bin/softlimit -m 2000000 /usr/local/bin/tcpserver -v -R -H -l 0 -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" -u "$QMAILDUID" -g "$NOFILESGID" 0 U smtp /var/qmail/bin/qmail-smtpd 2>&1 im »run«-Skript wird bei RBL-Nutzung zu exec /usr/local/bin/softlimit -m 2000000 /usr/local/bin/tcpserver -v -R -H -l 0 -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" -u "$QMAILDUID" -g "$NOFILESGID" 0 U smtp /usr/local/bin/rblsmtpd -r relays.ordb.org /var/qmail/bin/qmail-smtpd 2>&1 |
Spam-Attentäter
Auch RBLs sind also nicht der Weisheit letzter Schluss. Ergänzend oder alternativ sei es daher den eigenen Usern überlassen, über Spam oder Nicht-Spam zu entscheiden. Entscheidungshilfen hierfür gibt das Perl-Modul Spamassassin aus dem Paket »Mail-Spamassassin«[9], das Mails auf verschiedene charakteristische Merkmale untersucht und das Ergebnis in den Headern der jeweiligen Mail verewigt. Zwei Tools, »procmail« oder der »qmail-scanner«[10], bringen es mit QMail zusammen. Letzterer empfiehlt sich, wenn man QMail außerdem den Gebrauch von Virenscannern nahe bringen möchte.
Der Weg über »procmail« besticht dagegen durch seine Einfachheit. Da dieser Mail Delivery Agent auf den meisten Systemen bereits installiert ist, müssen lediglich passende Konfigurationen erstellt werden. Als Basis für eine individuelle Lösung kann Listing 7 dienen. Die Zeilen 1 und 2 sorgen für die Vorverarbeitung aller eingehenden Mails durch Spamassassin. Die folgende Regel sorgt dafür, dass alle als Spam markierten Mails im IMAP-Ordner »Spam« enden, während – den Zeilen 6 bis 8 entsprechend – alle anderen Mails normal im Postfach des Benutzers landen.
Sicher ist noch nicht sicher
Wer Spam sofort löschen möchte, indem er Zeile 5 durch »/dev/null« ersetzt, sei gewarnt: Zunehmend nutzen Spammer Spamassassin als eine Art Qualitätssicherungstool, mit dem sie dafür sorgen, dass ihre Mails nicht mehr als Spam erkannt werden. So werden sich Spam und erwünschte Mail immer ähnlicher.
Den eigenen Mailserver schützen ist an sich schon keine banale, dafür aber eine immer währende Aufgabe. Bei QMail kommt das Problem hinzu, dass dessen Autor diverse Schutzmaßnahmen nicht für wichtig genug hält, um sie in den offiziellen Code aufzunehmen. So muss der QMail-Admin auf Patches und Add-ons Dritter zurückgreifen. (pju)
|
Infos |
|---|
|
[1] Frank Berbig, “E-Post vom Sonderling”: Linux-Magazin 5/03, S. 67 [2] Teergruben-FAQ: [http://www.iks-jena.de/mitarb/lutz/usenet/teergrube.html] [3] Ucspi-tcp: [http://cr.yp.to/ucspi-tcp.html] [4] Ucspi-tcp: [http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz] [5] SMTP-Auth-Patch: [http://www.nimh.org/dl/qmail-smtpd.c] [6] Daemontools: [http://cr.yp.to/daemontools.html] [7] SMTP-after-POP-Addon: [http://untroubled.org/relay-ctrl/] [8] Daemontool-Skripte: [https://www.linux-magazin.de/Service/Listings/2003/08/QMail/] [9] Spamassassin: [http://www.spamassassin.org/] [10] QMail-Scanner: [http://sourceforge.net/projects/qmail-scanner/] [11] Cdb: [http://cr.yp.to/cdb.html] |
|
Der |
|---|
|
Frank Berbig ist freiberuflicher Webentwickler, der seine Anwendungen vorrangig mit PHP, Java und verschiedenen Datenbanken realisiert. |
|
Perl-Module |
|---|
|
Als erste Anlaufstelle für Perl-Module jeder Art hält [http://www.cpan.org/] auch die in diesem Artikel benötigten als »tar.gz«-Archive bereit. Nach dem Entpacken per »tar xzvf archivname.tar.gz« werden sie nach folgendem Schema installiert: cd archivname; perl Makefile.PL make; make install |
|
Daemontools |
|---|
|
Über die vielen verschiedenen QMail-Dienste den Überblick behalten ist eine Kunst für sich. Daher empfiehlt es sich, deren Überwachung auf Servern, die QMail produktiv einsetzen, den Daemontools zu übertragen. Dreh- und Angelpunkt ist das Programm »supervise«, das auf Unix-Systemen beliebige Services überwacht und bei Bedarf neu startet. Aufgespielt und eingestelltBei der Installation des Daemontools-Pakets von[6] mit cd /var/qmail tar xzvf daemontools-0.76.tar.gz cd admin/daemontools-0.76 ./package/install entsteht das Unterverzeichnis »command«, das mehrere Hilfsprogramme enthält. Im neu angelegten Verzeichnis »/service« liegen künftig die verschiedenen Dienste unter der Kontrolle von »supervise«. Der bei der Installation eingefügte Eintrag SV:123456:respawn:/command/svscanboot in der »/etc/inittab« sorgt dafür, dass die Daemontools neu gestartet (»respawn«) werden, falls sie doch einmal abstürzen sollten. Einen zu überwachenden Dienst legt man an, wie das folgende Beispiel des POP-Daemons zeigt: mkdir -p /var/qmail/supervise/qmail-pop3d/log cat > /var/qmail/supervise/qmail-pop3d/run << EOF #!/bin/sh exec /usr/local/bin/softlimit -m 2000000 /usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup Host.Domain.tld /Pfad/zu/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1 EOF cat > /var/qmail/supervise/qmail-pop3d/log/run << EOF #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/pop3d EOF chmod 755 /var/qmail/supervise/qmail-pop3d/run chmod 755 /var/qmail/supervise/qmail-pop3d/log/run mkdir -p /var/log/qmail/pop3d ln -s /var/qmail/supervise/qmail-pop3d /service Die Daemontools sehen jedes Verzeichnis unterhalb von »/service« als Inkarnation eines Dienstes an. Dort versuchen sie, ein Skript namens »run« zu finden, das den gewünschten Service ausführt. Gibt es im Verzeichnis eines Dienstes ein Unterverzeichnis »log«, nutzen die Daemontools das darin abgelegte »run«-Skript zum Starten des Loggings. Für die Protokollierung der Aktivitäten von QMail-Services ist der Benutzer »qmaill« zuständig. QMail-Dienste wie »qmail-pop3d« legt man am besten unter »/var/qmail/supervise« an und verlinkt sie nach »/service«. Die Logfiles liegen unter »/var/log/qmail/ Service/current«. Um den Start des Dienstes braucht sich niemand zu kümmern; das erledigen die Daemontools automatisch, wenn sie den Link in »/service« finden. Konkurrenz vermeidenWer einen Dienst der Obhut der Daemontools überlässt, muss einen eventuellen Eintrag in der »/etc/inetd.conf« auskommentieren. Sonst versuchen zwei konkurrierende “Superserver”, den POP-Port 110 mit ihrem Server zu belegen. Zeichnen die Daemontools für einen QMail-Service verantwortlich, stellt man alle anderen am besten ebenfalls um. Entsprechende Skripte hierfür finden sich unter[8] als Tarball; außer einer Anpassung der Pfade sollten keine weiteren Änderungen nötig sein. Das Paket enthält zudem ein QMail-Initskript auf Basis der Daemontools, das das alte Skript unter »/etc/init.d/« ersetzt. |
|
Listing 7: |
|---|
01 :0fw 02 | /usr/local/bin/spamassassin -P 03 :0 w 04 * ^X-Spam-Status: Yes 05 $HOME/Maildir/.Spam/ 06 :0 w 07 * 08 $HOME/Maildir/ |





