Postfix Mailserver mit SASL Auth auf Debian Lenny installieren
Dies ist eine kurze Anleitung wie man den Mailserver Postfix mit SASL auf Debian Lenny installiert. Mit Hilfe von SASL wird der Zugriff auf den Mailserver gesteuert und eingeschränkt, damit er nicht als Open Relay zum spamen missbraucht werden kann. Hinweis: Der Mailserver wird nur zum versenden benutzt nicht zum empfangen! Außerdem wird kein SSL/TLS Support geboten und die SASL Authentifizierung wird über PLAIN gelöst. Es gibt auch nur sehr wenige Erklärungen in diesem Artikel. Das liegt daran, das ich mir zwar Notizen gemacht habe als ich mich mit dem Thema beschäftigt habe, aber viele Sachen weg gelassen habe, weil ich dachte daran erinnere ich mich schon. Nun 6 Monate später erinnere ich mich leider nicht mehr... Damit nicht auch der Rest verloren geht hier also das was ich noch weiß. Für mich reicht dies um Postfix zu installieren und nicht als Open Relay laufen zu lassen. Zum Einsatz kommt dieser Server als Mailgateway für einige Webseiten die keine eigenen Mailserver haben.
Installation
$ aptitude install postfix sasl2-bin libsasl2-modules
In der Auswahl Internet Site setzen.
Konfiguration
$ nano /etc/postfix/main.cf
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# postfix
myhostname = mail.example.org
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
# SASL Config
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
Die Config kann man hier mit auf Fehler prüfen.
$ postfix check
Jetzt noch SASL konfigurieren.
$ nano /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd mech_list: PLAIN LOGIN saslauthd_path: /var/run/saslauthd/mux autotransition:true
Da postfix bei Debian gechrootet läuft, muss man den saslauthd run Ordner in den postfix Chroot verschieben. Das macht man wie folgt:
$ mkdir -p /var/spool/postfix/var/run $ cd /var/run $ mv saslauthd/ /var/spool/postfix/var/run $ ln -s /var/spool/postfix/var/run/saslauthd/ saslauthd $ nano /etc/default/saslauthd
START=yes MECHANISMS="shadow" OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
$ adduser postfix sasl $ /etc/init.d/saslauthd start $ /etc/init.d/postfix restart
Zugriffssteuerung
Einen Account anlegen:
$ useradd -s /bin/false -d /bin/false NAME $ passwd NAME
Account löschen:
$ userdel NAME $ /etc/init.d/saslauthd restart
Testen
Zum testen muss man den AUTH String erstellen. Hier 2 Methoden wie man ihn erstellen kann.
$ echo -ne '\0Benutzername\0Passwort' | openssl enc -base64
$ perl -MMIME::Base64 -e 'print encode_base64("\0Benutzername\0Passwort");'
Das ergibt dann das hier:
AHRlc3RlZABoZGJhMg==
Nun versuchen wir damit auf den Mailserver zu connecten.
$ telnet localhost 25 $ ehlo localhost $ auth plain AHRlc3RlZABoZGJhMg== $ quit
Das gewünschte Ergebnis sollte in etwa so aussehen.
$ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 localhost ESMTP Postfix (Debian/GNU) ehlo localhost 250-localhost 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN auth plain AHRlc3RlZABoZGJhMg== 235 2.7.0 Authentication successful quit 221 2.0.0 Bye Connection closed by foreign host.
Wenn es hier Probleme gibt, dann liegt dies meistens an den Zugriffsrechten der Dateien... Wie oft ich mich da schon ange******* habe... Das letzte mal als ne Stunde dafür drauf ging war es der /var/spool/postfix/var/ Ordner der keine Lese-/Ausführrechte für Global hatte. Das fällt einem gar nicht auf wenn man nicht die umask von root geändert hat. Da ich dies nun aber immer sofort nach der Installation mache, gibt es hier Probleme. Am besten die Zugriffsrechte aller Dateien prüfen die neu angelegt wurden (nach der Installation). Dieser spezielle Fall ist recht einfach zu fixen:
$ chmod -R 755 /var/spool/postfix/var $ /etc/init.d/postfix restart && /etc/init.d/saslauthd restart
Ein weiterer guter Test ist sich als User postfix einzuloggen und mit testsaslauthd zu prüfen ob die Authentifizierung klappt.
$ su -s /bin/bash postfix $ /usr/sbin/testsaslauthd -u USER -p PASSWORD
Wenn es hier Probleme mit Zugriffsrechten gibt weiß man wo man zu suchen hat.
11 Kommentare
Falk Husemann
schrieb am 06.08.2010 um 12:23 Uhr
Hallo,
sehr interessant gemacht, meine Einrichtung sieht nicht anders aus. Wie siehst du die Entwicklung hin zum SASL-Authentifikator von dovecot? Schonmal probiert?
Ansonsten ist mir aufgefallen, dass deine Konfiguration noch den VRFY Befehl zulaesst. Eine grosse Einladung an Spammer, die damit pruefen koennen, ob beliebige E-Mail Adressen auf deinem Mailserver zustellbar sind. Ich schalte den Befehl auf allen von mir administrierten Mailservern als erstes ab:
disable_vrfy_command = yes
Kann ich dir nur empfehlen. RFC821 konform muesste es (wenn ich das RFC richtig verstehe) trotzdem sein.
Gruesse
kostaki
schrieb am 06.08.2010 um 13:03 Uhr
Danke für den Tipp. Mailserver sind mir immer noch irgend wie fremd. Mails sind zwar wichtig, aber bisher hat es bei mir noch nicht dazu gereicht mich mal richtig damit auseinander zu setzen. Da bezahle ich lieber die paar Euro im Monat und muss mich dafür nicht um Datensicherung, Spam, Zugriffsschutz usw. kümmern. Das System hier benutze ich nur für Webserver die keine eigenen Mailserver haben, damit die auch Mails verschicken können.
christian
schrieb am 31.12.2010 um 22:23 Uhr
Hallo,
erst kürzlich bin ich über diesen Artikel und dann später auf diesen Blog gestoßen. Hier möchte ich erst mal sagen: super Blog, interessant mit vielen tollen Tipps rund um die Web- und Linux-Welt. Echt klasse.
Nun zum Eigentlichen: Ich habe ebenfalls einen Mailserver im Web stehen (soll vorkommen;) und möchte diesen gerne mittels SASL absichern.
Nachdem ich diese Anleitung bis zum Ende gefolgt habe, ist es allerdings immer noch möglich, mich per Telnet an meinem Mailserver anzumelden, und E-Mails zu versenden:
220 vienna.unix.barthel-connect.de ESMTP Postfix (Debian/GNU)
….
250-AUTH PLAIN LOGIN
…
MAIL FROM: root@google.de
250 2.1.0 Ok
rcpt to: root
250 2.1.5 Ok
Ist es irgendwie möglich, dies zu verhindern! Im Prinzip sollte ein Mailversand nur nach erfolgreicher Authentifizierung (mittels auth plain AHRlc3QAc2NobmVl) vonstatten gehen!
Allerdings sollte der MTA auch Mails von anderen MTAs annehmen können! Es sollte halt ähnlich wie bei großen MTA-Relays SICHER funktionieren ….
Schönen Gruß
Christian
kostaki
schrieb am 01.01.2011 um 11:13 Uhr
Hm wie schon gesagt sind Mailserver nicht gerade meine Spezialität… Ich hab das gerade auch ausprobiert und vom localhost aus kann ich mails auch ohne auth verschicken. Versuche ich das aber von einem remote host aus, bekomme ich “554 5.7.1: Relay access denied”. Nach einer Authentifizierung funktioniert das verschicken dann wieder. Bin mir jetzt nicht ganz sicher ob das das gewünschte Ergebnis ist oder nicht. Wenn du da mehr Informationen hast, würde ich mich über ein Kommentar freuen, da ich doch einiger von diesen Servern im Einsatz habe und nun etwas verunsichert bin…
christian
schrieb am 01.01.2011 um 19:55 Uhr
Ich hab noch einmal ein bisschen recherchiert: https://debianforum.de/forum/viewtopic.php?f=8&t=57480&start=0
So, wie ich das ganze nun verstehe:
Wenn ich lokal angemeldet bin, dann kann ich Nachrichten eigentlich überall hinsenden.
Sofern ich mich von extern verbinde, kann ich Mails nur für die “Zieldomänen” absenden (sofern ich kein offenes Relay haben möchte)
Möchte ich Mails von extern ebenfalls an externe Domänen senden, so muss man SASLAUTH benutzen.
Was mich bisher an der ganzen Sache irritiert, ist das ich ja die Envelope-Adresse beliebig setzen kann. Es ist also möglich, dass ein externer Benutzer sich für jemanden ausgiebt und Nachrichten an einen internen Benutzer sendet. Bei meiner aktuellen Konfigurations konnte ich so z. B. mit aktivem SASL Mails von root@google.de an lokale Benutzer zustellen.
Um das fälschen von Absenderadressen zu verhindern, gibt es allerdings auch bereits eine (umstrittene) Lösung:
http://de.wikipedia.org/wiki/Sender_Policy_Framework
christian
schrieb am 02.01.2011 um 16:51 Uhr
Vielleicht noch ein kleiner Nachtrag: Etwa in der Mitte auf http://www.dnsgoodies.com/ gibt es einen OpenRelay-Check. Jeder der Angst vor der Konfiguration eines Mailservers hat, kann hier prüfen, ob Spammer evtl das System ausnutzen können (man sieht auch sehr schön die abgesetzten Kommandos)
Gruß
kostaki
schrieb am 03.01.2011 um 09:53 Uhr
Klingt gut. Habe meine Server nochmal alle geprüft und alles funktioniert wie erwartet. Damit bin ich nun erst mal beruhigt.
setchan
schrieb am 01.04.2011 um 13:46 Uhr
ioh habe alles so gemacht wie hier beschrieben nur bei denn punkt telnet da geht bei mir nich weiter T_T
/var/run# telnet localhost
-bash: telnet: Kommando nicht gefunden
kann mir wer helfen bitte
kostaki
schrieb am 01.04.2011 um 14:13 Uhr
aptitude install telnet
setchan
schrieb am 01.04.2011 um 14:20 Uhr
das hat sich erledigt seltsamer weise musst ich mein root neu starten Oo
jetzt hab ich das problem
auth plain *********************************** <<< unkendlich gemacht XD
504 5.3.3 AUTH mechanism plain not available
kostaki kannste mir per teamweaverh elfen geht das
bitte
kostaki
schrieb am 01.04.2011 um 14:28 Uhr
schau mal ob in /etc/postfix/sasl/smtpd.conf mech_list: PLAIN LOGIN steht. Wenn nicht check am besten nochmal alle config’s wie oben.