Mailman com Postfix e Domínio Virtual

Por:
Mailman com Postfix e Domínio Virtual
Sobre o Mailman

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.

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” AllowOverride None Options none Order allow,deny Allow from all

AllowOverride None
Options none
Order allow,deny
Allow from all
Alias /pipermail “/usr/local/mailman/archives/public”

AllowOverride None
Options +FollowSymlinks
Order allow,deny
Allow from all

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 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/*

texto1

Configuração do Mailman

No arquivo $mailman/Mailman/Defaults.py:

DEFAULT_EMAIL_HOST = ‘dominioprincipal.com’
DEFAULT_URL_HOST = ‘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’, ‘virtual2.com.br’, ‘virtual3.com’, ‘virtual4.org’] add_virtualhost(‘www.virtual1.net’, ‘virtual1.net’)
add_virtualhost(‘www.virtual2.com.br’, ‘virtual2.com.br’)
add_virtualhost(‘www.virtual3.com’, ‘virtual3.com’)
add_virtualhost(‘www.virtual4.org’, ‘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 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@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

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 licença 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:

Gerenciador de Listas Mailman

GNU Mailman – Installation Manual -6.1.2 Virtual domains

Mailman FAQ Wizard 1.0.3

Mailman Documentation

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X