Mailman com Postfix e Domínio Virtual

Colaboração: Tiago Cruz

Data de Publicação: 29 de Setembro de 2005

O Mailman é um sistema utilizado para administrar listas de discussão ou listas de informativos (as famosas newsletter) similar aos conhecidos Majordomo ou Smartmail. A vantagem é que, além de muito mais fácil de configurar, o Mailman possui administração via Web, onde o administrador pode gerenciar o sistema de sua mesa de trabalho, usando um browser comum. Ele possui também filtros de conteúdo, arquivamento das mensagens enviadas para a lista, moderação de membros, filtros anti-spam dentre [várias outras funcionalidades http://www.gnu.org/software/mailman/].

O Mailman é utilizado para gerenciar as listas de projetos como o KDE, Gnome, SaMBa e usado em empresas com a Red Hat, Apple, Sun, Conectiva dentre outras. O mesmo está disponível para vários sabores de Unix (incluindo Linux e FreeBSD) e irei listar abaixo um guia rápido de instalação para a integração com um ambiente já funcionando com Postfix e MySQL.

Este documento é feito sob um FreeBSD 5.4, mas pode ser facilmente adaptado para as demais variações do Unix.

Instalação pelo Ports

Irei compilar o Mailman 2.1.6_1 usando o ports do FreeBSD, mas é necessário tomar cuidado para compilar o mesmo usando o Group ID (GID) próprio para o uso com o Postfix, visto que o padrão é o Sendmail. Esta configuração é necessária para evitar a menssagem "Group mismatch error" durante a utilização do mesmo. Caso use um MTA diferente do Postfix, consulte a documentação para ver outros GID's de grupos que podem (devem) ser utilizados em tempo de compilação.

Você pode usar pacotes binários se preferir. Tenho notícias que o pacote da Conectiva e da Mandrake vem compilado já com esse suporte ao Postfix.

  # cd /us/ports/mail/mailman
  # make deinstall
  # vi Makefile
  # Set: MAIL_GID?= mailman
  # make install clean

É possível configurar o portupgrade para sempre compilar o Mailman com esse GID. Para isso, adicione na seção MAKE_ARGS do arquivo /usr/local/etc/pkgtools.conf a seguinte linha: 'mail/mailman' => 'MAIL_GID=mailman',

Configuração do Apache

É necessário incluir algumas linhas no httpd.conf do Apache para a administração via browser. Na documentação oficial diz que as linhas ScriptAlias e a linha Alias é suficiente, mas para mim não funcionou.

  ScriptAlias /mailman "/usr/local/mailman/cgi-bin"
  
  <Directory "/usr/local/mailman/cgi-bin">
  AllowOverride None
  Options none
  Order allow,deny
  Allow from all
  </Directory>
  
  
  Alias /pipermail "/usr/local/mailman/archives/public"
  
  <Directory "/usr/local/mailman/archives/">
  AllowOverride None
  Options +FollowSymlinks
  Order allow,deny
  Allow from all
  </Directory>

O primeiro bloco evita o errro "client denied by server configuration" e o segundo evita o primeiro e mais o erro "Symbolic link not allowed" :)

Após dar um restart em seu Apache, a interface gráfica deve estar disponível pelo endereço http://localhost/mailman/listinfo

Configuração do Postfix

Estas são as alterações necessárias no main.cf <http://main.cf> Postfix. Para maiores detalhes, consulte a documentação do mesmo.

Recomendo que não faça o reload no postfix por enquanto, pois ainda não temos os arquivos $mailman/data/*

  owner_request_special = no
  recipient_delimiter = +
  
  virtual_alias_maps = hash:/usr/local/mailman/data/virtual-mailman,
  mysql:/usr/local/etc/postfix/mysql/mysql_virtual_alias_maps.cf
  
  alias_maps = hash:/usr/local/mailman/data/aliases,
  hash:/usr/local/etc/postfix/aliases

Configuração do Mailman

No arquivo $mailman/Mailman/Defaults.py:

  DEFAULT_EMAIL_HOST = 'dominioprincipal.com <http://dominioprincipal.com>'
  DEFAULT_URL_HOST = 'host.dominio.com <http://host.dominio.com>'
  DEFAULT_URL_PATTERN = 'http://%s/mailman/'
  
  DEFAULT_SERVER_LANGUAGE = 'pt_BR'

Em DEFAULT_EMAIL_HOST é interessante deixar o domínio principal de sua máquina, o que terá mais listas sob seu domínio.

Em DEFAULT_URL_HOST será o endereço a ser acessado via browser. Eu estou usando o hostname da máquina.

No arquivo $mailman/Mailman/mm.py:

  MTA = "Postfix"
  
  POSTFIX_STYLE_VIRTUAL_DOMAINS = ['virtual1.net <http://virtual1.net>', '
  virtual2.com.br <http://virtual2.com.br>', 'virtual3.com<http://virtual3.com>',
  'virtual4.org <http://virtual4.org>']
  add_virtualhost('www.virtual1.net <http://www.virtual1.net>',
  'virtual1.net<http://virtual1.net>
  ')
  add_virtualhost('www.virtual2.com.br <http://www.virtual2.com.br>', '
  virtual2.com.br <http://virtual2.com.br>')
  add_virtualhost('www.virtual3.com <http://www.virtual3.com>',
  'virtual3.com<http://virtual3.com>
  ')
  add_virtualhost('www.virtual4.org <http://www.virtual4.org>',
  'virtual4.org<http://virtual4.org>
  ')

Neste arquivo fica a lista de todos os domínios virtuais que o mailman poderá responder.

No arquivo $mailman/data/virtual-mailman:

Crie este arquivo com uma linha pertencendo ao usuário "mailman":

  virtual-alias.sagatiba.com <http://virtual-alias.sagatiba.com> anything

O Mailman deverá atualiza-lo a cada lista que você criar ou remover, junto com um arquivo chamado virtual-mailman.db. Este é o arquivo que o postfix irá ler para achar seu usuário chamado <lista-subscribe (a) dominio com br>, por exemplo.

Se esse arquivo não estiver sendo atualizado, você verá mensagens de //"user unknow"// nos logs do seu postfix.

Criando lista administrativa

Utilize os comandos abaixo para criar uma lista chamada 'mailman', que servirá para tarefas administrativas.

  # cd /usr/local/mailman
  # bin/newlist mailman
  # bin/config_list -i data/sitelist.cfg mailman

Este último comando fará com que seja atribuída a esta lista uma configuração inicial padrão.

Aproveite para colocar os agendamentos do Mailman no cron:

  # cd cron
  # crontab crontab.in <http://crontab.in>

Atenção: Faça um backup do seu cron atual, caso já possua algum agendamento!

Problemas ao criar uma lista

Você pode usar o comando "bin/check_perms -f" para verificar se as permissões estão corretas.

O comando "bin/genaliases" deve ser capaz de criar os arquivos "data/aliases*" para você, mas mesmo assim verifique as permissões do mesmo!

Olhe também os logs de acesso em "logs/error" em caso de problemas.

Olhe, em especial, a permissão dos arquivos em "data/aliases*" e "data/virtual-mailman*" pois os arquivos devem pertencer ao usuário "mailman" e isso é responsável por uma grande parcela dos problemas. Verifique no momento da criação da lista se os arquvios aliases.db e virtual-mailman.db são criados (ou atualizados), isso é fundamental para o funcionamento correto do sistema!

Definindo uma senha mestre para o Mailman

Essa senha mestra pode ser utilizada no lugar das senhas individuais das listas. Para cria-la, use o comando:

  # /usr/local/mailman/bin/mmsitepass

Iniciando e parando o Mailman

No diretório $mailman (/usr/local/mailman) use:

  # bin/mailmanctl stop
  # bin/mailmanctl start

Use sempre que alterar os arquivos "Mailman/mm.py" e/ou "Mailman/Defaults.py"

Criando uma lista com a interface web

A mesma já deve estar acessível via http://ip_do_server/mailman/create

Após criar, verifique (novamente!) os arquivos em $mailman/data/*

Note que a lista será criada com seu domínio padrão e que não será possível altera-lo durante a criação da lista!

Alterando o domínio da lista

Após fazer todos os testes e entender o funcionamento do Mailman, você pode querer usar seus domínios virtuais, para isso:

  • Crie a lista normalmente. O domínio criado será o padrão definido do arquivo Defaults.py;

  • Via interface administrativa, em "Opções Gerais" -> "Nome de Máquina" altere para o domínio desejado;

  • Altere o arquivo $mailman/data/virtual-mailman conforme abaixo:

      # STANZA START: lista-teste
      # CREATED: Wed Aug 17 11:22:08 2005
      lista-info@dominioprincipal.com lista-linfo
      lista-info-admin@dominioprincipal.com lista-linfo-admin
      lista-info-bounces@dominioprincipal.com lista-linfo-bounces
      lista-info-confirm@dominioprincipal.com lista-linfo-confirm
      lista-info-join@dominioprincipal.com lista-linfo-join
      lista-info-leave@dominioprincipal.com lista-linfo-leave
      lista-info-owner@dominioprincipal.com lista-linfo-owner
      lista-info-request@dominioprincipal.com lista-linfo-request
      lista-info-subscribe@dominioprincipal.com lista-linfo-subscribe
      lista-info-unsubscribe@dominioprincipal.com lista-linfo-unsubscribe
      # STANZA END: lista-teste
    
    Para:

      # STANZA START: lista-teste
      # CREATED: Wed Aug 17 11:22:08 2005
      lista-info@virtual2.com.br lista-linfo
      lista-info-admin@virtual2.com.br lista-linfo-admin
      lista-info-bounces@virtual2.com.br lista-linfo-bounces
      lista-info-confirm@virtual2.com.br lista-linfo-confirm
      lista-info-join@virtual2.com.br lista-linfo-join
      lista-info-leave@virtual2.com.br lista-linfo-leave
      lista-info-owner@virtual2.com.br lista-linfo-owner
      lista-info-request@virtual2.com.br lista-linfo-request
      lista-info-subscribe@virtual2.com.br lista-linfo-subscribe
      lista-info-unsubscribe@virtual2.com.br lista-linfo-unsubscribe
      # STANZA END: lista-teste
    

  • Rode o comando "# postmap virtual-mailman" e veja se o arquivo .db foi criado, se suas permissões estão corretas e etc.

Agradecimentos

Agredeço aos meus colegas de profissão que ajudaram a documentar todo esse processo, desde a correção ortográfica até a escolha da licensa do documento, passando por toda a parte técnica da implementação em si.

Referências

Caso você tenha problemas, segue os links que usei de consulta:

 

 

Veja a relação completa dos artigos de Tiago Cruz

Avalie esta dica

  • Currently 2.98/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (2297 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script