Instalando o PostFix + SpamAssassin + LDAP

Por Fábio Gil - Criado em 13/07/2011

Este tutorial é destinado a administradores de rede que queiram utilizar o Postfix como MTA (Mail Transfer Agent) - servidor de e-mail para GNU/Linux, aliado ao recurso de anti-spam com SpamAssassin e autenticação de usuários via LDAP.

Passo 1: Fazer a instalação do Postfix via apt-get ou aptitude install (Debian)

 * 1) apt-get install postfix postfix-ldap

A caixa de diálogo do 'Postfix Configuration' irá surgir, solicitando algumas informações:

1) No menu principal, selecionar a opção &quot;Internet Site&quot; 2) Informar o nome do servidor: &quot;servidor.dominio.br&quot;

Passo 2: Fazer a instalação do POP, e IMAP com SSL
1) Seguir a instalação via apt-get ou aptitude install dos pacotes Debian:


 * 1) apt-get install courier-pop courier-pop-ssl courier-imap courier-imap-ssl

Na ultima caixa de diálogo responder: &quot;&quot;, e em seguida &quot;&quot;

2) Gerar o certificado SSL:

Para IMAP:


 * 1) cd /etc/courier
 * 2) vi imapd.cnf

Preencher os campos como segue:

[ req_dn ] C=BR ST=SP L=Piracicaba SP O=Courier Mail Server OU=Automatically-generated IMAP SSL key CN=servidor.dominio.br emailAddress=postmaster@servidor.dominio.br

e, para finalizar, executar os seguintes comandos:


 * 1) mv imapd.pem imapd.pem.old
 * 2) mkimapdcert

Para POP:


 * 1) cd /etc/courier
 * 2) vi pop3d.cnf

e preencha os campos assim como no IMAP.

Para finalizar, executar:


 * 1) mv pop3d.pem pop3d.pem.old
 * 2) mkpop3dcert

Para TLS:


 * 1) mkdir /etc/postfix/ssl
 * 2) cd /etc/postfix/ssl/
 * 3) openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
 * 4) chmod 600 smtpd.key
 * 5) openssl req -new -key smtpd.key -out smtpd.csr
 * 6) openssl req -new -key smtpd.key -out smtpd.csr
 * 7) openssl x509 -req -days 730 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
 * 8) openssl rsa -in smtpd.key -out smtpd.key.unencrypted
 * 9) mv -f smtpd.key.unencrypted smtpd.key
 * 10) openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 730

3) Instalar o SASL:


 * 1) apt-get install libsasl2-2 sasl2-bin libsasl2-modules libdb3-util procmail db4.6-util
 * 2) vi /etc/default/saslauthd

e inclua as seguintes linhas:

START=yes MECHANISMS=&quot;ldap&quot; CONFIG_FILE=&quot;/etc/saslauthd.conf&quot; OPTIONS=&quot;-c -m /var/spool/postfix/var/run/saslauthd -r&quot;

Crie o arquivo '/etc/default/sasl/saslauthd' incluindo as seguintes linhas:

pwcheck_method: saslauthd mech_list: plain login

Crie o arquivo '/usr/local/etc/saslathd.conf' incluindo as seguintes linhas:

ldap_servers:ldap://servidorldap.dominio.br/ ldap_bind_dn:cn=admin,dc=dominio,dc=br ldap_bind_pw:senhaldap ldap_search_base:ou=setor,dc=dominio,dc=br ldap_auth_method:custom ldap_port:389 ldap_uidattr:uid ldap_filter:(uid=%u)
 * 1) Configuracao para Autenticacao do Postfix com servidor LDAP

Crie o link simbolico do arquivo de configuração:


 * 1) ln -s /usr/local/etc/saslauthd.conf /etc/saslauthd.conf

Acerte as permissões do usuário 'sasl':


 * 1) mkdir -p /var/spool/postfix/var/run/saslauthd
 * 2) usermod -G sasl postfix

4) Instalar courier-authdaemon:


 * 1) apt-get install courier-authdaemon courier-base gamin libgamin0 libglib2.0-0
 * 2) chmod o+rx /var/run/courier/authdaemon

Passo 3: Fazer a instalação do Spamassassin
1) Efetue a instalação como segue:

ENABLED=1
 * 1) apt-get install spamassassin
 * 2) vi /etc/default/spamassassin

rewrite_header Subject *****SPAM*****
 * 1) vi  /etc/spamassassin/local.cf

2) Crie o usuario 'spamd':


 * 1) useradd -d /var/spool/spamassassin -s /bin/false spamd

3) Crie o diretório 'spool' para o spamassassin:


 * 1) mkdir /var/spool/spamassassin

4) Instale o 'maildrop':


 * 1) apt-get install maildrop

Passo 4: Configurar o Postfix
1) Prepare o Postfix executando os seguintes comandos:


 * 1) mkdir -p /var/spool/messages
 * 2) mkdir -p /var/spool/vmail
 * 3) chmod -R vmail.vmail /var/spool/vmail
 * 4) useradd -d /var/spool/vmail -s /bin/false vmail

2) Edite o arquivo de configuração 'master.cf':


 * 1) Atenção: descomentar as linhas existentes

smtp     inet  n       -       -       -       -       smtpd -o content_filter=spamassassin
 * 1) Postfix + Spamassassin

smtps    inet  n       -       -       -       -       smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
 * 1) SSL

spamassassin unix -    n       n       -       -       pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
 * 1) Spamassassin

maildrop unix  -       n       n       -       -       pipe flags=DRhu user=vmail argv=/usr/bin/maildrop -w 90 -d ${recipient}
 * 1) Maildrop

3) Edite o arquivo de configuração 'main.cf':

myhostname = servidor.dominio.br mydomain = dominio.br append_dot_mydomain = no alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = $myhostname, localhost.$mydomain, localhost, $myorigin relayhost = mynetworks = 127.0.0.0/8, mynetworks_style = host inet_interfaces = all inet_protocols = all setgid_group = postdrop
 * 1) Configuracao do Postfix + LDAP

Note que em '' deverá ser substituido pelo número ip da rede externa.

... continuando a edição do arquivo 'main.cf' ...

disable_vrfy_command = yes delay_warning_time = 1h
 * 1) Usado para obter nomes validos

mailbox_size_limit = 0 mailbox_command = /usr/bin/maildrop mailbox_transport = maildrop home_mailbox = Maildir/ recipient_delimiter = + message_size_limit = 20000000 mail_owner = postfix default_privs = nobody default_transport = smtp sendmail_path = /usr/sbin/sendmail newaliases_path = /usr/bin/newaliases mailq_path = /usr/bin/mailq command_directory = /usr/sbin
 * 1) MAILBOX

virtual_alias_maps = ldap:accounts virtual_mailbox_maps = ldap:accounts virtual_gid_maps = static:1001 virtual_uid_maps = static:1001 virtual_mailbox_base = / virtual_transport = maildrop
 * 1) VIRTUAL MAILOX

virtual_maps = ldap:accountsmap virtual_mailbox_limit_inbox = no virtual_mailbox_limit_maps = ldap:accountsmap virtual_mailbox_limit_override = yes virtual_maildir_extended = yes virtual_create_maildirsize = yes virtual_mailbox_limit = 100000000 virtual_maildir_limit_message = &quot;Desculpe, a caixa de mensagem do usuario ultrapassou o limite de quota. Por favor, tentar reenviar o email mais tarde.&quot; virtual_overquota_bounce = yes
 * 1) QUOTA

fallback_transport = /usr/bin/maildrop maildrop_destination_recipient_limit = 1 unknown_local_recipient_reject_code = 450
 * 1) MAILDROP

smtpd_recipient_limit = 120
 * 1) MENSAGENS
 * 2) Maximo de Destinatarios por Mensagem (Setado em 120 destinatarios)

smtpd_sasl_local_domain = smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination smtpd_tls_auth_only = no smtpd_sasl_path = smtpd smtpd_sender_login_maps = ldap:ldapsource
 * 1) SASL

smtp_use_tls = yes smtp_tls_note_starttls_offer = yes smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache tls_random_source = dev:/dev/urandom
 * 1) TLS

accountsmap_server_host = servidorldap.dominio.br accountsmap_bind_dn = cn=admin,dc=servidorldap,dc=dominio,dc=br accountsmap_bind_pw = senhaldap accountsmap_search_base = dc=servidorldap,dc=dominio,dc=br accountsmap_query_filter = (&amp;(objectClass=qmailUser)(mail=%s)) accountsmap_result_attribute = mail accountsmap_bind = yes
 * 1) LDAP

accounts_server_host = servidorldap.dominio.br accounts_bind_dn = cn=admin,dc=servidorldap,dc=dominio,dc=br accounts_bind_pw = senhaldap accounts_search_base = dc=servidorldap,dc=dominio,dc=br accounts_query_filter = (&amp;(objectClass=qmailUser)(mail=%s)) accounts_bind = yes

ldapalias_server_host = servidorldap.dominio.br ldapalias_server_port = 389 ldapalias_version = 3 ldapalias_search_base = dc=servidorldap,dc=dominio,dc=br ldapalias_scope = sub ldapalias_result_attribute = uid ldap-users_query_filter = (mail=%s) ldapalias_query_filter = (&amp;(objectClass=qmailUser)(mailAlternateAddress=%s))

4) Edite o arquivo de configuração '/etc/courier/authdaemonrc':

authmodulelist=&quot;authldap&quot; DEBUG_LOGIN=2
 * 1) vi /etc/courier/authdaemonrc

5) Instale o 'courier-ldap':


 * 1) apt-get install courier-ldap

Configure-o editando o arquivo '/etc/courier/authldaprc':

LDAP_URI               ldap://servidorldap.dominio.br LDAP_BASEDN             dc=dominio,dc=br LDAP_BINDDN            cn=admin,dc=dominio,dc=br LDAP_BINDPW            senhaldap LDAP_AUTHBIND          1 LDAP_MAIL              mail LDAP_FILTER          (objectClass=qmailUser) LDAP_DOMAIN            servidor.dominio.br LDAP_GLOB_UID           vmail LDAP_GLOB_GID          vmail LDAP_HOMEDIR           mailMessageStore LDAP_MAILDIR           homeDirectory LDAP_MAILDIRQUOTA      quota LDAP_FULLNAME          cn LDAP_CRYPTPW            userPassword
 * 1) vi /etc/courier/authldaprc

Passo 5: Configurar cada usuário do servidor LDAP
Com o phpldapadmin, os seguintes campos deverão ser configurados para e-mail:

objectClass: qmailUser mailMessageStore: /var/spool/messages homeDirectory: /var/spool/messages/ /Maildir mail: @servidor.dominio.br mailAlternateAddress: @servidor.dominio.br

Passo 6: Reiniciar os serviços de e-mail

 * 1) /etc/init.d/courier-pop restart
 * 2) /etc/init.d/courier-pop-ssl restart
 * 3) /etc/init.d/courier-imap restart
 * 4) /etc/init.d/courier-imap-ssl restart
 * 5) /etc/init.d/saslauthd restart
 * 6) /etc/init.d/courier-authdaemon restart
 * 7) /etc/init.d/postfix restart

Passo 7: Testar a autenticação

 * 1) testsaslauthd -u usuario  -p senha -s smtp -f /var/spool/postfix/var/run/saslauthd/mux

Passo 8: Criar o repositório de e-mails de cada usuário

 * 1) mkdir -p /var/spool/messages/usuario
 * 2) maildirmake /var/spool/messages/fabiogil/Maildir
 * 3) chown -R vmail.vmail /var/spool/messages/usuario
 * 4) chmod 775 -R /var/spool/messages/usuario

Passo 9: Testar o servidor
Para testar o servidor de e-mail, instale e configure um webmail simples como o Squirrelmail:


 * 1) apt-get install squirrelmail
 * 2) squirrelmail-configure

Referências
 * Morimoto, Carlos Eduardo. Servidores Linux, guia prático. Porto Alegre: Sul Editores, 2008, 735 p.
 * Trigo, Clodonil Honório. OpenLDAP: uma abordagem integrada. São Paulo: Novatec Editora, 2007, 239 p.