Cyrus SASL

From Frotmail Projects
Jump to navigation Jump to search

Op deze pagina ga ik proberen uit te leggen hoe ik Postfix (2.2.10) aan de praat heb gekregen met Cyrus SASL (de Cyrus SASL versie komt uit het default slackware package. Deze heeft standaard geen ondersteuning voor MySQL en dit is ook niet het doel van deze howto)

Postfix opnieuw Compilen

Om TLS en SASL ondersteuning in Postfix te krijgen moeten we deze opnieuw compilen. Omdat mijn postfix configuratie gebruik maakt van MySQL voor de user accounts ga ik ook mysql support inbakken:

make clean
make -f Makefile.init makefiles \
    'CCARGS=-DUSE_TLS -DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -I/usr/include/sasl -DUSE_CYRUS_SASL' \
    'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'
make install

Ik ga er vanuit dat je reeds een werkende postfix installatie hebt en dus ga ik niet in op de verdere details van de postfix installatie

Configuratie Postfix

Ook hier ga ik ervanuit dat je reeds een werkende config hebt en dus alleen de aanvulling voor TLS en SASL nodig hebt.

De aanvulling van main.cf voor SASL:

smtpd_sasl_auth_enable = yes
smtpd_sasl2_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions =
      permit_sasl_authenticated,
      permit_mynetworks,
      reject_unauth_destination

Het is belangrijk dat de smtpd_sasl_local_domain leeg is! We zullen straks in moeten loggen met username@servername. Ik heb getest om dan servername als local_domain op te geven maar dit werkte niet. Als iemand hier een antwoord op heeft dan hoor ik het graag!

SASL zonder TLS heeft weinig nut en dus moet je ook onderstaand stuk toevoegen aan je config (doe je dat niet dan kan je toch SASL gebruiken maar dan zonder de encryptie).

De aanvulling voor main.cf voor TLS:

smtpd_use_tls = yes
#smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/server.key
smtpd_tls_cert_file = /etc/postfix/server.crt
smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

De certificaten moeten dan uiteraard wel in orde zijn. Deze kunnen we kopieren van de apache certificaten.

Config van SASL2

SASL moet ook geconfigureerd worden, in de configfile moet worden aangegeven waar de authorisatie gecontroleerd kan worden. In dit geval kiezen we voor saslauth-daemon.

Config /usr/local/lib/sasl2/smtpd.conf:

pwcheck_method: saslauthd
mech_list: LOGIN PLAIN

Deze daemon moeten we dan starten met:

chmod +x /etc/rc.d/rc.saslauthd
/etc/rc.d/rc.saslauthd start

Pas op: Op sommige installaties staat de sasl2 map in /usr/lib ipv /usr/local/lib, maak in dat geval een link aan:

ln -s /usr/lib/sasl2 /usr/local/lib/sasl2

Configuratie testen

Nu moeten we met telnet kunnen zien dat TLS en AUTH enabled zijn:

root@testbak:/# Telnet testserver 25
220 testserver ESMTP Postfix on testserver
EHLO test
250-testserver 
250-PIPELINING
250-SIZE 51200000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH CRAM-MD5 DIGEST-MD5 LOGIN PLAIN OTP
250-AUTH=CRAM-MD5 DIGEST-MD5 LOGIN PLAIN OTP
250 8BITMIME

Aanmaken users

Omdat we geen mysql kunnen gebruiken bij de standaard SASL moeten we even een aparte sasl user file maken, de commando's hiervoor zijn:

- saslpasswd2

- sasldblistusers2

Aanmaken testuser:

root@testserver:/# saslpasswd2 -c test
Password:
Again (for verification):

Zorgen dat postfix ook de db file kan lezen:

root@testserver:/# chmod 666 /etc/sasldb2

En tenslotte kunnen we kijken welke user er nu is aangemaakt:

root@testserver:/# sasldblistusers2
test@testserver: userPassword
test@testserver: cmusaslsecretOTP

We moeten nu dus ook test@testserver als username gebruiken!!

Testen

TLS is een beetje lastig om na te bootsen dus zullen we dit niet gebruiken bij de telnet test. De AUTH PLAIN functie is wel vrij gemakkelijk na te bootsen door de username en password samen met base64 te encoderen:

<?php echo base64_encode("test@testserver\0test@testserver\0testpass"); ?>

leert ons dat de login string

dGVzdEB0ZXN0c2VydmVyAHRlc3RAdGVzdHNlcnZlcgB0ZXN0cGFzcw==

is

Het bash-commando:

echo "<?php=base64_encode(\"test@testserver\\0test@testserver\\0testpass\"); ?>" | php

Test mail:

220 testserver ESMTP Postfix on testserver
EHLO LOCALHOST
250-testserver
250-PIPELINING
250-SIZE 51200000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH CRAM-MD5 DIGEST-MD5 LOGIN PLAIN OTP
250-AUTH=CRAM-MD5 DIGEST-MD5 LOGIN PLAIN OTP
250 8BITMIME
AUTH PLAIN dGVzdEB0ZXN0c2VydmVyAHRlc3RAdGVzdHNlcnZlcgB0ZXN0cGFzcw==
235 Authentication successful
MAIL FROM: <test@testserver>
250 Ok
RCPT TO: <test@otherdomain.tld>
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Test
.
250 Ok: queued as 7A984BD635


http://www.gentoo.org/doc/nl/virt-mail-howto.xml

http://ben.franske.com/blogs/bensbits.php/2005/09/06/postfix_smtp_auth_support_for_relayhost