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.
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.
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:
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.
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.
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'].
user = postfixadmin password = <senha de conexao> hosts = localhost dbname = postfixadmin table = mailbox select_field = maildir where_field = username
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
user = postfixadmin password = <senha de conexao> hosts = localhost dbname = postfixadmin table = mailbox select_field = quota where_field = username
user = postfixadmin password = <senha de conexao> hosts = localhost dbname = postfixadmin table = alias select_field = goto where_field = address
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.
Ficaram faltando algumas checagens adicionais que são usadas na configuração: client_checks, helo_checks, body-deny e rbl_override, que seguem abaixo:
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).
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.
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.
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.
Instale o Dovecot.
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
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
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.
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.
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.
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.
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.
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)