Sendmail + TLS + Cyrus IMAP/SASL + LDAP + Kerberos V HowTo |
Sebastian Utz seut@netfrag.org
last changes
Revision 1.1 2003/01/27 09:11:05 jonen + create new
Install and configure Sendmail with TLS, Cyrus IMAP/SASL, LDAP, and Kerberos V support
The installation instructions described here are mainly debian only. For detailed installation instructions take a look at Resources, e.g. the ``OpenLDAP, OpenSSL, SASL and KerberosV HOWTO'' from Turbo Fredriksson explains a lot (great stuff!)...
To use all described features to sendmail the following have to be installed:
- Cyrus SASL v1 http://asg.web.cmu.edu/cyrus/sasl/ - Cyrus IMAP v1 http://asg.web.cmu.edu/cyrus/sasl/ - OpenLDAP 2 http://www.openldap.org/ - AMaViS (Milter) http://www.amavis.org/ - MIT Kerberos V http://web.mit.edu/kerberos/www/ - OpenSSL http://www.openssl.org/
debian testing/unstable:
- apt-get install amavis-milter
debian woody/stable:
- dowload latest amavis-milter_*.deb which could found at http://packages.debian.org/testing/mail/amavis-milter.html
- dpkg -i amavis-milter_*.deb
other systems
sorry but I'm using Debian, for install instructions on other distributions look at 'Resource' section and always google.
will try write some docu here soon, too....
- edit /etc/amavid.conf to configure your local settings e.g. your used anti-virus scanner
- start amavid with: /etc/init.d/amavid start
note: you should always start amavid *before* sendmail as the amavis docu explained...
- apt-get install sendmail
if software described at Prerequisites isn't installed yet, look at
- http://www.netfrag.org/~jonen/computing/install_cyrus_sasl_v1.html - http://www.netfrag.org/~jonen/computing/mini-howto-cyrus_imapd_v1-pam-kerberosV.html - others comming soon.....
after installing required packages, run
- sendmail config
or some more specifing scripts under '/usr/share/sendmail/' (e.g. /usr/share/update_auth to update SASL support) and follow the instructions printed, e.g. for updating TLS support:
- run: /usr/share/sendmail/update_tls - insert at sendmail.mc - debian stable/testing: include(`/etc/mail/starttls.m4')dnl - debian unstable: include(`/etc/mail/tls/starttls.m4')dnl - cd /etc/mail - run: make - restart sendmail: /etc/init.d/sendmail restart
- test supported features: - telnet localhost 25 - enter: ehlo <servername> - should do some output like:
250-mail.netfrag.org Hello localhost [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-EXPN 250-VERB 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-AUTH GSSAPI CRAM-MD5 PLAIN LOGIN 250-STARTTLS 250-DELIVERBY 250 HELP
the 'AUTH GSSAPI CRAM-MD5 PLAIN LOGIN' and 'STARTTLS' is most important to us cause this means, gssapi, digestmd5 and plain authentication is supported and also TLS is enabled.
sorry but I'm using Debian, for install instructions on other distributions look at 'Resource' section and always google.
will try write some docu here soon, too....
comming soon....
- run /usr/share/sendmail/update_auth
TRUST_AUTH_MECH(`GSSAPI PLAIN LOGIN')dnl define(`confAUTH_MECHANISMS', `GSSAPI PLAIN LOGIN')dnl
dnl # Cyrus Imap dnl # define(`confLOCAL_MAILER', `cyrus') define(`CYRUS_MAILER_FLAGS', `A5@/:|')dnl define(`CYRUS_MAILER_PATH', `/usr/sbin/cyrdeliver')dnl define(`CYRUS_MAILER_ARGS', `cyrdeliver -e -q -m $h -- $u ')dnl define(`CYRUS_MAILER_USER', `cyrus:mail')dnl define(`CYRUS_BB_MAILER_FLAGS', `')dnl define(`CYRUS_BB_MAILER_ARGS', `cyrdeliver -e -q -m $u ')dnl dnl # MAILER(cyrus)dnl
LOCAL_CONFIG ## Custom configurations below (will be preserved) LOCAL_RULE_0 R$=I $: $#cyrus $: $1 R$=I < @ $=w . > $: $#cyrus $: $1 R$=I < @ $=R . > $: $#cyrus $: $1 Rbb + $+ < @ $=w . > $#cyrusbb $: $1
- run /usr/share/sendmail/update_tls & place 'include(`/etc/mail/starttls.m4')dnl' at sendmail.mc - make & restart sendmail - see "Install Sendmail" for details...
comming soon......
TRUST_AUTH_MECH(`GSSAPI PLAIN LOGIN')dnl define(`confAUTH_MECHANISMS', `GSSAPI PLAIN LOGIN')dnl
- edit /etc/pam.d/smtp as follow:
auth reqired pam_ldap.so account required pam_ldap.so
If SASL is compiled with 'gssapi' support, sendmail would support KerberosV/gssapi Authentication, but as I can't found any documentation about kerberosV support at up-to-date mail-clients (Evolution does kerberos4, but no gssapi... ;-( ), i'm using pam_krb5 with a lots of drawbacks against real gssapi!
Short quote from Kerberos V5 Installation Guide (http://web.mit.edu/kerberos/www/krb5-1.2/krb5-1.2.7/doc/install.html#SEC3):
"Under Kerberos, a client (generally either a user or a service) sends a request for a ticket to the Key Distribution Center (KDC). The KDC creates a ticket-granting ticket (TGT) for the client, encrypts it using the client's password as the key, and sends the encrypted TGT back to the client. The client then attempts to decrypt the TGT, using its password. If the client successfully decrypts the TGT (i.e., if the client gave the correct password), it keeps the decrypted TGT, which indicates proof of the client's identity."
As you read, no passwords would go over the network, so security would be much improved!
If pam_krb5 is used, PAM will request a 'faked' ticket for the deamons which you want authenticate on. Also only PLAIN passwords are supported, which means, PLAIN passwords will go over your network what would be very unsecure! But if we are using TLS (which is always a good idea), passwords will go through a Secure Transport Layer which encrypts the whole connection, so pam_krb5 over TLS would be ok for now....
- edit /etc/pam.d/smtp as follow:
auth required pam_krb5.so account required pam_ldap.so
- read http://www.sendmail.org/m4/ldap_routing.html !! - i added an 'sendmail' user to ldap like followed which allows sendmail to query request:
uid=sendmail,ou=People,dc=netfrag,c=org objectClass: top objectClass: account objectClass: possixAccount uid: sendmail cn: sendmail account uidNumber: 25 gidNumber: 25 homeDirectory: /etc/mail userPassword::
- set default bind DN after ' -b' - set sendmail user, used for query requests after '-d' - other option, but still not tested/needed (kerberos5/gssapi supported ?)
-m <authentication mechanism> (none | simple | krb4) -P <passinfo> (/path/to/passwd_containing_file | /path/to/krb4_ticket)
dnl # define LDAP server used for routing define(`confLDAP_DEFAULT_SPEC',`-h ldap.netfrag.org -b ou=Mail,dc=netfrag,dc=org -d uid=sendmail,ou=People,dc=netfrag,dc=org')dnl
dnl # define path to file which includes routeabled domains LDAPROUTE_DOMAIN_FILE(`/etc/mail/ldapdomains')dnl
dnl # switch ldap routing on FEATURE(ldap_routing)dnl
- example '/etc/mail/ldapdomains':
netfrag.org example.com your-domain.com
- To use the default schema, simply use(at sendmail.mc):
define(`ALIAS_FILE', `ldap:')
- By doing so, you will use the default schema which expands to a map declared as follows:
ldap -k (&(objectClass=sendmailMTAAliasObject) (sendmailMTAAliasGrouping=aliases) (|(sendmailMTACluster=${sendmailMTACluster}) (sendmailMTAHost=$j)) (sendmailMTAKey=%0)) -v sendmailMTAAliasValue
- Example LDAP LDIF entries might be:
dn: sendmailMTAKey=test-aliases, ou=Mail, dc=netfrag, dc=org objectClass: top objectClass: sendmailMTA objectClass: sendmailMTAAlias objectClass: sendmailMTAAliasObject sendmailMTAAliasGrouping: aliases sendmailMTAHost: mail.netfrag.org sendmailMTAKey: test-aliases sendmailMTAAliasValue: jonen
dn: sendmailMTAKey=postmaster, ou=Mail, dc=netfrag, dc=org objectClass: top objectClass: sendmailMTA objectClass: sendmailMTAAlias objectClass: sendmailMTAAliasObject sendmailMTAAliasGrouping: aliases sendmailMTACluster: Servers sendmailMTAKey: postmaster sendmailMTAAliasValue: jonen
- read http://www.sendmail.org/m4/ldap.html !! - example for 'virtusertable' (other map definitions goes near the same way..):
- sendmail.mc:
FEATURE(`virtusertable', `LDAP')
- add sendmailMTAMapName (have to be created for each map definition!!)
dn: sendmailMTAMapName=virtuser, ou=Mail, dc=netfrag, dc=org objectClass: top objectClass: sendmailMTA objectClass: sendmailMTAMap sendmailMTAHost: mail.netfrag.org sendmailMTAMapName: virtuser
- example virtuser entries:
dn: sendmailMTAKey=test-virtuser@netfrag.com, ou=Mail, dc=netfrag, dc=org objectClass: sendmailMTA objectClass: sendmailMTAMap objectClass: sendmailMTAMapObject sendmailMTAMapName: virtuser sendmailMTAHost: mail.netfrag.org sendmailMTAKey: test-virtuser@netfrag.org sendmailMTAMapValue: jonen
dn: sendmailMTAKey=no-user@example.com, ou=Mail, dc=netfrag, dc=org objectClass: sendmailMTA objectClass: sendmailMTAMap objectClass: sendmailMTAMapObject sendmailMTAMapName: virtuser sendmailMTAHost: mail.netfrag.org sendmailMTAKey: no-user@example.com sendmailMTAMapValue: error: no-user@example.com doesn't exits here
define(`MILTER', 1) INPUT_MAIL_FILTER(`milter-amavis',`S=local:/var/run/amavis/amavis-milter.sock, F=T, T=S:10m;R:10m;E:10m')
http://www.sendmail.org/
http://www.tldp.org/HOWTO/LDAP-Implementation-HOWTO/
http://www.openldap.org/
http://web.mit.edu/kerberos/www/
http://www.upenn.edu/computing/pennkey/sysadmin/d_install_unix/smtp.html
http://logout.sh/computers/sendmail/
http://www.iconimaging.net/~jradford/sendmail/sendmail-ldap.html
http://wwwhomes.uni-bielefeld.de/schoppa/saia-howto.html
http://wwwhomes.uni-bielefeld.de/schoppa/saia-woody-howto.html
http://www.amavis.org/
o seems NO mail-client currently supports kerberos V tickets, DO MORE RESEARCH! x so use pam_krb5 o if so, seems only PLAIN password authentication works (no Digest-MD5 or others!) x so usage of TLS/SSL for secure trasport layer is recommend o docu installation for other distribution than Debian o check out Cyrus Imapd v2 and SASL v2 more and write howto o MORE docu !!
Sendmail + TLS + Cyrus IMAP/SASL + LDAP + Kerberos V HowTo |