ct

    Mailman com Postfix e Domínio Virtual

    Artigos

    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.Tiago Cruz
    16/09/2005


    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

    » Gostou do texto? Veja nossos livros impressos

    ... ou use a busca para localizar outros artigos relacionados:

cb
Livros de Carlos E. Morimoto HOME