[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: saslauthd? I can't seem to get it installed for postfix..



On 2004-12-21 @ 15:26:54 (week 52) Charles Read wrote:

> OK, so I got the postfix-tls package, didn't know about that thanks!  
> But still cant find saslauthd... don't I need to start it?  Now an ehlo 
> over telnet shows AUTH and STARTTLS like expected and I created 
> /usr/local/lib/sasl/smtpd.conf with the line 'pwcheck_method: pam' 
> (although shouldn't it be pwcheck_method:saslauthd ?) but when I try to 
> login via an MUA it rejects my system user passwords....  can you 
> please help me with what this means?

Here's a recipy for getting SASL running with Postfix on a Sarge box.
Remember that by default the Debianized version of Postfix runs in a jail
and SASL is notoriously difficult to setup in a jail. That being said,
the following seems to work quite nicely.

Howto setup SASL for postfix under Debian Sarge
===============================================

1]  Get SASL/TLS support for postfix:
    $ apt-get install postfix-tls
2]  Get the SASL Authentication daemon and SASL authentication modules:
    $ apt-get install sasl2-bin libsasl2-modules
3]  The Debian postfix runs its subprocesses chrooted, so we need to make sure 
    both postfix and saslauthd can access the necessary files:
    $ mkdir -p /var/spool/postfix/var/run/saslauthd
    $ chown root:sasl /var/spool/postfix/var/run/saslauthd
    $ chmod 710 /var/spool/postfix/var/run/saslauthd
    $ vi /etc/fstab
    $ grep sasl /etc/fstab
    /var/run/saslauthd /var/spool/postfix/var/run/saslauthd bind bind 0 0
    $ mount /var/spool/postfix/var/run/saslauthd
    Thanks go to Lennart Poettering for this very useful piece of information!
4]  Add postfix to the sasl group:
    $ vigr
    $ grep sasl /etc/group
    sasl:x:45:postfix
5]  Edit the saslauthd configuration file so that the daemon will be started 
    automatically at boot time and knows what authentication mechanisms to use:
    $ vi /etc/default/saslauthd
    $ cat /etc/default/saslauthd
    # This needs to be uncommented before saslauthd will be run automatically
    START=yes
    
    # You must specify the authentication mechanisms you wish to use.
    # This defaults to "pam" for PAM support, but may also include
    # "shadow" or "sasldb", like this:
    # MECHANISMS="pam shadow"
    MECHANISMS="sasldb"

    # You can only use one mechanism at a time even though a lot of examples 
    # suggest otherwise. Trying "/usr/sbin/saslauthd -a sasldb -a pam" or
    # "/usr/sbin/saslauthd -a "pam sasldb" will result in an error message.
6]  Start the saslauthd daemon, verify it is up and has all the mechanisms:
    $ /etc/init.d/saslauthd start
    $ ps wax | grep saslauthd
    14523 ?        Ss     0:00 /usr/sbin/saslauthd -a sasldb
    14524 ?        S      0:00 /usr/sbin/saslauthd -a sasldb
    14525 ?        S      0:00 /usr/sbin/saslauthd -a sasldb
    14526 ?        S      0:00 /usr/sbin/saslauthd -a sasldb
    14527 ?        S      0:00 /usr/sbin/saslauthd -a sasldb
    $ saslauthd -v
    saslauthd 2.1.19
    authentication mechanisms: sasldb getpwent kerberos4 kerberos5 pam rimap shadow ldap
7]  Let postfix know that you want to use saslauthd for authentication:
    $ mkdir /etc/postfix/sasl
    $ vi /etc/postfix/sasl/smtpd.conf
    $ cat /etc/postfix/sasl/smtpd.conf
    pwcheck_method: saslauthd
    mech_list: plain login
    $ ls -l /etc/postfix/sasl/smtpd.conf
    -rw-r-----  1 root root 50 Oct 31 15:14 /etc/postfix/sasl/smtpd.conf
8]  Instead of running saslauthd with sasldb as an authentication mechanism it is
    nowadays recommended to use the "auxprop" plugin. For that skip steps 3, 5, 
    6 and 7 and do this:
    $ mkdir /etc/postfix/sasl
    $ vi /etc/postfix/sasl/smtpd.conf
    $ cat /etc/postfix/sasl/smtpd.conf
    pwcheck_method: auxprop
    mech_list: plain login
    $ ls -l /etc/postfix/sasl/smtpd.conf
    -rw-r-----  1 root root 50 Oct 31 15:14 /etc/postfix/sasl/smtpd.conf
    Remember that testsaslauthd will not work if saslauthd is not running!
9]  Create a PAM file for postfix and add it to the jail (only needed if PAM is 
    used with saslauthd):
    $ cp /etc/pam.d/other /etc/pam.d/smtp
    $ chmod 644 /etc/pam.d/smtp
    $ chown root:root /etc/pam.d/smtp
    $ vi /etc/pam.d/smtp
    $ cat /etc/pam.d/smtp
    @include common-auth
    @include common-account
    @include common-session
    $ mkdir -p /var/spool/postfix/etc/pam.d/
    $ cp /etc/pam.d/smtp /var/spool/postfix/etc/pam.d/
    Postfix will warn in /var/log/mail.warn if these files differ.
10] Setup a SASL test account (remember the jail):
    $ saslpasswd2 -c -u `postconf -h myhostname` -a smtpauth testuser
    $ ls -l /etc/sasldb2
    -rw-r-----  1 root sasl 12288 Oct 31 14:22 /etc/sasldb2
    $ cp /etc/sasldb2 /var/spool/postfix/etc/sasdb2
    Postfix will warn in /var/log/mail.warn if these files differ.
    Use this to remove the same user from sasldb2:
    $ saslpasswd2 -d -u `postconf -h myhostname` testuser
11] Verify that "testuser" was added correctly:
    $ sasldblistusers2
    testuser@hostname userPassword
12] Check if authentication through SASL is functioning:
    testsaslauthd -u testuser -p testpasswd
    0: NO "authentication failed"
    testsaslauthd -u testuser -p testpasswd -r `postconf -h myhostname`
    0: OK "Success."
13] Edit /etc/postfix/main.cf to add SASL support:
    $ vi /etc/postfix/main.cf
    $ grep sasl /etc/postfix/main.cf
    smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated check_relay_domains
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    smtpd_sasl_local_domain = $myhostname
    broken_sasl_auth_clients = yes
    $ postfix reload
    $ postfix check
14] Test it over SMTP (remember to use base64 encoding):
    $ perl -MMIME::Base64 -e 'print encode_base64("testuser\0testuser\0testpasswd");'
    dGVzdHVzZXIAdGVzdHVzZXIAdGVzdHBhc3N3ZA==
    $ telnet mailhost 25
    Trying 192.168.1.1...
    Connected to mailhost.organization.org.
    Escape character is '^]'.
    220 mailhost.organization.org ESMTP Postfix (Debian/GNU)
    auth plain dGVzdHVzZXIAdGVzdHVzZXIAdGVzdHBhc3N3ZA==
    235 Authentication successful
    quit
    221 Bye
    Connection closed by foreign host.
15] Send a test message from a remote host and try to read it: 
    $ echo "Tested at `date` from `hostname -f`" | mail -s "mail test from `hostname` - `date`" postmaster


I'd recommend to setup TLS too to protect the data in transit. Here's another recipy to do that.

How to setup TLS for postfix under Debian
=========================================

1]  Install openSSL if its not yet on the machine:
    $ apt-get install openssl
2]  Edit the openSSL configuration file
    $ vi /etc/ssl/openssl.cnf
    $ grep '^[a-zA-Z0-9.]\+_default' /etc/ssl/openssl.cnf
    countryName_default             = Country
    stateOrProvinceName_default     = State
    localityName_default            = City
    0.organizationName_default      = Organization
3]  Generate a certificate for the local CA:
    $ /usr/lib/ssl/misc/CA.pl -newca
    CA certificate filename (or enter to create)

    Making CA certificate ...
    Generating a 1024 bit RSA private key
    ........++++++
    ................................++++++
    writing new private key to './demoCA/private/./cakey.pem'
    Enter PEM pass phrase:
    Verifying - Enter PEM pass phrase:
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [Country]:
    State or Province Name (full name) [State]:
    Locality Name (eg, city) [City]:
    Organization Name (eg, company) [Organization]:
    Organizational Unit Name (eg, section) []:
    Common Name (eg, YOUR name) []:Organizational CA
    Email Address []:ca@organization.org
4]  Adjust /usr/lib/ssl/misc/CA.sh so it can create passwordless certificates:
    $ cp /usr/lib/ssl/misc/CA.sh /etc/ssl/CA-nodes.sh
    $ vi /etc/ssl/CA-nodes.sh
    $ grep -n nodes /etc/ssl/CA-nodes.sh
    52:    $REQ -new -nodes -x509 -keyout newreq.pem -out newreq.pem $DAYS
    58:    $REQ -new -nodes -keyout newreq.pem -out newreq.pem $DAYS
    [NOTE] This is not necessary anymore, instead use the command:
    /usr/lib/ssl/misc/CA.pl -newreq-nodes
5]  Generate a server certificate for postfix:
    $ cd /etc/ssl
    $ ./CA-nodes.sh -newreq
    Generating a 1024 bit RSA private key
    ............................++++++
    .............................++++++
    writing new private key to 'newreq.pem'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [Country]:
    State or Province Name (full name) [State]:
    Locality Name (eg, city) [City]:
    Organization Name (eg, company) [Organization]:
    Organizational Unit Name (eg, section) []:
    Common Name (eg, YOUR name) []:mail.organization.org
    Email Address []:postmaster@organization.org

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    Request (and private key) is in newreq.pem
6]  Sign the certificate
    $ ./CA-nodes.sh -sign
    Enter the correct passphrase, check the listed certificate details and 
    confirm that you want to sign it
7]  Move the certificate and private key to their stores:
    $ cp newreq.pem /etc/ssl/private/postfix-key.pem
    $ cp newcert.pem /etc/ssl/certs/postfix-cert.pem
    $ cp demoCA/cacert.pem /etc/ssl/certs/ca-cert.pem
8]  Protect the private key:
    $ chmod 600 /etc/ssl/private/postfix-key.pem
9]  Add the propper settings to main.cf:
    $ vi /etc/postfix/main.cf
    $ grep tls /etc/postfix/main.cf
    smtpd_use_tls = yes
    smtpd_tls_auth_only = yes
    smtpd_tls_key_file = /etc/ssl/private/postfix-key.pem
    smtpd_tls_cert_file = /etc/ssl/certs/postfix-cert.pem
    smtpd_tls_CAfile = /etc/ssl/certs/ca-cert.pem
    smtpd_tls_received_header = yes
    smtpd_tls_session_cache_timeout = 3600s
    tls_random_source = dev:/dev/urandom
    #smtpd_tls_loglevel = 3
    $ postfix reload
    $ postfix check
10] Test it over SMTP:
    $ telnet mailhost 25
    Trying 192.168.1.1...
    Connected to mailhost.organization.org.
    Escape character is '^]'.
    220 mailhost.organization.org ESMTP Postfix (Debian/GNU)
    STARTTLS
    220 Ready to start TLS
    Stunnel provides for a better way of doing this:
    $ cat > /tmp/smtp_sasl_session << EOM
    > EHLO mjollnir
    > AUTH PLAIN dGVzdHVzZXIAdGVzdHVzZXIAdGVzdHBhc3N3ZA==
    > NOOP
    > NOOP
    > QUIT
    > EOM
    $ stunnel -c -f -n smtp -r mailhost.organization.org:25 -D0 < /tmp/smtp_sasl_session
    220 mailhost.organization.org ESMTP Postfix (Debian/GNU)
    250-mailhost.organization.org
    250-PIPELINING
    250-SIZE 26214400
    250-ETRN
    250-AUTH LOGIN PLAIN
    250-AUTH=LOGIN PLAIN
    250 8BITMIME
    235 Authentication successful
    250 Ok
    250 Ok
    221 Bye

I've been thinking of putting this mini-howto online, as this question pops up
quite often. But I'd probably need to clean it up a bit before I do
that though...

Grx HdV



Reply to: