Servidor Postfix
O Postfix é um MTA – Mail Transport Agent, ou mais popularmente um “Servidor SMTP”. Extremamente versátil, de fácil configuração e muito robusto ele tem se tornado o MTA padrão de quase todas as distribuições nos últimos anos.
Neste capítulo veremos como integrar o Postfix com o OpenLDAP.
Instalando o Postfix
1. Para instalar o Postfix execute o seguinte comando:
aptitude install postfix postfix-ldap
Perceba que no Debian o suporte a LDAP é fornecido por um pacote em separado. O Postfix oferece suporte a uma grande quantidade de bases diferentes.
Durante a instalação do servidor algumas telas de configuração irão aparecer. A primeira dela é informativa e explica os tipos de instalação que podemos utilizar, veja a sequência de figuras abaixo:
2. Selecione a opção “Internet Site”
3. Nesta tela será solicitado o domínio padrão do sistema, ou seja, qual o domínio padrão que será acrescentado aos e-mails depois do @. Perceba que o instalador é inteligente o suficiente para já vir com o campo preenchido com o domínio do nome do servidor.
4. Algumas mensagens de alerta do sistema e/ou de outros servidores são enviados de forma automática para uma conta definida na configuração do Postfix. Recomendamos preencher esta tela com o usuário “postmaster”. Mesmo que ele não exista agora, será importante criá-lo depois.
5. A tela seguinte pede que sejam informados quais são os domínios aceitos pelo Postfix. Inicialmente só temos um domínio e o FQDN do servidor. Assim basta deixar este campo preenchido com o domínio padrão e o nome do servidor. Como pode ser visto na figura abaixo:
6. Esta tela configura a opção “synchronous updates”, que permite desativar as otimizações no envio das mensagens, fazendo com que os e-mails sejam enviados conforme são recebidos e em ordem. Esta opção aumenta um pouco a confiabilidade do servidor, pois reduz a possibilidade de perda de mensagens ainda não enviadas, em casos de travamentos ou quedas de energia. Por outro lado, ela reduz substancialmente o desempenho do servidor, por isso nunca deve ser ativada em servidores de grande volume.
7. A tela seguinte pede que sejam informadas as redes que estão liberadas para envio de mensagens. Liberar redes por endereço IP é sempre uma má idéia. Deve-se, sempre que possível, utilizar mecanismos de autenticação de envio. Em nosso exercício o valor padrão é suficiente.
8. Nesta tela para que seja informado o tamanho máximo do “mailbox” das mensagens, ou seja, o tamanho máximo de armazenamento de mensagens.
9. Defina nesta tela o caractere de extensão de endereço local. Um nome complicado para dizer: quando um e-mail chegar e for necessário verificar se é um usuário local posso tentar separar o nome do domínio usando um determinado caracter? Altere esta opção se for necessário utilizar separadores para alguma situação específica. Caso contrário mantenha o valor padrão:
10. Qual o protocolo TCP que será utilizado? Se o ambiente não pedir IPV6, defina esta opção apenas como IPV4. Caso contrário seu registro de log pode ficar cheio de mensagens de aviso sobre IPV6.
Criando schema e/ou utilizando os já existentes
O postfix é extremamente flexível quando se trata do suporte a LDAP. Tanto que ele não usa uma classe de objetos própria, fica a critério do administrador configurar quais atributos serão utilizados. Entretanto outras partes integrantes de um servidor de e-mail completo, como o Maildrop podem exigir atributos específicos.
Pode-se criar um schema próprio para atender aos requisitos mínimos do Postfix ou pode-se utilizar algum outro schema já existente.
Aqui mostramos um exemplo de schema simples:
attributetype ( 1.3.6.1.4.1.4203.666.1.200
NAME 'mailacceptinggeneralid'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} )
attributetype ( 1.3.6.1.4.1.4203.666.1.201
NAME 'maildrop'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} )
objectClass ( 1.3.6.1.4.1.4203.666.1.100
NAME 'postfixUser'
DESC 'Postfix Mail User'
AUXILIARY
MAY ( mailacceptinggeneralid $ maildrop )
)
Entretanto, para atender a todos os requisitos sugerimos utilizar o schema de um outro MTA famoso: o Qmail.
Assim basta procurar na Internet, ou copiar do Apêndice 2 deste manual o qmailuser.schema e instalá-lo no OpenLDAP.
Instalando o schema
Para instalar um novo schema no OpenLDAP basta copiá-lo para o diretório certo e fazer o “include” dele no arquivo de configuração do OpenLDAP.
1. Copie o qmailuser.schema para o diretório certo usando o comando abaixo:
cp qmailuser.schema /etc/ldap/schema
2. Edite o arquivo de configuração “slapd.conf” e procure pelas linhas de “include”. Logo abaixo da última “include” adicione isto:
include /etc/ldap/schema/qmailuser.schema
3. Reinicie o OpenLDAP
É necessário adicionar novos atributos aos nossos usuários, para que estejam aptos a enviar e receber mensagens. Para isso vamos alterar todos os nossos usuários com um arquivo “ldif” como este:
dn: cn="Fulano1 da Silva",ou=Usuarios,dc=kyapanel,dc=com,dc=br add: objectClass objectClass: qmailUser - add: mail mail: fulano1@kyapanel.com.br - add: accountStatus accountStatus: 0
Faça um script para alterar todos os usuários
Configurando o Postfix
1. Edite o arquivo /etc/postfix/main.cf
Procure pela opção “alias_maps” e adicione o seguinte conteúdo a ela:
alias_maps = hash:/etc/aliases, ldap:accounts
Explicando
A linha original dessa opção é: alias_maps = hash:/etc/aliases . O que estamos fazendo é adicionando mais um “local” onde as contas podem ser localizadas. Neste caso estamos dizendo que se trata de uma pesquisa do tipo “ldap” em uma configuração chamada “accounts”.
O nome da configuração é livre, ou seja, pode-se definir qualquer nome que melhor se adeque a realidade do seu ambiente.
2. No fim do arquivo adicione o seguinte conteúdo:
accounts_server_host = ldap://ldap__.kyapanel.com.br accounts_search_base = ou=usuarios,dc=kyapanel,dc=com,dc=br accounts_query_filter = (&(uid=%u)(accountStatus=0)) accounts_result_attribute = uid accounts_version = 3
Explicando
Perceba que todas as linhas são iniciadas pelo nome da configuração. Se a escolha do nome da configuração for, por exemplo, “usuarios”, então todas as linhas iniciariam pelo nome “usuarios”.
linha 1 – Aqui é definido o “host” do servidor no qual a consulta será feita
linha 2 – Aqui é definido o “galho” onde a pesquisa deve ser feita. Pode-se definir a raiz da base LDAP, se necessário, mas dependendo da base LDAP pode ser mais conveniente e eficiente pesquisar em apenas um “galho”.
linha 3 – Filtro da pesquisa. Perceba que estamos usando um atributo do novo schema qmailuser.schema, o “accountStatus”. Se este atributo for diferente de “0” o usuário não receberá mensagens.
linha 4 – Atributo que deve ser retornado no caso da pesquisa ser efetuada com sucesso.
3. Reinicie o Postfix com o comando:
/etc/init.d/postfix restart
Testes de funcionamento
Neste ambiente de configurações e testes, o envio da mensagem de testes irá falhar. Não por um problema de comunicação com o servidor OpenLDAP, mas porque os usuários da base LDAP não existem no sistema operacional.
Por padrão o Postfix só entrega mensagens na caixa postal dos usuários reais do sistema operacional. Apesar de termos feito as configurações para que a consulta de usuários fosse feita na base LDAP, esses usuários não existem localmente. Portanto a entrega de mensagens não pode acontecer, provocando uma mensagem de erro no Postfix.
Vejamos o erro:
1. Abra um terminal e monitore o arquivo de “log” do Postfix com o seguinte comando:
tail -f /var/log/mail.log
2. Abra um segundo terminal e envie uma mensagem com o seguinte comando:
echo "Teste de envio" | mail -s "Teste de envio" fulano1@kyapanel.com.br
Verifique o erro encontrado no “log” do Postfix. Algo similar a isto:
Nov 22 16:00:54 server postfix/local[8493]: 9BD8410C3B: to=<fulano1@kyapanel.com.br>, relay=local, delay=0.24, delays=0.13/0.02 0/0.09, dsn=5.1.1, status=bounced (unknown user: "fulano1")
A mensagem de erro é clara: “unknown user” ou seja, usuário desconhecido. Pode-se pensar que esse erro deve-se a alguma falha na configuração do suporte a LDAP do Postfix, mas não é isso. O problema está na parcela de escrita da mensagem na caixa postal do usuário. Afinal de contas o usuário “fulano1” não existe no sistema, ele existe somente na base LDAP.
Para poder realizar nosso teste precisaremos adicionar um usuário local. Isso não será necessário em um ambiente de produção quando existir um DMA – Delivery Mail Agent para poder escrever a mensagem na caixa postal do usuário.
1. Execute o comando abaixo, para adicionar um usuário local:
useradd fulano1
2. Envie uma segunda mensagem para o usuário “fulano1”:
echo "Teste de envio" | mail -s "Teste de envio" fulano1@kyapanel.com.br
Verifique o “log” do Postfix. Deverá surgir uma mensagem de sucesso. Algo como isto:
Nov 22 16:12:34 server postfix/local[8506]: 15DA310C3B: to=<fulano1@kyapanel.com.br>, relay=local, delay=0.08, delays=0.04/0.02/0/0.02, dsn=2.0.0, status=sent (delivered to mailbox)
Perceba que o “status” é: “sent (delivered to mailbox)”, ou seja, enviado e entregue com sucesso.
Mais adiante veremos a integração do Postfix com um servidor IMAP/POP que é também um DMA – Delivery Mail Agent. Assim não será necessário ter usuários reais no sistema.
1. Para finalizar remova o usuário local e siga para o próximo capítulo:
userdel fulano1
Licença
Copyright 2007 Anahuac de Paula Gil e Francisco Kem Iti Saito
Permite-se distribuição, publicação e cópia literal da íntegra deste documento, sem pagamento de royalties, desde que sejam preservadas a nota de copyright, a URL oficial do documento e esta nota de permissão.
Permite-se também distribuição, publicação e cópia literal de seções individuais deste documento, sem pagamento de royalties, desde que sejam preservadas a nota de copyright e a nota de permissão acima, e que a URL oficial do documento seja preservada ou substituída pela URL oficial da seção individual.








