Postfix – Relay agent

Autor: Julio Cesar Xavier Luz <agostode1974 at gmail.com> Data: 19/03/2013 – Post Original em Viva O Linux

Introdução

O Postfix é um servidor de e-mails muito flexível, que foi lançado para tentar substituir o Sendmail, tradicionalmente, o servidor de e-mails mais conhecido, não apenas no GNU/Linux, mas nos sistemas Unix em geral.

Ultimamente, a queda da popularização do Sendmail vem ocorrendo por causa de dois motivos:

  • Primeiro: o brutal número de recursos que tornam a configuração muito complexa e trabalhosa.
  • E segundo: a questão da segurança, ou seja, o histórico de vulnerabilidades muito grande.


O concorrente mais antigo do Sendmail é o Exim, que oferece um conjunto de recursos equilibrados, boa performance e segurança. O Exim é o MTA (Mail Transport Agent) mais usado por padrão no Debian, mas ele pode ser rapidamente substituído pelo Postfix, ou Sendmail, via apt-get.

O qmail, que foi lançado em 1997, possui um design simples e limpo. com destaque à segurança, o que o tornou rapidamente em uma opção popular.

Mas, o qmail possui dois empecilhos, ele foi abandonado pelo autor em 1998, depois do lançamento da versão 1.03 e, embora o código fonte seja aberto, a licença de uso impede a redistribuição de versões modificadas, embora seja permitido disponibilizar patches.

“O Postfix é uma espécie de meio termo entre a simplicidade do qmail e a fartura de recursos do Sendmail.

Entre os três, ele é o mais ágil e o mais simples de configurar, o que o torna atualmente mais popular, e o que possui mais documentação disponível.

O Postfix também possui um excelente histórico de segurança, sendo considerado tão seguro quanto o qmail.”

Fonte: Morimoto, 2009

Conceitos básicos

Antes de continuarmos, gostaria de comentar alguns conceitos básicos:MUA – Mail User Agent :: É o nome dado ao programa de correio eletrônico do usuário, como Evolution, Thunderbird, Sylpheed, entre outros.

MTA – Mail TTransport Agent :: É o responsável por transportar o e-mail de um servidor SMTP para outro servidor SMTP. Exemplos: Postfix, Exim, Sendmail, entre outros.

Hash – Tipo de mapa cujo significado é :: Base Indexada Baseada em Hash ( Berkley DB).

Mapas :: O Postfix utiliza extensivamente o conceito de “mapas”. Mapas, nesse ambiente, são basicamente tabelas de duas colunas:

  • A primeira é a chave;
  • A segunda são os valores dessa chave.

Mapas do tipo DB, são os mais simples e usuais. Exemplo: para um mapa que conterá uma lista de endereços IPs e uma ação a ser tomada, criamos primeiro um arquivo texto com esse conteúdo:

192.168.10.15      REJECT
192.168.10.20      REJECT
dominio.net          REJECT
network.com          OK

Agora, vamos converter esse arquivo para um mapa DB:

# postmap /etc/postfix/client_access

Esse é o arquivo que o Postfix usará ao encontrar: hash:/etc/postfix/client_access

SMTP – Simple Mail Transfer Protocol (“Protocolo de transferência de correio simples”) :: É o protocolo padrão para envio de e-mails através da Internet. É um protocolo relativamente simples, baseado em texto simples, onde um ou vários destinatários de uma mensagem são especificados (e, na maioria dos casos, validados) sendo, depois, a mensagem transferida.

DNS – Domain Name Server :: É um dos servidores mais importantes da infra-estrutura da Internet, permitindo a localização ágil de máquinas e serviços, como por exemplo um servidor de correio eletrônico através do registro MX (Mail Exchangers) na configuração do BIND 9.

A linha IN MX no BIND é necessária sempre que você pretende usar um servidor de e-mail ou outro MTA. Mas assim como o servidor DNS, você pode utilizar um servidor de e-mails secundário que passa a receber os e-mails, caso o seu servidor de e-mails principal saia do ar, ou mesmo utilizar o servidor secundário como backup das mensagens de e-mail.

Mas é necessário esclarecer, que o protocolo SMTP prevê falhas nos links entre os servidores, sendo que, caso o servidor de e-mails principal esteja fora do ar, o emissor tenta contactá-lo durante um longo período (por padrão 03 dias) antes de utilizar o servidor secundário. Por isso, usar vários servidores não resolve o problema, pois em caso de falhas do servidor primário, as mensagens chegarão com grande atraso.

POP3 – Post Office Protocol :: É o protocolo que permite aos usuários acessar as mensagens contidas na sua caixa postal no servidor.

IMAP – Internet Messeges Access Protocol :: Protocolo muito utilizado em Webmail, são mais completos, mas oferecem uma flexibilidade maior.

Relay :: Quando um usuário utiliza o servidor SMTP dentro de uma empresa corporativa para enviar uma mensagem, este servidor SMTP irá fazer o relay desta mensagem para o destino.

Neste caso, o servidor de e-mail está configurado para permitir o relay dos usuários da rede interna, seria o mesmo que fazer uma ligação telefônica utilizando uma telefonista.

Antigamente se falava em servidores de e-mails com relay aberto, ou seja, sem autenticação para prática do spam. Isto é verdade, mas não se deve associar relay com spam, pois todos os servidores de e-mail fazem relay. A questão é em que condições este relay é feito.

Spam :: Um spammer seria uma pessoa que utiliza um servidor de e-mail ou uma rede que não lhe pertence para enviar mensagens para um grande número de destinatários, sem a necessidade de se identificar (autenticar) com um nome válido no campo origem (source) da mensagem. Conseguindo, assim, enviar uma grande quantidade de mensagens “maliciosas” sem a solicitação desses usuários.

Bancos de dados (ou bases de dados) :: São utilizados em muitas aplicações, abrangendo praticamente todo o campo dos programas de computador, são conjuntos de registros dispostos em estrutura regular que possibilita a reorganização dos mesmos e produção de informação, normalmente agrupa registros utilizáveis para um mesmo fim e é acessado por um software chamado Sistema Gerenciador de Banco de Dados (SGDB). Os mais conhecidos são: MySQL, Postgres e Oracle.

LDAP – Lightweight Directory Access Protocol (ou LDAP) :: É um protocolo para atualizar e pesquisar diretórios rodando sobre TCP/IP.

Um diretório LDAP geralmente segue o modelo X.500, que é uma árvore de nós, cada um consistindo de um conjunto de atributos com seus respectivos valores. O LDAP foi criado como uma alternativa ao muito mais incômodo Directory Access Protocol (DAP).

Fonte: LDAP – Wikipédia, a enciclopédia livre

Postfix / Usuário

Instalando Postfix

O Postfix pode ser instalado usando o gerenciador de pacotes nas principais distribuições. Nas distribuições derivadas do Debian, você pode instalá-lo usando o apt-get:

# apt-get install postfix

Mais três pacotes adicionam funcionalidades importantes:

# apt-get install postfix-ldap

Configure o servidor Postfix para obter a lista de logins e senhas a partir de um servidor LDAP.

# apt-get install postfix-mysql
# apt-get install postfix-pgsql

Permite utilizar um servidor MySQL ou Postgres para armazenar a lista de usuários e senhas.

O pacote Postfix no Debian possui um Wizard de configuração, durante a instalação. Ele faz algumas perguntas e se encarrega de gerar uma configuração básica para o funcionamento do servidor.

A 1ª pergunta, é sobre a função do servidor de e-mails que você está configurando. As opções são:

  • “Internet Site” – A mais usada, onde você instala um servidor completo que envia e recebe os e-mails diretamente.
  • “With smarthost” – Seu servidor recebe as mensagens, mas o envio fica a cargo de outra máquina.
  • “Satélite System” – Seu servidor envia através de outra máquina (SMTP) e não recebe mensagens.
  • “Local only” – É usada apenas em redes de terminais leves, permite que apenas usuários logados no servidor troquem mensagens entre si.

A 2ª pergunta, diz: “Qual conta de usuário você gostaria de armazenar as mensagens enviadas ao root@seu-servidor?”

A resposta é o nome da conta normal de usuário que utilizando su ou sudo, permite ganhar privilégios de root.

A 3ª pergunta, é sobre o domínio do servidor, que será incluído nas mensagens enviadas. Se você está configurando um servidor dedicado (completo), utilize seu domínio registrado. Caso esteja apenas configurando um servidor de testes, pode simplesmente usar o nome da máquina, como: “localhost”.

A 4ª pergunta é a mais difícil, pois deve definir os destinos que serão aceitos pelo seu servidor, ou seja, os endereços que colocados no destinatário da mensagem fazem entender que o e-mail é para ele, tanto as mensagens que devem ser salvas e encaminhadas para usuários cadastrados como mensagens que devem ser encaminhadas à outros servidores.

Este campo deve conter o nome da máquina, o domínio registrado (no caso de um servidor real), seguido de “localhost.localdomain” e “localhost” todos separados por vírgula e espaço.

A última pergunta é: “Forçar a opção ‘synchronous updates’?”

Isto faz desativar as otimizações no envio das mensagens, fazendo com que os e-mails sejam enviados conforme são recebidos e em ordem. Essa opção aumenta a confiança do servidor, pois reduz a possibilidade de perdas de mensagens ainda não enviadas em caso de travamentos ou quedas de energia.

Mas por outro lado, reduz o desempenho do servidor, por isso não deve ser utilizada em servidores de grande disponibilidade.

Adaptado de:

  • Morimoto, Carlos Eduardo – Servidores Linux, guia prático, 1ª Reimpressão, Sul Editores, 2009.

Cadastrando usuários

Acompanhando a documentação do Postfix, parece ser um pouco complicado cadastrar usuários no servidor de e-mails. Devido à questão da segurança, a forma mais simples é criar um novo usuário no sistema usando o comando adduser, assim:

# adduser fulano

Esta conta “fulano” estará acessível tanto localmente, quanto remotamente, desde que o servidor de e-mails esteja instalado e configurado como “Internet Site”.

O perigo neste tipo de cadastro é que o usuário passa a conseguir logar-se na máquina de outras formas, via SSH, Telnet, e compartilhamentos de rede.

Para um servidor interno como o nosso relay agent, onde os usuários são conhecidos ou funcionários da mesma empresa, não há perigo, mas para um grande servidor ligado à Internet, com inúmeras contas de e-mails de usuários desconhecidos, não é a forma mais adequada para o cadastro de usuários.

Uma forma mais segura de cadastrar usuários diretamente no servidor, mas sem permitir o seu acesso remoto, é utilizando o comando adduser da seguinte forma:

# adduser –shell /bin/false –no-create-home fulano

Assim, o usuário “fulano” não terá acesso direto ao servidor localmente e muito menos remotamente. Em distribuições derivadas do Debian, você vai precisar adicionar a linha “/bin/false” no final do arquivo /etc/shells, para que ele possa ser usado:

# echo “/bin/false” >> /etc/shells

Atualmente, uma boa opção para cadastrar contas no servidor de e-mails, sem precisar criar logins válidos no sistema, seria armazenar as contas em um servidor MySQL, PostgreSQL ou, até mesmo, em um servidor LDAP. Para isso, são necessários os pacotes já vistos anteriormente.

Configurando o relay agent

O arquivo de configuração principal do Postfix é o: /etc/postfix/main.cfNeste artigo, vou mostrar a configuração de um servidor de e-mails capaz, apenas, de enviar as mensagens com suporte à autenticação SASL, sem suporte à criptografia.

Vamos então à configuração do main.cf.

Obs.: seria possível implementar para um servidor remoto uma autenticação com criptografia, gerando as chaves e certificados TLS (Transport Layer Security) através do comando openssl, mas neste caso, teríamos que utilizar apenas um SMTP com domínio próprio.

O fato do nosso relay agent “escutar” as solicitações das mensagens dos clientes na rede local apenas na porta 25, impossibilita de ativarmos o recurso de autenticação com chaves criptográficas, mas as mensagens encaminhadas pelo servidor relay agent utilizam as mesmas chaves de criptografia de um servidor remoto.

# Postfix – Agente Relay com suporte a autenticação SASLmyhostname = localhost
mydomain = localdomain
relayhost =
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = localhost, localhost.localdomain
mynetworks = 127.0.0.0/8, 192.168.10.0/24
inet_interfaces = all
inet_protocols = allsmtp_use_tls = yes
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/saslpass

Vou fazer uma explicação mais detalhada das opções:

  • A opção “myhostname” deve ter o nome completo do servidor, juntamente com o domínio caso ele possua. No meu caso, por se tratar de um servidor local: “localhost”. E a opção “mydomain” deve conter o domínio sem o nome da máquina (servidor), no meu caso: “localdomain”.
  • “relayhost” :: Esta opção, talvez seja uma das mais importantes. Ela permite indicar apenas um servidor SMTP externo, através do qual as mensagens serão enviadas, exemplo: smtp.meudominio.com.br
  • alias_maps e alias_database :: São mapas de aliases (apelidos) configurados automaticamente.
  • “mydestination” :: Indica quais nomes e domínios serão considerados locais pelo servidor.
  • “mynetworks” :: Endereço, ou faixas de endereços, a partir de onde o servidor aceitará o envio de mensagens. Na minha configuração: 127.0.0.0/8 para e-mails enviados localmente e 192.168.10.0/24 para a minha rede local.
  • “inet_interfaces” e “inet_protocols” :: O servidor possui mais de uma interface de rede, escolhi a opção “all”, tanto para as interfaces que aceitarão os envios de e-mails quanto para os protocolos utilizados.
  • “smtp_use_tls” :: Esta opção ativa o suporte às chaves de criptografia TLS para o envio das mensagens.
  • “smtp_sender_dependent_authentication” – (default: no ) :: Caso “yes”, faz com que o cliente do servidor Postfix dependa de autenticação SASL. Caso “no”, desativa o cache de conexão SMTP para garantir que os e-mails dos diferentes remetentes usarão as informações adequadas.
  • “sender_dependent_relayhost_maps” – (default: empty ) :: Esta opção substitui o parâmetro relayhost. Nesta tabela são pesquisadas os endereços do remetente juntamente com o seu domínio.

/etc/postfix/sender_relay:

# Per-sender provider; see also /etc/postfix/sasl_passwd.
user1@example.com      [mail.example.com]:submission
user2@example.net        [mail.example.net]
  • “smtp_sasl_password_maps” – ( default:empty ) :: Tabela que pesquisa um nome de usuário: a primeira chave por nome ou endereço de domínio, quando o remetente remoto dependente de autenticação. Se não houver nenhum nome de usuário na tabela, ou seja, caso a tabela esteja vazia, então o cliente do servidor Postfix (SMTP) não conseguirá se autenticar utilizando um servidor de e-mails remoto.

/etc/postfix/saslpass:

# Per-sender authentication; see also /etc/postfix/sender_relay.
user1@example.com      username1:password2
user2@example.net        username2:password2

Autenticação SASL

O Postfix determina os clientes que estão autorizados a enviar e-mails através do seu servidor, de acordo com a configuração da linha “mynetworks” no arquivo “main.cf”.Como já foi dito, usando o endereço 127.0.0.0/8 ou 127.0.0.1, o Postfix aceita apenas e-mails enviados do próprio servidor. No caso de um servidor local, você pode permitir o envio a partir de qualquer micro da rede local como “mynetworks = 192.168.10.0/24”.

Mas, quando você precisa permitir o envio de mensagens para usuários da Web, utilizando cable modens, ou qualquer outro tipo de conexão, com IP dinâmico. A saída neste caso, é autenticar os usuários da rede local da mesma forma como fazem os provedores e-mail.

Vamos utilizar então o SASL, que no Debian Squeeze pode ser instalado via apt-get:

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

Após a instalação dos pacotes, vamos à configuração do autenticador SASL, que se encontra no arquivo: /etc/default/saslauthd

Troque a linha:

START = ” no ”
Por:
START = ” yes

Adicione, ou configure a linha:

MECHANISMS = “pam”

Isto permite que ele aceite a autenticação dos usuários.

Crie, ou edite, o arquivo /etc/postfix/sasl/smtpd.conf, para que fique assim:

pwcheck_method: saslauth
mech_list: plain login

O Postfix, ao ser instalado no Debian (e outras distribuições derivadas), roda dentro de uma “jaula” (chroot): “/var/spool/postfix“, que faz com que elimine qualquer problema ligado à segurança, ou falha nos arquivos que possa prejudicar o resto do sistema operacional.

Mas existe um porém, o fato do Postfix possuir o seu próprio chroot ele não tem acesso ao daemon “saslauthd”, prejudicando a autenticação dos usuários no Postfix.

A solução seria criar um diretório dentro do chroot do Postfix para o “saslauthd”, e configura-lo para ser utilizado no lugar do diretório padrão.

Vamos, então, criar o diretório: /var/spool/postfix/var/run/saslauthd:

# mkdir -p /var/spool/postfix/var/run/saslauthd

Configure novamente o arquivo: /etc/default/saslauthd

Em:

OPTIONS = “-c”

Altere para:

OPTIONS = ” -c -m /var/spool/postfix/var/run/saslauthd  -r

Assim, o SASL passa a utilizar o chroot do Postfix e o Postfix passa a ter acesso ao “saslauthd” para autenticar os clientes.

Para assegurarmos nossa modificação, adicione o usuário postfix ao grupo “sasl”:

# adduser postfix sasl

O último passo, é adicionar as linhas a seguir ao final do arquivo: /etc/postfix/main.cf

smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broke_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
smtpd_tls_auth_only = no

Reinicie o Postfix para que as alterações entre em vigor:

# /etc/init.d/postfix restart

Nesta configuração, o servidor suporta apenas autenticação em texto puro, sem encriptação ao enviar as mensagens da rede local para o servidor.

Para configurar um cliente de e-mails, utilize o endereço do servidor como SMTP e nas opções de autenticação para o servidor SMTP, escolha “PLAIN”, e envie um e-mail de teste para ver se está “rodando”.

Nas opções do POP3, utilize o POP do seu serviço de e-mail, e nas opções de autenticação, utilize as chaves TLS, ou ambas TLS/SSL, e sua respectiva porta de configuração: 995.

Após adicionarmos as linhas do serviço de autenticação SASL, o arquivo “main.cf” passará a ficar assim:

# Postfix – Agente Relay com suporte SASLsmtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/saslpassmyhostname = localhost
mydomain = localdomain
relayhost = smtp.googlemail.com:587
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
mydestination = localhost, localhost.localdomain
mynetworks = 127.0.0.0/8, 192.168.10.0/24
inet_interfaces = all
inet_protocols = all# Autenticaçao SASL
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options =
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
smtpd_tls_auth_only = no

Conclusão

Apesar de não se tratar de um servidor de e-mail completo, espero ter conseguido mostrar a simplicidade e, ao mesmo tempo, os principais recursos de um excelente MTA como o Postfix.Com pequenas alterações, caso tivéssemos um domínio próprio e devidamente registrado, poderíamos criar um servidor de e-mail completo (Internet site), que enviaria as mensagens e receberia nas contas e diretórios dos usuários cadastrados.

Acredito que este artigo possui um caráter mais didático com conceitos e explicações elementares do que um artigo prático. A única dificuldade encontrada durante a configuração do “main.cf” para o relay agent, foi quanto ao cadastro dos usuários, não no sistema, e sim utilizando a opção:

sender_dependent_relayhost_maps

… na qual neutraliza a utilização do relayhost, e permite cadastrar no arquivo “sender_relay”, vários usuários com diferentes domínios, como: Gmail, Hotmail, Terra e outros.

E Viva o Linux!!!

Referências bibliográficas:

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: