Postfix Mailserver mit SASL Auth auf Debian Lenny installieren

2010-01-16 - kostaki 11 Kommentare »

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.

Ähnliche Artikel

  1. 11 Kommentare

  2. 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

  3. 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.

  4. 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

  5. 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…

  6. 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

  7. 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ß

  8. 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. :)

  9. 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

  10. kostaki
    schrieb am 01.04.2011 um 14:13 Uhr

    aptitude install telnet

    ;)

  11. 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

  12. 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.

Kommentar schreiben

*

*