Postfix -> SASL gegen LDAP

tom_tom

New Member
Hallo,
ich versuche derzeit einen neuen E-Mail-Server auf CentOS 6.2 (erstesmal mit CentOS, bisher nur Debian+Ubuntu) aufzusetzen.
Zum Einsatz kommen hierbei Zarafa, OpenLDAP, SASL und Postfix.

Ich möchte die SMTP-Authentifikation über SASL gegen LDAP machen. Mit testsaslauthd kriege ich auch ein OK zurück -> saslauthd gegen LDAP funtkioniert somit.

Versuche ich nun über telnet Postfix anzusprechen, bekomme ich die folgenden Meldungen
Server: /var/log/messages
Code:
saslauthd[1535]: detach_tty      : master pid is: 1535
saslauthd[1535]: ipc_init        : listening on socket: /var/run/saslauthd/mux
postfix/smtpd[1635]: SQL engine 'mysql' not supported
postfix/smtpd[1635]: auxpropfunc error no mechanism available
Client:
Code:
telnet XXX.XXX.XXX.XX 25
Trying XXX.XXX.XXX.XX...
Connected to XXX.XXX.XXX.XX
Escape character is '^]'.
220 mail.XXX.de ESMTP
ehlo me
250-mail.XXX.de
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
503 5.5.1 Error: authentication not enabled
quit
221 2.0.0 Bye

Ich kappiere nicht, warum hier SQL angesprochen wird und nicht saslauthd. Über eine Hilfestellung wäre ich unheimlich dankbar :-)

/etc/sasl2/smtpd.conf
Code:
pwcheck_method: saslauthd
mech_list: DIGEST-MD5 CRAM-MD5 plain login
log_level: 9

/etc/saslauthd.conf
Code:
ldap_servers: ldap://127.0.0.1
ldap_version: 3
ldap_search_base: ou=People,dc=XXX,dc=de
ldap_scope: sub
ldap_filter: (uid=%u)
ldap_auth_method: bind
log_level: 9

/etc/sysconfig/saslauthd
Code:
SOCKETDIR=/var/run/saslauthd
MECH=ldap
FLAGS="-O /etc/saslauthd.conf -c -r"

postconf -n
Code:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
default_destination_concurrency_limit = 20
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailbox_command = /usr/bin/zarafa-dagent "$USER"
mailbox_transport = zarafa: zarafa_destination_recipient_limit = 1
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = XXX.de
myhostname = mail.XXX.de
mynetworks = XXX.XXX.XXX.XXX, 127.0.0.0/8
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.6.6
sample_directory = /usr/share/doc/postfix-2.6.6/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtp_bind_address = XXX.XXX.XXX.XXX
smtp_host_lookup = dns, native
smtp_tls_security_level = may
smtpd_banner = $myhostname ESMTP
smtpd_client_new_tls_session_rate_limit = 10
smtpd_data_restrictions = reject_unauth_pipelining  reject_multi_recipient_bounce  permit
smtpd_delay_reject = yes
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_invalid_helo_hostname
smtpd_junk_command_limit = 50
smtpd_recipient_restrictions = reject_invalid_hostname  reject_invalid_helo_hostname  reject_non_fqdn_helo_hostname  reject_non_fqdn_hostname  reject_non_fqdn_sender  reject_non_fqdn_recipient  reject_unknown_sender_domain  reject_unknown_recipient_domain  reject_unauth_pipelining  permit_sasl_authenticated  permit_mynetworks  reject_unauth_destination  reject_rbl_client zen.spamhaus.org  reject_rbl_client bl.spamcop.net  reject_rbl_client sbl-xbl.spamhaus.org  reject_rbl_client whois.rfc-ignorant.org  reject_rbl_client ix.dnsbl.manitu.org  reject_rbl_client dnsbl.ahbl.org  reject_rbl_client rhsbl.ahbl.org  check_sender_mx_access cidr:/etc/postfix/bogus_mx.cf  permit
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd
smtpd_sender_restrictions = permit_sasl_authenticated        permit_mynetworks        reject_non_fqdn_sender        reject_unknown_sender_domain        reject_unlisted_sender        reject_unverified_sender        permit
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/ssl/public/de/XXX/smtp.pem
smtpd_tls_key_file = /etc/ssl/private/de/XXX/smtp.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:/var/spool/postfix/smtpd_tls_cache
smtpd_tls_session_cache_timeout = 3600s
strict_rfc821_envelopes = yes
tls_random_source = dev:/dev/urandom
unknown_local_recipient_reject_code = 550
virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf
virtual_mailbox_domains = $mydomain
virtual_mailbox_maps = ldap:/etc/postfix/ldap-users.cf
virtual_transport = lmtp:127.0.0.1:2003

/etc/postfix/master.cf
Code:
[...]
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_sender=yes
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o broken_sasl_auth_clients=yes
[...]
 
Als erstes müssen Postfix und SASL in der gleichen Gruppe sein, je nach System in der Gruppe SASL oder MAIL. bei Debian reicht meist Postfix zu Gruppe SASL hin zu zu fügen.

Das bedeutet das das Verzeichniss in /var/run/sasl oder saslauthd von Postfix und SASL benutzt und beschrieben werden darf. Der SASL Socket muss natürlich in Postfix und SASL gleich sein.

Damit Postfix SASL nutzt sollte unter /usr/lib/sasl2 die Datei smtp.conf existieren, es bietet sich an auch einen Link smtpd.conf auf die smtp.conf zu machen. Manche brauchen smtpd.conf machen smtp.conf.

In der smtp.conf sollte folgendes drin stehen
Code:
pwcheck_method: saslauthd
saslauthd_path:/var/run/saslauthd/mux
#saslauthd_path:/var/spool/postfix/var/run/saslauthd/mux
mech_list: PLAIN LOGIN
log_level: 7
In den Systemdocus stehen ein Paar Tipps drin je nach SASL Version und Features die in SASL drin sind sieht das ein bisschen anders aus.

Als nächstes sollte unter /etc die datei saslauthd.conf existieren in der sollte
Code:
ldap_servers: ldap://localhost
ldap_bind_dn: o=bla,dc=meinel,dc=domain
ldap_password: meinpass
ldap_search_base: dc=mein,dc=suchfilter
ldap_scope: sub
ldap_filter: (uid=%u)(andereGeileAttribute=!ja)
drin stehen.
SASL sollte natülich auf LDAP umgestellt sein damit SASL auch die LDAP Libs nutzt, die Treads sollten für SASL nicht zu wenig sein damit der immer genug Reserven für die Anmeldungen hat, wenns zu wenig sind mekkert Postfix das er den Auth nicht machen kann.
Die LDAP sollte laufen und auch schon mit Daten gefüllt sein.
in Postfix muss nur noch der übliche smtpd_sasl_* und smtpd_sasl_* Kram Aktiv sein damit Postfix weis er soll SASL suchen und nehmen.

Sven
 
Hallo,

also ich habe Postfix der Gruppe saslauthd hinzugefügt. Dann habe ich noch /etc/sasl/smtpd.conf auf /usr/lib/sasl2/smtpd.conf und /usr/lib/sasl2/smtp.conf verlinked. Die saslauthd habe ich so gelassen, da dieser Teil mit Testsaslauthd funktioniert.
Allerdings bekomme ich weiterhin die Fehlermeldung

Code:
Nov 16 18:42:16 SQL engine 'mysql' not supported
Nov 16 18:42:16 auxpropfunc error no mechanism available

Warum MySQL, das habe ich nirgends konfiguriert?!
 
Einen kleinen Teilerfolg habe ich. Die Fehlermeldung habe ich entfernt. Hierfür habe ich die Datei /usr/lib64/sasl2/libsqlite.so umbenannt. Hiernach tritt kein Fehler mehr auf.

Testsaslauthd funktioniert:
Code:
[root@server admin]# testsaslauthd -s smtpd -u admin -r server.de -p passwort
0: OK "Success."

Die Debugausgabe von Saslauthd:
Code:
[root@server admin]# saslauthd -m /var/run/saslauthd -a ldap -O /etc/saslauthd.conf -d
saslauthd[7950] :main            : num_procs  : 5
saslauthd[7950] :main            : mech_option: /etc/saslauthd.conf
saslauthd[7950] :main            : run_path   : /var/run/saslauthd
saslauthd[7950] :main            : auth_mech  : ldap
saslauthd[7950] :ipc_init        : using accept lock file: /var/run/saslauthd/mux.accept
saslauthd[7950] :detach_tty      : master pid is: 0
saslauthd[7950] :ipc_init        : listening on socket: /var/run/saslauthd/mux
saslauthd[7950] :main            : using process model
saslauthd[7951] :get_accept_lock : acquired accept lock
saslauthd[7950] :have_baby       : forked child: 7951
saslauthd[7950] :have_baby       : forked child: 7952
saslauthd[7950] :have_baby       : forked child: 7953
saslauthd[7950] :have_baby       : forked child: 7954
saslauthd[7951] :rel_accept_lock : released accept lock
saslauthd[7952] :get_accept_lock : acquired accept lock
saslauthd[7951] :do_auth         : auth success: [user=admin] [service=smtpd] [realm=server.de] [mech=ldap]
saslauthd[7951] :do_request      : response: OK

Über Telnet
Code:
telnet 1XXX.XXX.XXX.XXX 25
Trying XXX.XXX.XXX.XXX...
Connected to XXX.XXX.XXX.XXX.
Escape character is '^]'.
220 mail.server.de ESMTP
ehlo me
250-mail.server.de
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH DIGEST-MD5 LOGIN CRAM-MD5 PLAIN
250-AUTH=DIGEST-MD5 LOGIN CRAM-MD5 PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
535 5.7.8 Error: authentication failed: authentication failure
QUIT

In der Saslauthd-Debug-Ausgabe rührt sich nichts. Daraus muss ich schließen, dass Postfix sasl nicht anspricht, oder?
 
Last edited by a moderator:
Testsaslauthd hat nichts mit Postfix zu tun, es dient lediglich dazu es zu Testen. Damit Postfix SASL benutzt musst das Postfix sagen. Das geht über die smtp_*** Configs in Postfix.
Zum Testen ob Postfix überhaupt SASL macht kannst du den smtp oder smtpd Dämon mit der Option "-v" starten. Damit wird Postfix SEHR gesprächig.

Wie man Postfix einstellt um SASL für smtp* zu Benutzen sollten dir die einschlägigen HOWTOS sagen.

Sven
 
Back
Top