Postfix

De Wiki
Ir para: navegação, pesquisa

Postfix

Debian Lenny 5.0

Instalando os Pacotes necessários

Vamos usar um ambiente o mais default possível, com excessão da utilização das assinaturas 3rd party do Clamav para melhorar a captura de vírus.

Nosso ambiente vai concentrar no uso do Postfix lendo os domínios e usuários de uma base MySQL preparado para usar o PostfixAdmin.

Seguir uma WIKI para configurar um serviço parece ser mais complicado, pois a sequência exige que você siga os passos sugeridos e configure cada serviço de forma separada (como será sugerido) e ao final integre essas ferramentas.

Vamos instalar os pacotes necessário então para o funcionamento do MTA:

# apt-get install postfix postfix-mysql

notem que só usamos o pacote do postfix-mysql porque nossa base será MySql, caso contrário poderíamos usar LDAP ou Postgress.

Durante a finalização da instalação dos pacotes serão feitas algumas perguntas que, para facilitar o processo posterior, serão respondidas agora:

Tipo geral de configuração de email:
==> Site Internet

como nosso servidor é público, esta é a melhor opção neste caso.

Nome de mail do sistema:
==> <dominio FQND> 

a resposta a essa pergunta é o nome completo da máquina, que foi cadastrado anteriormente no DNS. Um dos erros mais comuns em serviços de email é esquecer de cadastrar o seu reverso, atentem para que o servidor responda corretamente ao PTR com o nome cadastrado para sua máquina (veremos isso mais tarde).

Pronto, nossa instalação inicial foi finalizada, mas para que possamos ativar as configurações básicas do ambiente, tenha certeza que o MySQL foi configurado no seu ambiente.

Filtragem por Greylist

Uma técnica que tem sido bastante utilizada é a de filtragem por Greylist [1], que se utiliza de uma estratégia utilizada por servidores de email reais que não são utilizadas pelos spammers. Para implementar a técnica de greylist no nosso servidor, vamos começar instalando os seguintes programas:

# apt-get install postfix-policyd

durante o processo de instalação será questionado sobre a criação do banco a ser utilizado pela ferramenta, tenha em mãos a senha do administrador do MySQL, seguindo:

Configurar banco de dados para postfix-policyd com dbconfig-common?
==> Sim
Senha do usuário administrativo do banco de dados:
==> <senha do administrador do MySQL>

feito isso devemos editar o arquivo de configurações /etc/postfix-policyd.conf, para ativar as configurações de armadilha para spams, blacklists e whitelists, veja o arquivo de configurações abaixo com boas práticas para esta ferramenta:

AUTO_WHITE_LISTING=1
BLACKLISTING=1
AUTO_BLACK_LISTING=1
BLACKLIST_HELO=1
HELO_CHECK=1
SPAMTRAPPING=1
SENDERTHROTTLE=1
RECIPIENTTHROTTLE=1

é importante ler este arquivo de configurações para enteder o que cada opção destas faz, mas a princípio estas opções já ativam um bom grau de filtro contra spammers.

Para ativar o uso no Postfix, edite o arquivo /etc/postfix/main.cf e nas linhas respectivas adicione ao final das checages a linha abaixo:

check_policy_service inet:127.0.0.1:10031

veja um exemplo abaixo:

smtpd_helo_restrictions =
                ...
       check_policy_service inet:127.0.0.1:10031

smtpd_sender_restrictions =
                ...
       check_policy_service inet:127.0.0.1:10031

smtpd_recipient_restrictions =
                ...
       check_policy_service inet:127.0.0.1:10031

como podemos ver, as entradas especificadas são citadas dentro da configuração da ferramenta e dentro do Postfix, setamos as mesmas entradas para checagem por Greylist.

Configurações Básicas

Uma vez configurado temos que ter em mente quais são nossos objetivos, no nosso caso queremos configurar um ambiente multidomínios com quotas para domínio e usuários, para isso vamos

precisar configurar o PostfixAdmin para que ele seja nossa interface com os administradores dos domínios no nosso servidor.

O próximo passo é configurar 2 arquivos em especial, o main.cf que contém as informações relativas as contas, domínios, aliases e regras de envio e recebimento de email, já o segundo trata dos módulos dos serviços que serão utilizados no processo de envio e recebimento. Por padrão o Postfix do Debian Lenny tem seus processos enjaulados, com isso garante-se uma segurança caso o serviço tenha algum vazamento e possa ser invadido, o atacante ficaria preso nessa jaula.

Nosso objetivo é criar um ambiente multidomínios integrado ao PostfixAdmin, então temos que fazer o postfix ler o banco de dados criado pela ferramenta e entender como tratar esses dados de forma a receber e enviar emails.

É necessário saber qual o nosso ambiente para que as configurações façam sentido:

  • FQND: vware01.ufms.br
  • IP: 200.129.192.101
  • Reverso: 101.192.129.200.in-addr.arpa.

Como é um ambiente multidomínios, precisamos de um usuário único no sistema que entregue todas as mensagens, vamos criar um usuário chamado vmail com UID/GID 500:

# mkdir /srv/domains
# groupadd -g 500 vmail
# useradd -d /srv/domains -g vmail -r -u 500 vmail

Agora vamos configurar nosso arquivo de configuração principal, o main.cf, veja no nosso arquivo como ficaram as configurações:

# Veja /usr/share/postfix/main.cf.dist para uma versão mais completa e comentada
smtpd_banner = $myhostname ESMTP $mail_name
biff = no
append_dot_mydomain = no
delay_warning_time = 4h
readme_directory = no
# Configuração Local
myhostname = vware01.ufms.br
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = vware02.ufms.br, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 200.129.192.101/32
mailbox_command = /usr/lib/dovecot/deliver
mailbox_size_limit = 512000000
recipient_delimiter = +
inet_interfaces = all
# Códigos de Rejeição
non_fqdn_reject_code            = 450
invalid_hostname_reject_code    = 450
maps_rbl_reject_code            = 450
# Configuração dos Domínios Virtuais
disable_vrfy_command = yes
show_user_unknown_table_name = no
virtual_transport = dovecot
virtual_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_minimum_uid = 500
virtual_uid_maps = static:500
virtual_gid_maps = static:500
virtual_mailbox_base = /srv/domains
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf,
                       mysql:/etc/postfix/mysql_virtual_mailbox_alias_maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf,
                     mysql:/etc/postfix/mysql_virtual_alias_alias_maps.cf
virtual_alias_domains = $virtual_alias_maps
virtual_mailbox_limit = 51200000
dovecot_destination_recipient_limit = 1

Veja que o transporte de e-mails está definido para o dovecot, só que não configuramos ele ainda, então nosso ambiente vai estar não funcional até que todos os serviços sejam configurados corretamente. E temos diversos mapeamentos: maps, mailbox_base, mailbox_domains, mailbox_maps, alias_maps e alias_domains, cada um deste está plugado com um arquivo contendo uma consulta para o MySQL que fará o mapeamento que queremos que o Postfix entenda.

Outra configuração importante é a mailbox_base, é nela que é definida onde o seus domínios e caixas de e-mail estarão fisicamente no servidor.

# Necessário para a configuração da Quota
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Desculpe, o limite de quota deste usuario superou o permitido.  Tente novamente mais tarde.
virtual_overquota_bounce = yes

Este trecho ativa a criação da conta fisicamente uma vez que seja recebido o primeiro e-mail pela conta criada.

# Políticas que reforçam o Postfix
strict_rfc821_envelopes = yes
default_destination_recipient_limit = 100
message_size_limit = 51200000
body_checks = regexp:/etc/postfix/body-deny
smtpd_recipient_limit = 5
smtpd_helo_required = yes

smtpd_helo_restrictions =
       permit_mynetworks,
       permit_sasl_authenticated,
       reject_invalid_hostname,
       reject_unknown_hostname,
       check_policy_service inet:127.0.0.1:10031

smtpd_sender_restrictions =
       permit_mynetworks,
       permit_sasl_authenticated,
       reject_non_fqdn_sender,
       reject_unknown_address,
       reject_unknown_client,
       check_policy_service inet:127.0.0.1:10031

smtpd_client_restrictions =
       permit_mynetworks,
       permit_sasl_authenticated,
       reject_unknown_client,
       reject_unknown_sender_domain,
       reject_unknown_recipient_domain,

smtpd_recipient_restrictions =
       reject_invalid_hostname,
       reject_non_fqdn_sender,
       reject_non_fqdn_recipient,
       reject_unknown_sender_domain,
       reject_unknown_recipient_domain,
       reject_unauth_pipelining,
       permit_mynetworks,
       permit_sasl_authenticated,
       reject_unauth_destination,
       check_helo_access hash:/etc/postfix/helo_checks,
       check_client_access hash:/etc/postfix/client_checks,
       check_sender_access hash:/etc/postfix/rbl_override,
       reject_rbl_client cbl.abuseat.org,
       reject_rbl_client dnsbl.sorbs.net,
       reject_rbl_client bl.spamcannibal.org,
       reject_rbl_client bl.spamcop.net,
       reject_rbl_client sbl.spamhaus.org,
       reject_rbl_client xbl.spamhaus.org,
       reject_rbl_client pbl.spamhaus.org,
       reject_rbl_client dnsbl-1.uceprotect.net,
       reject_rbl_client dnsbl-2.uceprotect.net,
       reject_rbl_client dnsbl-3.uceprotect.net,
       reject_rbl_client l2.apews.org,
       reject_rbl_client bl.spamcop.net,
       reject_rbl_client cbl.abuseat.org,
       reject_rbl_client bogons.cymru.com,
       reject_rbl_client all.spamrats.com=127.0.0.36,
       reject_rbl_client all.spamrats.com=127.0.0.37,
       reject_rbl_client all.spamrats.com=127.0.0.38,
       check_policy_service inet:127.0.0.1:10031,
       permit

smtpd_data_restrictions =
       reject_unauth_pipelining,
       permit

Aqui estão agregadas diversas políticas que aumentam a confiabilidade e acrescentam um bom grau de filtragem de lixo digital (aka.:spam), incluindo uma entrada sugerida pela RNP com o body_checks. Então em cada restrição do smtpd temos a sequência de restrições que vamos aplicar a cada parte da mensagem: helo_restrictions, sender_restrictions, client_restrictions, reciipent_restrictions e data_restrictions.

Alguns comentários são importantes, principalmente o rbl_override que foi definido como válvula de escape para as checagens RBL caso algum domínio importante possa ser considerado limpo e não necessite ser checado nos rbls sugeridos. Em cada entrada de interesse foi adicionada a linha check_policy_service que faz a integração com o greylist configurado anteriormente.

o arquivo ficou separado em blocos para ficar mais fácil sua visualização dos trechos que são importantes para o funcionamento de cada parte do nosso sistema, e ele foi quebrado por partes dependendo das configurações, contudo é necessário que todo o arquivo esteja configurado para que nosso ambiente funcione.

Mapeamentos do MySQL para o PostfixAdmin

Depois que nosso mapeamento inicial foi feito, vamos construir as consultas que vão conectar o mapeamento que foi configurado no main.cf e a base gerenciada pelo PostfixAdmin.

  • Mapeamento dos Domínios (mysql_virtual_domains_maps.cf)
user = postfixadmin
password = <senha de conexao>
hosts = localhost
dbname = postfixadmin
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'

se você seguiu nossos passos e instalou automaticamente o pacote do PostfixAdmin, provavelmente deixou o pacote criar a senha, então esta senha vai estar no arquivo: /etc/postfixadmin/config.inc.php na variável: $CONF['database_password'].

  • Mapeamento das Contas (mysql_virtual_mailbox_maps.cf)
user = postfixadmin
password = <senha de conexao>
hosts = localhost
dbname = postfixadmin
table = mailbox
select_field = maildir
where_field = username
  • Mapeamento dos Alias das Contas (mysql_virtual_mailbox_alias_maps.cf)
user = postfixadmin
password = <senha de conexao>
hosts = localhost
dbname = postfixadmin
query = SELECT maildir FROM mailbox, alias_domain
 WHERE alias_domain.alias_domain = '%d'
 AND mailbox.username=concat('%u', '@', alias_domain.target_domain )
 AND mailbox.active = 1
  • Mapeamento dos Limites das Contas (mysql_virtual_mailbox_limit_maps.cf)
user = postfixadmin
password = <senha de conexao>
hosts = localhost
dbname = postfixadmin
table = mailbox
select_field = quota
where_field = username
  • Mapeamento dos Mapeamentos de Aliases (mysql_virtual_alias_maps.cf)
user = postfixadmin
password = <senha de conexao>
hosts = localhost
dbname = postfixadmin
table = alias
select_field = goto
where_field = address
  • Mapeamento dos Aliases de Aliases (mysql_virtual_alias_alias_maps.cf)

Este é importante, pois é o mapeamento usado quando criamos um alias de domínio para domínio.

user = postfixadmin
password = <senha de conexao>
hosts = localhost
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain
 WHERE alias_domain.alias_domain = '%d'
 AND alias.address=concat('%u', '@', alias_domain.target_domain)
 AND alias.active = 1

falta agora somente dar as permissões corretas para os arquivos, para evitar que alguém possa ver a senha de acesso ao banco de dados:

# chmod 0400 mysql_virtual_*

com isso nossos mapeamentos foram concluidos.

Checagens adicionais

Ficaram faltando algumas checagens adicionais que são usadas na configuração: client_checks, helo_checks, body-deny e rbl_override, que seguem abaixo:

  • Client Checks (client_checks)
10                      554 Go away!
172.16                  554 Bugger off!
192.168                 554 Go away, Bugger off!

se o servidor que estiver se comunicando com você não vier de um IP público, provavelmente não é um servidor válido na Internet (embora muitos MTA possam ser tunelados por NAT de uma rede privada).

  • Helo Checks (helo_checks)
200.129.192.101                 REJECT You are not 200.129.192.101
localhost                       REJECT You are not me

aqui usamos o IP público do nosso servidor e o endereço de loopback, se alguém tentar se comunicar com o seu servidor com o IP dele e não for ele próprio, algo está muito errado, então rejeite a comunicação.

  • RBL Override (rbl_override)
ufms.br         OK
unicamp.br      OK
rnp.br          OK
gmail.com       OK

cada linha contém um domínio e o OK significa que o retorno para esta checagem não precisa continuar o processo de checagem, pois já está ok.

Note que apenas editar este arquivo não resolve, devemos transformar em um formato que o Postfix entenda e também informá-lo que foi modificada as configurações, vamos fazer isso agora:

# postmap client_checks helo_checks rbl_override

serão criados arquivos .db de cada um e o Postfix será informado da sua alteração. Toda vez que você modificar qualquer 1 dos arquivos, você deve remapeá-lo com o comando postmap.

  • Body Deny (body-deny)

Este arquivo é atualizado regularmente do site MalwarePatrol e contém definições de malwares em [2], você pode criar um script que atualize diariamente esta lista, segue abaixo um exemplo:

#!/bin/bash
# Arquivo: /usr/local/bin/postfix-malware.sh
cd /tmp
wget "http://malwarepatrol.com.br/cgi/submit?action=list_postfix"
mv "submit?action=list_postfix"  /etc/postfix/body-deny
/etc/init.d/postfix reload

e colocar um link simbólico no cron para diariamente atualizar esta lista:

# ln -s /usr/local/bin/postfix-malware.sh /etc/cron.daily/

agora vamos integrar o serviço de POP/IMAP com Dovecot.

Integrando ao POP/IMAP Dovecot

Instale o Dovecot.

Configurando a Autenticação SASL

Adicionar ao arquivo main.cf o bloco de configuração abaixo:

# Usando a autenticação SASL com o SMTPD
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_application_name = smtpd
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

# Usando a autenticação SASL com envio SMTP
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = $smtp_sasl_security_options
smtp_sasl_mechanism_filter = plain, login, cram-md5
smtp_sasl_password_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

Ativando a criptografia SSL/TLS

Adicionar ao arquivo main.cf o bloco de configuração abaixo:

# Parâmetros para o TLS
smtp_use_tls = yes
smtp_enforce_tls = no
smtp_tls_security_level = may
smtp_tls_CAfile = /etc/ssl/vware01/cacert.pem
smtp_tls_cert_file = /etc/ssl/vware01/mail-cert.pem 
smtp_tls_key_file = /etc/ssl/vware01/mail-key.pem
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_note_starttls_offer = yes
smtpd_tls_auth_only = no
smtpd_tls_CAfile = /etc/ssl/vware01/cacert.pem
smtpd_tls_cert_file = /etc/ssl/vware01/mail-cert.pem
smtpd_tls_key_file = /etc/ssl/vware01/mail-key.pem
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_security_level = may
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 1

tls_random_source = dev:/dev/urandom

Autenticação para envio seguindo o padrão do CGI.br

O CGI.br definiu que apartir de agora os serviços de e-mail só devem aceitar e-mails de usuários através da porta 587 e de forma autenticada e a porta 25 deve ser utilizada somente por servidores de e-mail. Para que isso funcione basta configurar o SASL e ativar a utilização da porta 587 pelo Postfix:

# vim /etc/postfix/master.cf
submission inet n       -       n       -       -       smtpd
  -o content_filter=smtp-amavis:[127.0.0.1]:10024
  -o smtpd_etrn_restrictions=reject
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_path=private/auth
  -o smtpd_enforce_tls=yes
  -o smtpd_tls_auth_only=yes
  -o smtpd_reject_unlisted_sender=yes
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o syslog_name=postfix-submission
  -o milter_macro_daemon_name=ORIGINATING

smtps     inet  n       -       -       -       -       smtpd
  -o content_filter=smtp-amavis:[127.0.0.1]:10024
  -o smtpd_etrn_restrictions=reject
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o syslog_name=postfix-smtps
  -o milter_macro_daemon_name=ORIGINATING

note que já estamos usando o Amavis como filtro para estar novas portas: 465 e 587 para conexões SSL e TLS.

Ativando a criptografia SSL/TLS e o SASL

Primeiro vamos instalar os pacotes necessários:

# apt-get install sasl2-bin libsasl2-modules libsasl2-2

feito isso devemos ativá-lo:

# vim /etc/default/saslauthd

e alterar a entrada de:

START=no

para:

START=yes

e a forma como queremos que seja feita a autenticação:

DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="rimap"
MECH_OPTIONS="localhost"
THREADS=5
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

com isso vamos usar o [Dovecot] e o IMAP para autenticação SASL. Agora dentro do [Postfix] edite o arquivo:

# vim /etc/postfix/sasl/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
saslauthd_path: /var/run/saslauthd/mux

e configurar no /etc/postfix/main.cf, onde se encontra #TLS parameters, substitua pelo conteúdo abaixo:

# TLS parameters
#->SMTPD aka Server Side
smtpd_use_tls = yes
broken_sasl_auth_clients = yes
smtpd_tls_auth_only = yes
smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem
smtpd_tls_cert_file = /etc/ssl/certs/postfix-crt.pem
smtpd_tls_key_file = /etc/ssl/private/postfix-key.pem
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtpd_sasl_security_options = noanonymous
tls_random_source = dev:/dev/urandom
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

#->SMTP aka Client Side
smtp_use_tls = yes
smtp_tls_CAfile = /etc/ssl/certs/cacert.pem
smtp_tls_cert_file = /etc/ssl/certs/postfix-crt.pem
smtp_tls_key_file = /etc/ssl/private/postfix-key.pem
smtp_tls_note_starttls_offer = yes

# SASL for client side
smtp_sasl_auth_enable = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = $smtp_sasl_security_options
smtp_sasl_mechanism_filter = plain, login
smtp_sasl_password_maps = ldap:accounts,ldap:alternate

agora podemos inicializar o serviço para testar:

# /etc/init.d/saslauthd start

uma vez inicializar rode o comando abaixo para testar a autenticação:

# testsaslauthd -f /var/spool/postfix/var/run/saslauthd/mux -u USUARIO -p SENHA

se o resultado for:

0: OK "Success."

sua configuração de SASL está correta e funcional, caso seja:

0: NO "authentication failed"

reveja as configurações novamente.

Integrando o Amavis

Uma vez que o Amavis já está instalado e configurado, vamos integrá-lo ao Postfix.

Adicionar ao arquivo main.cf o bloco de configuração abaixo:

# Amavis-new Scanner de Antivírus e Antispam
content_filter = smtp-amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
relay_domains = $mydestination
dspam_destination_recipient_limit = 1
dspam-add_destination_recipient_limit = 1
dspam-fp_destination_recipient_limit = 1

e ao master.cf o bloco de configuração abaixo:

# Escaneador amavisd-new
smtp-amavis       unix  -       -       -       -       2       smtp
       -o smtp_data_done_timeout=1200
       -o smtp_send_xforward_command=yes
       -o disable_dns_lookups=yes
       -o max_use=20
       -o smtp_generic_maps=

127.0.0.1:10025 inet    n -     -       -       -       smtpd
       -o content_filter=
       -o smtpd_delay_reject=no
       -o smtpd_client_restrictions=permit_mynetworks,reject
       -o smtpd_helo_restrictions=
       -o smtpd_sender_restrictions=
       -o smtpd_recipient_restrictions=permit_mynetworks,reject
       -o smtpd_end_of_data_restrictions=
       -o smtpd_restriction_classes=
       -o mynetworks=127.0.0.0/8
       -o smtpd_error_sleep_time=0
       -o smtpd_soft_error_limit=1001
       -o smtpd_hard_error_limit=1000
       -o smtpd_client_connection_count_limit=0
       -o smtpd_client_connection_rate_limit=0
       -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
       -o local_header_rewrite_clients=
       -o local_recipient_maps=
       -o relay_recipient_maps=
       -o strict_rfc821_envelopes=yes

feito isso reinicialize o serviço postfix e já teremos o Amavis filtrando nossas mensagens.

Suporte ao OpenLDAP

Primeiro vamos instalar o suporte ao OpenLDAP no Postfix:

# apt-get install postfix-ldap

uma vez feito isso, vamos configurar o arquivo /etc/postfix/main.cf com as configurações relativas a conexão ao nosso servidor OpenLDAP:

virtual_transport = dovecot
virtual_uid_maps = static:500
virtual_gid_maps = static:500
virtual_mailbox_base = /
virtual_mailbox_domains = ldap:domains
virtual_mailbox_maps = ldap:accounts,ldap:alternate
virtual_alias_maps = hash:/etc/aliases,ldap:aliases


como vamos utilizar o Dovecot como serviço de entrega local/imap e pop3, já estamos definido ele como nosso sistema de transporte. Agora vamos adicionar ao main.cf as ações de conexão ao nosso servidor OpenLDAP:

# OpenLDAP Specifications
#->Domains we accept mail to
domains_server_host = ldap.dominio.br
domains_search_base = dc=dominio,dc=br
domains_query_filter = (&(o=%s)(objectClass=organization))
domains_result_attribute = o
domains_scope = sub
domains_bind = yes
domains_bind_dn = cn=reader,dc=dominio,dc=br
domains_bind_pw = SENHA
domains_version = 3

#->Domain accounts we accept mail to
accounts_server_host = ldap.dominio.br
accounts_search_base = dc=dominio,dc=br 
accounts_query_filter = (&(objectClass=qmailUser)(mail=%u@dominio.br)(accountStatus=active))
accounts_result_attribute = mailMessageStore
accounts_scope = sub
accounts_bind = yes
accounts_bind_dn = cn=reader,dc=dominio,dc=br
accounts_bind_pw = SENHA
accounts_version = 3 

#->Domain alternate accounts we accept mail to
alternate_server_host = ldap.dominio.br
alternate_search_base = dc=dominio,dc=br
alternate_query_filter = (&(objectClass=qmailUser)(mailAlternateAddress=%u@dominio.br)  (accountStatus=active))
alternate_result_attribute = mailMessageStore
alternate_scope = sub
alternate_bind = yes
alternate_bind_dn = cn=reader,dc=dominio,dc=br
alternate_bind_pw = SENHA
alternate_version = 3

#->Domain account aliases we forward mail to
aliases_server_host = ldap.dominio.br
aliases_search_base = dc=dominio,dc=br
aliases_query_filter = (&(objectClass=qmailUser)(mail=%s)(accountStatus=active))
aliases_result_attribute = mailForwardingAddress
aliases_scope = sub
aliases_bind = yes
aliases_bind_dn = cn=reader,dc=dominio,dc=br
aliases_bind_pw = SENHA
aliases_version = 3

com isso, nosso servidor de e-mail vai consultar a base OpenLDAP e utilizá-la. O próximo passo é configurar o [Dovecot] para o POP3/IMAP. Lembrando que nossa intenção é deixar o Dovecot realizar a entrega local via LDA. Vamos configurar agora o arquivo /etc/postfix/master.cf:

# vim /etc/postfix/master.cf
# dovecot
dovecot   unix  -       n       n       -       -       pipe
 flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}


e altere também de:

smtp      inet  n       -       -       -       -       smtpd

para:

smtp      inet  n       -       -       -       -       smtpd
 -o smtpd_sasl_auth_enable=no
 -o milter_macro_daemon_name=ORIGINATING

com estas linhas nosso master já vai estar pronto para entregar via [Dovecot] e pré-pronto para se adaptar ao padrão do CGI.br.

Configurações para LDAP

Como nosso servidor vai tratar diversos domínios, precisamos de um usuário no sistema que faça o controle na entrega e envio de e-mails, este usuário será chamado de vmail, vamos criá-lo:

# vim /etc/postfix/main.cf

que vai conter o seguinte conteúdo:

smtpd_banner = $myhostname ESMTP $mail_name (dominio/Unix)
biff = no
append_dot_mydomain = no
delay_warning_time = 4h
readme_directory = no

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

myhostname = nxmail.dominio.br
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = nxmail.dominio.br, localhost.dominio.br, , localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = /usr/lib/dovecot/deliver
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

non_fqdn_reject_code            = 450
invalid_hostname_reject_code    = 450
maps_rbl_reject_code            = 450
content_filter = smtp-amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
relay_domains = $mydestination

dspam_destination_recipient_limit = 1
dspam-add_destination_recipient_limit = 1
dspam-fp_destination_recipient_limit = 1

strict_rfc821_envelopes = yes
default_destination_recipient_limit = 100
message_size_limit = 51200000
smtpd_recipient_limit = 100
smtpd_helo_required = yes
smtpd_helo_restrictions =
       permit_mynetworks,
       permit_sasl_authenticated,
       reject_invalid_hostname,
       reject_unknown_hostname,

smtpd_sender_restrictions =
       permit_mynetworks,
       permit_sasl_authenticated,
       reject_non_fqdn_sender,
       reject_unknown_address,
       reject_unknown_client,

smtpd_client_restrictions =
       permit_mynetworks,
       permit_sasl_authenticated,
       reject_unknown_client,
       reject_unknown_sender_domain,
       reject_unknown_recipient_domain,

smtpd_recipient_restrictions =
       reject_invalid_hostname,
       reject_non_fqdn_sender,
       reject_non_fqdn_recipient,
       reject_unknown_sender_domain,
       reject_unknown_recipient_domain,
       reject_unauth_pipelining,
       permit_mynetworks,
       permit_sasl_authenticated,
       reject_unauth_destination,
       check_helo_access hash:/etc/postfix/helo_checks,
       check_client_access hash:/etc/postfix/client_checks,
       check_sender_access hash:/etc/postfix/rbl_override,
       reject_rbl_client dnsbl.sorbs.net,
       reject_rbl_client bl.spamcannibal.org,
       reject_rbl_client bl.spamcop.net,
       reject_rbl_client sbl.spamhaus.org,
       reject_rbl_client xbl.spamhaus.org,
       reject_rbl_client pbl.spamhaus.org,
       reject_rbl_client dnsbl-1.uceprotect.net,
       reject_rbl_client dnsbl-2.uceprotect.net,
       reject_rbl_client dnsbl-3.uceprotect.net,
       reject_rbl_client bl.spamcop.net,
       reject_rbl_client cbl.abuseat.org,
       reject_rbl_client all.spamrats.com=127.0.0.36,
       reject_rbl_client all.spamrats.com=127.0.0.37,
       reject_rbl_client all.spamrats.com=127.0.0.38,
       permit

smtpd_data_restrictions =
       reject_unauth_pipelining,
       permit

2bounce_notice_recipient = postmaster@dominio.br
address_verify_sender = postmaster@dominio.br
bounce_notice_recipient = postmaster@dominio.br
delay_notice_recipient = postmaster@dominio.br
error_notice_recipient = postmaster@dominio.br

este é o corpo padrão do nosso arquivo de configuração. Note que se você tentar inicializar o serviço vai se deparar com um erro na linha:

content_filter = smtp-amavis:[127.0.0.1]:10024

pois não informamos para o Postfix como se comunicar com o Amavis, para isso edite o arquivo:

# vim /etc/postfix/master.cf
smtp-amavis       unix  -       -       -       -       2       smtp
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
        -o disable_dns_lookups=yes
        -o max_use=20
        -o smtp_generic_maps=

127.0.0.1:10025 inet    n -     -       -       -       smtpd
        -o content_filter=
        -o smtpd_delay_reject=no
        -o smtpd_client_restrictions=permit_mynetworks,reject
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o smtpd_end_of_data_restrictions=
        -o smtpd_restriction_classes=
        -o mynetworks=127.0.0.0/8
        -o smtpd_error_sleep_time=0
        -o smtpd_soft_error_limit=1001
        -o smtpd_hard_error_limit=1000
        -o smtpd_client_connection_count_limit=0
        -o smtpd_client_connection_rate_limit=0
        -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
        -o local_header_rewrite_clients=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o strict_rfc821_envelopes=yes

agora que o Postfix sabe se comunicar com o Amavis pode-se inicializar o serviço:

# /etc/init.d/postfix start

é isso.

Integrando o Webmail Roundcube

Gerando as Chaves para TLS

Primeiro editamos o arquivo /etc/ssl/openssl.cnf com as nossas configurações.

Depois seguimos os passos abaixo:

Criar a a nossa nova AC:

# /usr/lib/ssl/misc/CA.sh -newca

emitir uma requisição de chave:

# /usr/lib/ssl/misc/CA.sh -newreq

assinar a chave criada:

# /usr/lib/ssl/misc/CA.sh -sign

depois disso vamos copiar as chaves para seus locais corretos:

# cp demoCA/cacert.pem /etc/ssl/certs/
# openssl rsa -in newkey.pem -out postfix-key.pem
# mv postfix-key.pem /etc/ssl/private/
# mv newcert.pem /etc/ssl/certs/postfix-crt.pem
# chown root.root /etc/ssl/private/postfix-key.pem
# chmod 400 /etc/ssl/private/postfix-key.pem

pronto, as chaves foram geradas.


--Brivaldo 20h15min de 29 de abril de 2010 (UTC)