Areas: Principal | Apache | DNS | FreeSWAN | giFT | LDAP | Mutt | Postfix | Sincronia | Vim | VNC

Instalar Postfix + SMTP Auth + POP3 em ambiente virtual

Deives Michellis "thefallen"



1. Introducao

Esse tutorial mostra como instalar um ambiente de correio com apenas usuarios virtuais sem muitas dependencias...

O jeito mais "correto" e organizado de se fazer isso seria ter uma base unica de usuarios, que pudesse ser compartilhada por todos os servicos e varias maquinas... Normalmente faco isso utilizando um Diretorio OpenLDAP, pois eh bastante flexivel e poderoso...

Neste caso especifico, queriamos instalar o minimo possivel de servicos/programas no servidor em questao, para simplificar ao maximo a re-instalacao e/ou manutencao da maquina... Optamos por nao usar o OpenLDAP, mas fazer isso num ambiente simplificado, mesmo por que aqueles que ja mexeram/mexem com OpenLDAP sabe que ele pode dar algumas dores de cabeca ate se "acomodar" no seu ambiente, especialmente com os conflitos de ObjectClass e arquivos de Schema um tanto quanto complexos para um iniciante...

Nesse ambiente que montaremos, os usuarios serao "virtuais" pois nao serao usuarios do sistema (nao existirao no /etc/passwd e afins); eles soh existem no ambiente de correio. Isso representa um bom aumento de seguranca, pois os usuarios de email nao podem fazer login na maquina nem ftp nem nada... Soh correio.

1.1. Software Utilizado

Bom, nessa nossa instalacao usaremos (no momento da escrita deste documento, estas eram as versoes atuais):

Essa instalacao foi feita num FreeBSD 5.1, mas funciona em qualquer distribuicao *nix moderna (Linux, Free/Net/OpenBSD, etc...)

2. Instalando...

2.1. Cyrus-SASL

Bom, maos a obra! Primeiro de tudo vamos instalar o Cyrus-SASL...

  thefallen@KlingonRealm:/usr/src$ tar -xzf cyrus-sasl-2.1.15.tar.gz
  thefallen@KlingonRealm:/usr/src$ cd cyrus-sasl-2.1.15
  thefallen@KlingonRealm:/usr/src/cyrus-sasl-2.1.15$ ./configure --with-saslauthd --with-pwcheck --disable-gssapi
  (...)
  thefallen@KlingonRealm:/usr/src/cyrus-sasl-2.1.15$ make
  (...)
  thefallen@KlingonRealm:/usr/src/cyrus-sasl-2.1.15$ su
  root@KlingonRealm:/usr/src/cyrus-sasl-2.1.15# make install    # Tu nao invocaras o Nome do Root em vao :)
  root@KlingonRealm:/usr/src/cyrus-sasl-2.1.15# ln -si /usr/local/lib/sasl2 /usr/lib/sasl2

Este eh um truque do SASL que costuma dar muuuuuuuuita dor de cabeca... Ele se instala no /usr/local/lib/sasl2, mas os programas que usam o Cyrus-SASL procuram os plugins no /usr/lib/sasl2... Eh mole? Levei algumas horas batendo a cabeca na parede pra descobrir isso hehehe

Bom, ja terminamos com o Cyrus-SASL, agora atacaremos o Postfix :)

2.2. Postfix

Antes de instalar o Postfix, tenha completa certeza de que voce REMOVEU TODOS OS PACOTES DO SENDMAIL. Como o Postfix eh preparado para substituir o Sendmail, tenha certeza de que voce o removeu antes de comecar a instalar o postfix. Recentemente tivemos um Flame danado na lista do Postfix por que algum cabeca-de-vento instalou o Postfix por cima do Sendmail e rodou o up2date do RedHat... O up2date reinstalou o sendmail e mandou o postfix pro espaco ...

  thefallen@KlingonRealm:/usr/src$ tar -xzf postfix-2.0.14.tar.gz
  thefallen@KlingonRealm:/usr/src$ cd postfix-2.0.14

  Primeiro vamos fazer uma limpeza geral...

  thefallen@KlingonRealm:/usr/src/postfix-2.0.14$ make tidy

  Agora prepararemos o Postfix com as bibliotecas do SASL2...

  thefallen@KlingonRealm:/usr/src/postfix-2.0.14$ make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib
  -lsasl2"

  thefallen@KlingonRealm:/usr/src/postfix-2.0.14$ make
  (...)

Agora precisamos criar o grupo 'postdrop' e o usuario 'postfix'.

ATENCAO: O usuario postfix NAO pode estar no grupo postdrop... Isso eh feito justamente para haver a separacao de privilegios, portanto, nao va querer "juntar" os privilegios de novo :o)

Se voce estiver usando um FreeBSD, o comando eh:

  root@KlingonRealm:~# pw add group postdrop; pw add user -n postfix -g daemon

Se estiver usando um Linux, o comando eh:

  root@KlingonRealm:~# groupadd postdrop; useradd -g daemon postfix

Se voce eh algum paranoico por seguranca, pode criar os usuarios com o shell apontando para /bin/false ou /bin/nologin...

Feito isso, passaremos a instalacao dos binarios e configuracoes do postfix...

  thefallen@KlingonRealm:/usr/src/postfix-2.0.14$ su
  root@KlingonRealm:/usr/src/postfix-2.0.14# sh postfix-install

A instalacao eh padrao... Eh basicamente apertar Enter :) So verifique o usuario e o grupo que o postfix usara.

Precisamos agora criar o usuario "virtual" no sistema, ou seja, o UserID sob o qual as mensagens serao armazenadas e acessadas... Aqui, usamos o usuario vmail e grupo vmail...

Se voce estiver usando um FreeBSD, o comando eh:

  root@KlingonRealm:~# pw add group vmail; pw add user -n vmail -g vmail

Se estiver usando um Linux, o comando eh:

  root@KlingonRealm:~# groupadd vmail; useradd -g vmail vmail

Precisamos agora definir o local em que as caixas serao armazenadas... Neste nosso exemplo, serah em /var/mbox...

  root@KlingonRealm:~# cd /var; mkdir -p mbox/127.0.0.1/mail ; mkdir -p
  mbox/127.0.0.1/auth ; chown -R vmail:vmail mbox

Os subdiretorios 127.0.0.1/auth e 127.0.0.1/mail vao ser usados com o popa3d... Veja mais a frente.

Precisamos dizer ao Cyrus-SASL qual mecanismo usar pra autenticar. Existem um MONTE deles... Os mais comuns sao sasldb, shadow e saslauthd. O sasldb usa seu proprio banco de dados, o shadow usa o do sistema e o saslauthd eh um mecanismo que suporte mais um MONTE de backends, como LDAP, IMAP, e outros mais. Pra configurarmos o Cyrus pro postfix, vamos editar o arquivo /usr/local/lib/sasl2/smtpd.conf (ou /usr/lib/sasl2/smtpd.conf, dependendo de onde o Cyrus foi instalado.)

  /usr/local/lib/sasl2/smtpd.conf:
  pwcheck_method: sasldb

Feito isso, altere o arquivo /etc/postfix/main.cf e adicione as seguintes linhas no FIM do arquivo:

  /etc/postfix/main.cf:
  #
  # Configuracoes de Network do postfix
  #
  # Mude para se ajustarem ao seu dominio
  #
  myhostname = spy.linuxajuda.com.br
  mydomain = linuxajuda.com.br
  mydestination = linuxajuda.com.br, spy.linuxajuda.com.br
  mynetworks = 127.0.0.1/32, 192.168.0.0/24

  #
  # Configuracoes do SASL
  #
  broken_sasl_auth_clients = yes
  smtpd_sasl_auth_enable = yes
  smtpd_sasl_security_options =  noanonymous

  #
  # Agora, aplicar as regras do SASL no smtpd...
  #
  smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,
  reject_unauth_destination

  #
  # Fim do sasl
  #

  #
  # Agora, ativar o Virtual Delivery Agent (VDA) para manipular as mailboxes
  #
  mailbox_transport = virtual
  local_transport = virtual

  #
  # Agora, o "pulo do gato" pra usar a entrega direto no popa3d:
  #
  virtual_mailbox_base = /var/mbox/127.0.0.1/mail/

  #
  # Configuracoes para os usuarios serem efetivamente "virtuais"
  #
  # Vamos especificar o arquivo que tem as listas de usuarios e aliases
  #
  virtual_mailbox_maps = hash:/etc/postfix/maps.virtual
  virtual_maps = hash:/etc/postfix/maps.aliases

  #
  # Qual UserID sera usado para entregar a mensagem
  #
  # Substitua o 1008 pelo UserID do vmail e 1005 pelo GroupID do vmail
  # rode o comando: id vmail
  # Ele lhe mostra esses dados
  #
  virtual_uid_maps = static:1008
  virtual_gid_maps = static:1005

Agora, vamos criar nossas tabelas de usuarios. Edite o arquivo /etc/posfix/maps.virtual e /etc/postfix/maps.aliases e adicione segundo este formato:

  /etc/postfix/maps.virtual:
  teste@linuxajuda.com.br  TAB    teste

  /etc/postfix/maps.aliases:
  alias1@linuxajuda.com.br  TAB   lala@uol.com.br, lele@ig.com.br, lili@terra.com.br

PS - Lembre-se de substituir o TAB por um tab de verdade :)

Depois de editarmos esse arquivo, ele precisa ser "compilado" num formato reconhecido pelo Postfix... Eh pra isso que ha o comando postmap...

  root@KlingonRealm:~# postmap /etc/postfix/maps.virtual ; postmap /etc/postfix/maps.aliases

Para que o Postfix saiba que alteramos esses arquivos, precisamos fazer um "reload" nas configuracoes deles... Rode o comando "postfix reload" (se o Postfix ja estiver rodando) ou "postfix start" (pra startar). O postmap gera arquivos .db (nao se assuste qdo os vir nem os apague :) )

Lembre-se de alterar a permissao do /var/mbox para o usuario vmail.

  root@KlingonRealm:~# chown vmail:vmail -R /var/mbox

Faca um teste... Rode o comando:

  thefallen@KlingonRealm:~$ echo "Hello World!" | /usr/sbin/sendmail teste

Faca um "tail" no /var/log/maillog... Veja a mensagem caindo na caixa do usuario :)

2.3. Popa3d

A instalacao do popa3d talvez seja a que de um pouco mais de trabalho...

Descompacte o popa3d-0.6.3.tar.gz... Dentro do diretorio ha um arquivo chamado params.h... Edite-o.

Altere as seguintes linhas:

  #define POP_STANDALONE 1
  #define POP_VIRTUAL 1
  #define VIRTUAL_HOME_PATH "/var/mbox/"
  #define VIRTUAL_ONLY 1

Agora edite o Makefile e altere a linha descomentando:

  # Linux with glibc, FreeBSD, NetBSD
  LIBS += -lcrypt

  thefallen@KlingonRealm:/usr/src/popa3d-0.6.3$ make
  (...)

Depois de compilado, eh soh copiar o arquivo "popa3d" dentro desse diretorio pra algum diretorio no sistema... Voce pode por exemplo copia-lo para o /opt/pop3 ou /usr/local/bin, fica ao gosto do fregues :)

Para inicia-lo, rode o comando "/opt/pop3/popa3d -D" ou onde quer q vc tenha posto o binario...

Para que o popa3d autentique os usuarios virtuais, ele PRECISA ter o diretorio /var/mbox/IP_DA_PLACA_DE_REDE/auth. Com essa restricao, facilitaria ter dominios virtuais tambem (se fosse o caso). Por hora vamos apenas fazer links simbolicos com os diversos IPs... Lembre-se que no comeco nos criamos o /var/mbox/127.0.0.1.

Suponhamos que seu servidor tenha os IPs 127.0.0.1, 192.168.100.5 e 200.200.200.200...

  root@KlingonRealm:/var/mbox# ln -si 127.0.0.1 192.168.100.5
  root@KlingonRealm:/var/mbox# ln -si 127.0.0.1 200.200.200.200
  root@KlingonRealm:/var/mbox# chown -R vmail:vmail /var/mbox    # apenas para nos certificarmos que as permissoes estao corretas

Pronto, esta instalado. Para criar os usuarios no popa3d de forma mais simples, existe esse script: http://gene.wins.uva.nl/~talerven/software/add-popa3d-user/

2.4. Misturando tudo junto

Agora que ja temos tudo funcionando, deu um trabalhao pra montar, bate aquela preguica de manter isso tudo :) Ter que editar um arquivo de configuracao do postfix, usar o saslpasswd2 para criar o usuario no cyrus-sasl e usar o add-popa3d-user pra criar o usuario no pop3... Xiiiii

Bom, eu juntei esses 3 trabalhos em um unico script, que batizei de "addmailuser". Ele eh o add-popa3d-user com as opcoes dos outros servicos tambem.

Ele esta hospedado em http://www.unitednerds.org/projects/mail/

Edite-o e mude o MyDomain para o seu dominio...

Voce provavelmente vai precisar dos seguintes modulos do perl:

Voce pode instala-los facilmente via CPAN do perl...
  root@KlingonRealm:~# perl -MCPAN -e shell
  (...)
  cpan> install Crypt::PasswdMD5
  (...)
  cpan> install Digest::MD5
  (...)
  cpan> exit

Se nao sabe/nao gosta do CPAN automatico, va no site www.cpan.org e procure esses modulos especificos... A instalacao normalmente se resume a "perl Makefile.PL; make; make install"

Faca um test-drive :)

3. Conclusao

A instalacao desses softwares nao eh taaaaaao complicada assim, e os beneficios sao consideraveis, uma vez que a base de usuarios pode ser migrada dum lado para o outro sem ter problemas de compatibilidade dos /etc/passwd, /etc/shadow, etc etc etc.

Isso tambem facilita que usuarios nao-privilegiados do sistema sejam capazes de criar usuarios de email. SIM! Agora voce pode pegar aquele cara chato que vive te enxendo a paciencia pra criar o usuario XYZ e deixa-lo gerenciar suas contas. Sem os santos poderes do root, ele nao vai fazer "caca" no sistema :)

4. Sobre o autor

Deives Michellis "thefallen" eh Tecnologo em Processamento de Dados pela FATEC/SP e Gerente de Desenvolvimento de Solucoes Linux do Grupo GEO. Tambem nerd de carteirinha e ativista linux nas horas vagas.

Ultima Revisao: Thu Jan 8 10:07:04 2004

Criado com o txt2tags

A menos que especificado de outra maneira, todos os documentos e textos sao protegidos sob licenca BSD - Veja a licenca para mais detalhes
Leia tambem sobre o motivo de uso de licencas em documentacao.