Admins/ExpressoListas

De Wiki Expresso V3
Ir para: navegação, pesquisa

Conteúdo

Introdução

A suíte ExpressoBr disponibiliza o recurso de gestão de listas de e-mail contingenciadas em um serviço LDAP. Através do uso desta funcionalidade, é possível utilizar os serviços de mensageria endereçados para listas de grupos de usuários, nativamente. Através da gestão, é possível classificar os integrantes da lista. Diferente de versões anteriores o controle de envio para listas passa a ser feito pelo postfix.

Listas controladas pelo Postfix

Seguem os procedimentos para a implantação das Listas por aliases de Postfix. Esse tipo de lista permite a total escalabilidade horizontal, uma vez que o único repositório que emprega é o LDAP. Esse tipo de lista, embora possua menos recursos que as listas do Mailman, consegue suprir quase a totalidade das features empregadas, com muito menor complexidade. Abaixo segue a lista de possibilidades de serem criadas nesse tipo de lista:

   Criação de listas abertas, onde não há restrição quanto ao remetente;
   Criação de listas fechadas, onde somente os integrantes têm direitos de envio;
   Criação de listas restritas, onde somente os emails indicados possuem direitos de envio;

Considerações sobre o Serviço LDAP

Os schemas LDAP

Os seguintes esquemas devem ser adicionados na carga do serviço LDAP:

- phpgwaccount.schema (para compatibilidade com a Versão 2 do Expresso)
- qmailuser.schema(retirado em 10/09/2015, seus objetos foram para mailman.schema)    
- mailman.schema

Caso você já possua um ldap pré-existente é necessário carregar estes eschemas na inicialização do serviço.

Estes 3 arquivos podem ser obtidos do instalador inicial, no subdiretório ./expresso-v3/files/debian/etc/ldap/schemas.

Obs: o instalador automatizado disponível para download já inclui estes atributos e os respectivos schemas.

Os atributos Ldap

Abaixo os principais atributos responsáveis pela implantação dos controles de envio:

   archivePrivate: se contiver o valor mailListRestriction, o Postfix consultará os demais atributos. Do contrário, a lista será apenas um conjunto de  
   aliases de email. Será uma lista aberta.
   nãomoderado: atributo multivalorado que deve armazenar a lista de usuários que poderiam enviar para a lista. No caso de todos os integrantes poderem 
   enviar emails para a lista, esses integrantes não precisam estar relacionados nesse atributo.
   admLista: atributo multivalorado que deve armazenar a lista de administradores da lista. Esse atributo deverá ser útil para a ferramenta de 
   administração 
   que está sendo desenvolvida (12/2013).
   defaultMemberModeration: informa se os integrantes da lista devem ser impedidos de postar para a mesma. Se contiver o valor FALSE, todos os 
   integrantes 
   poderão postar emails para a lista.
   mailForwardingAddress: informa os emails dos integrantes da lista.
   deliveryMode: por uma questão de compatibilidade com as diferentes versões de Expresso, esse atributo deve possuir o valor forwardOnly para todas as 
   listas de aliases de Postifix.
   accountRestrictive: a mesma informação que o archivePrivateo;
   participantCanSendMail: a mesma informação que o defaultMemberModeration;
   mailSenderAddress: a mesma informação que o naomoderado;
   accountDeliveryMessage: sempre o valor OK.

Listas encadeadas

Listas contidas em outras listas são entregues pelo Postfix com a permissão da primeira lista.

Ou seja, um remetente que tiver direitos de postagem na lista, por exemplo, assumiria direitos de postagens sobre todas as demais listas não importando as restrições dessas últimas. Exemplos de ldif para as listas

Abaixo seguem exemplos de listas com diferentes configurações:

Lista completamente aberta

dn: uid=lista-oposc-suporte-teste,ou=expressolivre,ou=corp,dc=comunicacao,dc=gov,dc=br
sn: lista-oposc-suporte-teste
cn: lista-oposc-suporte-teste
uidNumber: 999905110
uid: lista-oposc-suporte-teste
givenName: MailList
homeDirectory: /home/false
loginShell: /bin/false
mail: lista-oposc-suporte-teste1@serpro.gov.br
description: lista-oposc-suporte-teste1
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: phpgwAccount
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: mailman
phpgwAccountType: l
phpgwAccountStatus: A
gidNumber: 0
deliveryMode: forwardOnly
accountStatus: active
mailForwardingAddress: emerson.virtuo@serpro.gov.br
mailForwardingAddress: testador@dominio.gov.br

Lista onde somente os membros podem postar emails (ítem em revisão, algumas funções podem não funcionar corretamente)

dn: uid=lista-oposc-suporte-teste,ou=expressolivre,ou=corp,dc=comunicacao,dc=gov,dc=br
sn: lista-oposc-suporte-teste
cn: lista-oposc-suporte-teste
uidNumber: 999905110
uid: lista-oposc-suporte-teste
givenName: MailList
homeDirectory: /home/false
loginShell: /bin/false
mail: lista-oposc-suporte-teste1@serpro.gov.br
description: lista-oposc-suporte-teste1
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: phpgwAccount
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: mailman
phpgwAccountType: l
phpgwAccountStatus: A
gidNumber: 0
deliveryMode: forwardOnly
accountStatus: active
archivePrivate: mailListRestriction
admlista: expresso-admin@serpro.gov.br
defaultMemberModeration: FALSE
mailForwardingAddress: emerson.virtuo@serpro.gov.br
mailForwardingAddress: testador@dominio.gov.br

Lista onde só determinados usuários podem postar (ítem em revisão, algumas funções podem não funcionar corretamente)

dn: uid=lista-oposc-suporte-teste,ou=expressolivre,ou=corp,dc=comunicacao,dc=gov,dc=br
sn: lista-oposc-suporte-teste
cn: lista-oposc-suporte-teste
uidNumber: 999905110
uid: lista-oposc-suporte-teste
givenName: MailList
homeDirectory: /home/false
loginShell: /bin/false
mail: lista-oposc-suporte-teste1@serpro.gov.br
description: lista-oposc-suporte-teste1
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: phpgwAccount
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: mailman
phpgwAccountType: l
phpgwAccountStatus: A
gidNumber: 0
deliveryMode: forwardOnly
accountStatus: active
archivePrivate: mailListRestriction
naomoderado: testador@comunicacoes.gov.br
naomoderado: fabio.link@serpro.gov.br
admlista: expresso-admin@serpro.gov.br
defaultMemberModeration: TRUE
mailForwardingAddress: emerson.virtuo@serpro.gov.br
mailForwardingAddress: testador@dominio.gov.br

Lista onde os membros e outros determinados usuários podem postar (ítem em revisão, algumas funções podem não funcionar corretamente)

dn: uid=lista-oposc-suporte-teste,ou=expressolivre,ou=corp,dc=comunicacao,dc=gov,dc=br
sn: lista-oposc-suporte-teste
cn: lista-oposc-suporte-teste
uidNumber: 999905110
uid: lista-oposc-suporte-teste
givenName: MailList
homeDirectory: /home/false
loginShell: /bin/false
mail: lista-oposc-suporte-teste1@serpro.gov.br
description: lista-oposc-suporte-teste1
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: phpgwAccount
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: mailman
phpgwAccountType: l
phpgwAccountStatus: A
gidNumber: 0
deliveryMode: forwardOnly
accountStatus: active
archivePrivate: mailListRestriction
naomoderado: fabio.lunk@serpro.gov.br
admlista: expresso-admin@serpro.gov.br
defaultMemberModeration: FALSE
mailForwardingAddress: emerson.virtuo@serpro.gov.br

Lista onde somente os usuários com o domínio serpro.gov.br podem postar (ítem em revisão, algumas funções podem não funcionar corretamente)

dn: uid=lista-oposc-suporte-teste,ou=expressolivre,ou=corp,dc=comunicacao,dc=gov,dc=br
sn: lista-oposc-suporte-teste
cn: lista-oposc-suporte-teste
uidNumber: 999905110
uid: lista-oposc-suporte-teste
givenName: MailList
homeDirectory: /home/false
loginShell: /bin/false
mail: lista-oposc-suporte-teste1@serpro.gov.br
description: lista-oposc-suporte-teste1
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: shadowAccount
objectClass: phpgwAccount
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: mailman
phpgwAccountType: l
phpgwAccountStatus: A
gidNumber: 0
deliveryMode: forwardOnly
accountStatus: active
archivePrivate: mailListRestriction
naomoderado: regex:*@serpro.gov.br
admlista: expresso-admin@serpro.gov.br
defaultMemberModeration: FALSE
mailForwardingAddress: emerson.virtuo@serpro.gov.br
mailForwardingAddress: testador@dominio.gov.br

Configurando POstfix

A variável smtpd_recipient_restrictions do main.cf, é utilizada para acionar as configurações da variável ldap:cra_maillists também do main.cf. Essa última configuração é responsável por fazer o Postfix verificar se a lista possui restrições de envio (archivePrivate=mailListRestriction).

As listas abertas (as que não possuem o atributo de Ldap acima referenciado) são encaminhadas pela variável ldap:listas do main.cf.

A variável smtpd_restriction_classes informa ao Postfix que haverá outra classe de restrição de envio.

A variável mailListRestriction = check_policy_service unix:private/policy, Reject informa ao Postfix que, se o transport policy, definido ao final do master.cf não for satisfeito, ele recusará a postagem SMTP.

A configuração do transport no master.cf, conforme apresentado abaixo, informa ao Postfix que deverá ser executado o script Perl scl.pl para fazer as verificações de permissões de envio.

O script scl.pl verifica se existe lista onde o email seja igual ao destinatário recebido pelo script e o remetente possa enviar o email (naomoderado=emaildoremetente) ou se existe lista onde o email seja igual ao destinatario e os participantes possam enviar (defaultMemberModeration=FALSE) e o remetente seja participante.

Instalação das Listas por Aliases de Postfix

Primeiramente, para que o script scl.pl possa funcionation_clasr corretamente, é necessário instalar os pacotes abaixo:

apt-get install libnet-ldap-perl libfile-fcntllock-perl

O script scl.pl deve ser implantado no diretório do Postfix, alterando as credenciais de acesso ao Ldap.

Configurações a serem incluídas mo main.cf

Listas:

Obs: substituir as variáveis $ldaphost e $ldapbase e adequar o filtro(listas_query_filter) para sua estrutura de listas ldap.

virtual_alias_maps = ldap:mailboxes, ldap:grupos, ldap:listas, ldap:cra_maillists
.....
listas_server_host = $ldaphost 
listas_version = 3
listas_timeout = 1000 
listas_search_base = $ldapbase 
listas_query_filter = (&(mail=%s)(objectClass=Mailman)(deliveryMode=forwardOnly))
listas_domain = hash:/etc/postfix/expresso-dominios 
listas_result_attribute = mailForwardingAddress
listas_bind = no 
listas_bind_dn = uid=expresso-admin,ou=usuarios,$ldapbase
listas_bind_pw = $senha


Para controle de moderação de listas, inclua no main.cf


#SCL para as listas do Postfix
#mailListRestriction = check_sender_access ldap:csa_maillists, reject
mailListRestriction = check_policy_service unix:private/policy, reject

# cra_maillists (check_recipient_access_maillists) - verifica se existem restricoes de acesso a essa lista no ldap.
# se existir, o atributo archivePrivate devolverah o valor "mailListRestriction", que, por sua vez, dispararah o parametro check_policy_service
cra_maillists_server_host = <servidor ldap>
cra_maillists_version = 3
cra_maillists_timeout = 10
cra_maillists_search_base = dc=gov,dc=br 
cra_maillists_query_filter = (&(mail=%s)(phpgwAccountType=l)(archivePrivate=mailListRestriction))
cra_maillists_result_attribute = archivePrivate
cra_maillists_domain = hash:/etc/postfix/expresso-dominios 
cra_maillists_bind = no
cra_maillists_bind_dn = <bind-ldap> 
cra_maillists_bind_pw = <coloqueaquiasuasenha>


###################################################################
smtpd_recipient_restrictions = check_sender_access hash:/etc/postfix/sender_access, check_recipient_access ldap:cra_maillists,  permit_sasl_authenticated,  permit_mynetworks, reject_unauth_destination
smtpd_restriction_classes = mailListRestriction


# Increase expansion limit, due to avoid problems with lists
virtual_alias_expansion_limit = 50000

Construa a base sender_access:

echo "umemail@expressobr.gov.br OK" > /etc/postfix/sender_access

postmap hash:/etc/postfix/sender_access

No arquivo master.cf inclua a seguinte linha no seu final(os espaços em branco são propositais) para chamda do scl.pl

policy  unix    -       n       n       -       0       spawn
  user=nobody argv=/usr/bin/perl /etc/postfix/scl.pl



Funcionamento das listas por aliases

Para os domínios de destinatários presentes no arquivo /etc/postfix/expresso-dominios, o processamento se dá da seguinte forma:

Primeiro o Postfix acessa o Ldap para avaliar se o email é local.
Caso não o seja, vai ao Ldap verificar se o email é um grupo.
Caso não o seja, acessa Ldap para decidir se é um aliases.
Caso não o seja, contacta o Ldap para avaliar se é uma lista.

Caso não o seja, se o domínio do remetente estiver listado na variável mydestination (ou seja, se o Postfix for dono do domínio), ele nega a postagem informando que o email não existe. Se o Postfix não for o dono do domínio, permite a postagem (para os casos onde fazer relay é permitido - mynetworks, por exemplo), encaminhando o email à relay (variável relayhost);

Quando um email é postado para uma lista de aliases de Postfix, ele faz 5 acessos Ldap para descobrir que é uma lista e aplicar o controle de envio. A partir daí, o SMTP passa a aplicar o conteúdo da variável virtual_alias_maps a cada um dos destinatários. Tudo isso antes de armazenar o email na fila e liberar a conexão do remetente.

Se o multidominio estivar ativo basta o próprio email do usuários como identificação da caixa, talvez fosse possível utilizar variáveis do Postfix que sejam verificadas depois do armazenamento em fila.

Administrando no Expresso

Tela de exemplo de configuração do container de Listas:

Listas.png

Configurações no Expresso

Para utilizar o recurso de listas de e-mail no Expresso V3, a primeira etapa consiste em ativar o suporte a este recurso, através do assistente de configuração global da suíte (setup). Existem duas diretivas que são configuráveis nesta interface, que estão agrupadas dentro dos itens de configuração "Autenticação/Contas":

  • Ativar o controle de listas de e-mail? [Sim/Não];
  • Lista DN [Descrição do DN das listas junto ao LDAP].

IMPORTANTE: atualmente esta funcionalidade se encontra disponível apenas para a retaguarda de autenticação/contas configuradas sobre o serviço de LDAP (conforme a figura abaixo).

Expv3 listas 01.png

As duas diretivas aplicadas à gestão das listas são identificadas após o agrupamento "Política de expiração de senha LDAP", identificadas em "Controle de Listas de e-mail LDAP":

Expv3 listas 02.png

IMPORTANTE: sempre que alguma modificação é realizada na interface de setup, é fundamental acionar o recurso que salva estas configurações. Caso contrário, nenhuma modificação é feita para efeitos práticos na aplicação.

IMPORTANTE: devido a natureza de que a gestão de listas armazena dados das entradas junto do serviço LDAP diretamente, é fundamental que esta retaguarda não esteja configurado como "somente leitura". No mesmo sentido, é fundamental que as diretivas de acesso ao "LDAP Master" estejam corretamente configuradas.

Uma vez ativo o recurso (opção "Sim", conjuntamente com o DN funcional das listas em LDAP), as suas funcionalidades estarão dispostas através do módulo administrativo do Expresso V3.

Configuração do Container das Listas

As listas serão disponibilizadas aos usuários como um novo container do sistema. A criação de um container deve ser realizada via módulo de administração via "adição de um novo repositório". Este repositório deverá ser configurado como repositório LDAP, cujo DN informado será o DN onde existirão as listas no LDAP. Configuração semelhante pode ter como base o item configuração de catálogos externos disponível neste WIKI.

Módulo Administração

Após definir a ativação do controle de listas junto ao setup, é possível usufruir de suas funcionalidades através do módulo administrativo da suíte Expresso V3. Com a devida credencial, ativando o módulo administrativo, a funcionalidade de gestão de listas se encontra agrupada com os demais itens identificados na árvore de recursos administráveis na interface gráfica.

Expv3 listas 03.png

Atualmente, o comportamento padrão da funcionalidade é exibir na interface gráfica uma listagem das listas atualmente existentes no sistema, separando em um componente do tipo "grade" o endereço de e-mail da lista, o seu nome e a sua descrição.

Expv3 listas 04.png

Funcionalidades

As seguintes funcionalidades estão disponíveis na gestão de listas de e-mails:

  1. Adicionar lista de e-mails;
  2. Editar lista de e-mails;
  3. Excluir lista de e-mails.

1 - Adição de nova lista de e-mails

Tanto a criação de uma nova lista quanto a edição de uma existente compartilham de um mesmo padrão de interface gráfica, baseado em abas. Esta finalidade é a de facilitar a identificação dos dados a serem informados, de uma maneira mais prática e funcional. A composição das abas contempla:

Expv3 listas 05.png

A aba principal diz respeito aos dados de identificação da lista:

  • Endereço: [E-mail] - Contém a definição do endereço eletrônico da lista;
  • Nome: [Texto] - Contém a identificação textual da lista;
  • Descrição: [Texto] - Contém uma breve descrição a respeito da lista.
  • Tipo de lista: [Aberta ou Fechada] - Se a lista é aberta, todos podem enviar mensagens para ela. Se a lista é fechada, apenas os participantes da lista podem enviar mensagens para ela.
  • Ativar controle de envio: Esta opção só está disponível para a lista que for do tipo “Fechada”. Quando o controle de envio é ativado, é possível restringir o envio de mensagens a lista para um grupo de usuários restritos. Desta forma apenas os usuários que estão inscritos na lista de controle de envio podem enviar e-mails para a lista. Os demais usuários são integrantes da lista, e recebem as mensagens, mas não podem enviar mensagens para ela.

Expv3 listas 06.png

A guia "Membros" trata dos endereços de integrantes da lista que fazem parte do domínio da aplicação (nome de domínio do cliente).

Expv3 listas 07.png

Já a guia "Membros Externos" contém os endereços de e-mail que fazem parte da lista também mas que são externos ao domínio da aplicação.

Expv3 listas 08.png

Em "Administradores" são armazenados os dados dos endereços de usuários que são definidos como gestores da lista.


2 - Edição de lista de e-mails existente

Para realizar a alteração de dados de uma lista de e-mails, o usuário deve realizar a seguinte sequência de operações:

  1. Localizar a lista desejada na listagem dos registros;
  2. Através de um duplo clique do cursor ou do acionamento do ícone "Editar Lista de e-mail", iniciar o processo da edição do registro;
  3. Aguardar a carga dos dados do registro na interface de edição;
  4. Navegar pelos dados que compõe a lista, identificando o parâmetro que se deseja modificar. Os dados estão separados em uma interface baseada em abas - conforme exposto anteriormente;
  5. Realizar as alterações dos dados desejados;
  6. Salvar as modificações;
  7. Aguardar o processamento da solicitação.


3 - Exclusão de lista de e-mails existente

Para remover uma ou mais lista(s) de e-mails do sistema, o usuário deve realizar a seguinte sequência de operações:

  1. Identificar a(s) lista(s) que deseja remover;
  2. Com o clique direito do cursor ou do acionamento do ícone "Excluir Lista de e-mail", solicitar a exclusão do(s) registro(s);
  3. Confirmar a operação de remoção;
  4. Aguardar o processamento da ação.

Estudo de caso

Customização Funcional para Listas por Leonardo Christo

Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Ferramentas