mta postfix / anleitung zum installieren von postfix / postfix-tls mit saslIch möchte hier eine kurze Anleitung geben, wie Ihr am besten Postfix mit SASL und smtpd-Auth installiert. Als Grundlage wird ein Debian sarge verwedet, mit ein paar individuellen Anpassungen. Bei Fragen wendet euch an Henrik Hasenkamp. Problem: Viele böse Leute verwenden offene Mailrelays um anonym zu spamen. Dieses hat zwei grosse Nachteile:
Lösung: Eine Lösung ist z.B. den Mailserver soweit abzuschotten, daß nur noch Emails von bekannten Clienten, z.B. aus dem internen Netz akzeptiert werden. Diese Lösung ist jedoch nur solange trivial, wie kein Benutzer über eine Dial-UP Verbindung auf den Mailserver zugreift, da sich hier meistens die IP-Adresse ständig ändert. Wir können das sogenannte "POP-b4-SMTP" Verfahren nutzen, hierbei müssen Benutzer zunächst Emails abrufen um anschliessend E-Mails senden zu dürfen. Auch dieser Weg ist nicht wirklich benutzerfreundlich, wenn ich doch nur eine E-Mail abschicken möchte, halte ich es für unklug erstmal E-Mails abzurufen. Wie dem auch sei. Es haben sich zwischenzeitlich viele Leute Gedanken darüber gemacht, wie ein Mailserver am besten abzuschotten ist. Der hier beschriebene Weg ist natürlich nur einer von vielen, aber er hat sich in der Zwischenzeit als sehr wirkungsvoll erwiesen. Vorgang: Wir haben ein frisch installiertes Debian / Sarge System mit dem wir arbeiten wollen. Um den Postfix mit der gewünschten Authentifizierung zum laufen zu bringen, müssen wir den Postfix erstmal installieren: apt-get install postfix postfix-tlsFalls sich Debconf meldet, können wir uns durch Enter einfach durch das Menu klicken, das konfigurieren werden wir anschliessend genauer erklären und Schritt für Schritt machen. Weiter benötigen wir die SASL-Module und SASL-Binarys: apt-get install libsasl-dev libsasl-modules libsasl2 libsasl2-modules sasl-bin sasl2-binNun haben wir alles was wir brauchen und noch ein paar Packete mehr. Zugegeben, die SASL Sachen brauchen wir nicht, die Konfiguration wird sich ausschliesslich auf SASL2 beziehen. Wir haben nun die ersten Hürden genommen und können uns an die Konfiguration machen. Hierzu nehmen wir uns zunächst die Datei /etc/postfix/main.cf vor. Diese gehen wir jetzt Schritt-für-Schritt durch. Wer meine Konfig so übernehmen möchte, kann die Datei auch löschen und meine Einträge in eine neue Datei einfügen. --snip-- command_directory = /usr/sbin daemon_directory = /usr/lib/postfix program_directory = /usr/lib/postfix setgid_group = postdrop biff = no --snip--Ich glaube, zu den ersten Zeilen ist einfach nichts zu sagen, diese erklären sich von selber. --snip-- smtpd_banner = $myhostname ESMTP $mail_name (Mein Mailserver) --snip--Hier können wir festlegen, wie sich den unser Mailserver melden soll. Wenn ich nun mit dieser Einstellung ein Telnet auf den Port 25 mache, dann erhalte ich die Meldung: --snip-- 220 mailserver.de ESMTP Postfix (Mein Mailserver) --snip--Weiter im Text, sonst schlafen wir ja hier noch ein. --snip-- myhostname = mailserver.de --snip--Hier legen wir unseren Hostnamen fest. Alternativ können wir auch den $mailname nutzen der wird dann aus der Datei /etc/mailname ausgelesen und verwendet. Wie man es nun macht ist eigentlich egal. --snip-- append_dot_mydomain = yes virtual_maps = hash:/etc/postfix/virtual alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases transport_maps = hash:/etc/postfix/transport myorigin = /etc/mailname --snip--Jetzt wird es langsam interessant. append_dot_mydomain steht für "setze meinen Host an die Email dran". Eigentlich uninteressant, daher gehen wir da jetzt auch nicht weiter drauf ein. Die virtual_maps, alias_maps, alias_database und transport_maps legen ein paar Dateien fest, die wir brauchen. Virtual ist eine Datei, in der wir festlegen können, wir wir Benutzer und Emails zusammenlegen. Z.B. Systemuser = test Eintrag: --snip-- webmaster@mailserver.de test --snip--Dieses würde die o.s. Email Adresse auf den Systemuser test weiterleiten. Wir können an dieser Stelle auch eine Datenbank ins Spiel holen, dass würde jedoch ein wenig zu komplex für die erste Version werden. Daher werden wir die Datenbanken erstmal noch aussenvor lassen und vielleicht in einer späteren Version nocheinmal darauf zukommen. --snip-- mydestination = mailserver.de, 3-freun.de, localhost, localhost.localdomain, localhost --snip--So teilen wir dem Postfix mit, um welche Domains er sich kümmern muss. Wir nutzen in den nächsten Beispielen nur noch mailserver.de, hier sei jedoch bemerkt, dass mir die Domain natürlich nicht gehört ;) Es ist weiter möglich, durch den Eintrag --snip-- mydestination = hash:/etc/postfix/destination --snip--Eine Datei anzugeben, in welcher sich die oben aufgeführten Hostnamen befinden. Diese wird dann jedesmal eingelesen. --snip-- mynetworks = 127.0.0.0/8 mailbox_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 recipient_delimiter = + --snip--Hier legen wir folgende Parameter fest:
Nun wird es mal interessant, wir kommen zu der eigentlichen Authentifikation: --snip-- smtpd_helo_required = yes strict_rfc821_envelopes = yes disable_vrfy_command = yes smtpd_delay_reject = yes smtpd_sasl_auth_enable = yes broken_sasl_auth_clients = yes smtpd_sasl_local_domain = smtpd_sasl_security_options = noanonymous smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination, warn_if_reject, reject_unknown_client, warn_if_reject, reject_unknown_hostname, check_relay_domains, reject --snip--helo_required = Wir nehmen nur Anfragen an, wenn der Client ein "ehlo $Domain" schickt. Hiermit sind wir schon am Ende unserer main.cf angekommen. Wenn Ihr alles so gemacht habt, wie ich beschrieben, dann sollte der Mailserver schon wirklich gut laufen, - oder doch nicht? - Nein der Server wird nicht gut laufen. Warum? Das werden wir jetzt analysieren. Bitte editiert die Datei master.cf und ändert folgendes ab. --snip-- smtp inet n smtpd --snip--in --snip-- smtp inet n smtpd -v --snip--Hier bekommen wir dann mehr informationen in der Logdatei /var/log/mail.info Wenn wir uns diese Datei nun anschauen und dabei versuchen eine Email abzuschicken, dann sehen wir das der SMTPD einen "bad command" --snap-- 11879427-Dec 31 01:56:13 server1 postfix/master[31234]: warning: process /usr/lib/postfix/smtpd pid 31238 exit status 1 11879538:Dec 31 01:56:13 server1 postfix/master[31234]: warning: /usr/lib/postfix/smtpd: bad command startup -- throttling --snap--Ich habe lange gebraucht, bis ich hinter den Fehler kam. In der Postfix Version 1.1.11.0-3 wird der String "smtpd_sasl_local_domain" überprüft. Ist diese Konfigurationszeile nicht vorhanden, so wird automatisch $mailname als Parameter genommen. Lassen wir die Zeile wie oben leer, dann wird nichts übernommen, wir können aber auch keine Emails verschicken weil der Kind-Prozess von Postfix bei jedem Aufruf stirbt. Nun haben wir zwei Möglichkeiten. Wir können mittels apt-get source postfix uns den Source herunterladen und in C rumfummeln. Dieses funktioniert zweifelslos. Ich habe dazu die überprüfung des Strings einfach auf eine minimale Länge von 0 gesetzt und die Sachen neu übersetzt. Bei dem nächsten Update hätte ich jedoch das selbe Problem, daher habe ich mir einfach mal gedacht wir versuchen die Version aus dem unstable Tree. Da Postfix allgemein sehr sicher ist und dazu noch in einer CHROOT Umgebung läuft, sehe ich das an der Stelle mal nicht so eng. Weiterhin ist der letzte schwere Security-Bug schon über ein Jahr her. Damit wir auch das System sauber halten, legen wir die Datei /etc/apt/preferences an. Dort schreiben wir folgendes rein: --snip-- Package: * Pin: release o=Debian,a=stable Pin-Priority: 900 Package: * Pin: release o=Debian,a=testing Pin-Priority: 400 Package: * Pin: release o=Debian,a=unstable Pin-Priority: 300 Package: * Pin: release o=Debian Pin-Priority: -1 --snip--Anschliessend brauchen wir noch die testing und unstable Einträge in unserer /etc/apt/sources.list damit wir ein apt-get updateausführen können. Jetzt können wir mittels apt-get -t unstable postfix postfix-tlsunseren Postfix aus dem unstable-Tree installieren. Hier nutzen wir selbstverständlich die selben Konfigurationsdateien wie auch schon bei unserem "alten" Postfix. Herzlichen Glückwunsch. Wir haben nun ein schönen Postfix installiert der schon fast funktioniert. Wir müssen nun aus dem Postfix heraus gehen und uns an die Konfiguration von SASL machen. Wir nutzen zum authentifizieren den "saslauthd" welcher im Packet von "sasl2-bin" ist. Hierzu editieren wir die Datei /etc/default/saslauthd. Wir müssen hier folgende Einträge setzen/ändern: --snip-- START=yes MECHANISMS="pam" --snip--Warum das jetzt so ist, möchte ich nicht erklären. Welche Authentifikationstypen es noch gibt steht in der Datei ausführlich beschrieben. Anschliessend starten wir den saslauthd mit /etc/init.d/saslautd start. Nun werden wir sehen, daß trotzdem noch nicht alles so funktioniert wie wir wollen. Aber auch hier gibt es eine Lösung ;) Bitte führt die folgenden Kommandos einfach nur aus, wer sich für den Sinn und Zweck interessiert, kann mich gerne per Email fragen. rm -rf /var/run/saslautd mkdir /var/spool/postfix/run/saslauthd ln -s /var/spool/postfix/run/saslauthd /var/run/ mkdir /var/spool/postfix/usr/lib/sasl2 rm /usr/lib/sasl2/smtpd.conf /etc/postfix/sasl2/smtpd.conf -rf touch /var/spool/postfix/usr/lib/sasl2/smtpd.conf ln -s /var/spool/postfix/usr/lib/sasl2/smtpd.conf /etc/postfix/sasl/ ln -s /var/spool/postfix/usr/lib/sasl2/smtpd.conf /usr/lib/sasl2/smtpd.confNun öffnen wir die Datei /var/spool/postfix/usr/lib/sasl2/smtpd.conf und fügen folgende Zeile ein: --snip-- pwcheck_method: saslauthd --snip--Nun machen wir in einem eigenem Festern das Logfile auf. Benutzt dazu den Befehl tail -f /var/log/mail.info . Wenn Ihr euch jetzt am Server per SMTPD Authentifiziert, dann seht ihr das es funktioniert. Sollten hier irgendwelche Fehler drinn sein, so schickt mir bitte eine Email, ich werde das dann korrigieren. Ich empfange auch gerne Tipps und/oder Kritik gleich welcher Art. Wenn euch die Dokumentation gefällt und ich euch helfen konnte, dann freue ich mich natürlich ebenfalls über eine Nachricht, vielleicht werde ich dann in Zukunft noch mehr solcher Dokus über einzelne Dienste schreiben. Grüße Henrik Hasenkamp Henrik Hasenkamp, 03.01.2004. |
