wiki:Servicos/Cyrus

Version 35 (modified by viani, 3 years ago) (diff)

--

Cyrus IMAP

O servidor Cyrus IMAP é o responsável em fornecer as mailboxes dos usuários. Ele é um servidor IMAP
de alta performance que permite que vários usuários trabalhem simultanemanete na mesma mailbox, além de
possuir funções de pesquisa, indice e compartilhamento muito avançadas. Para maiores informações sobre o

protocolo IMAP e suas funções consulte o seguinte  endereço.



O servidor Cyrus IMAP é compatível com os principais clientes IMAP disponíveis no mercado
(Apple Mail,Android,Thunderbird,Outlook,Evolution,KMail). Atualmente a versão considerada estável pelo
projeto é a 2.4.9. As distribuições de Linux costumam vir por padrão com o Cyrus 2.2 ou 2.3

Funcionalidades

  • Armazenamento: Utiliza um formato próprio para armazenar as mensagens parecido com o formato Maildir.
  • Indices: Suporta indices nos formato BerkleyDB ou no formato skiplist( padrão a partir das versões 2.4)
  • Autenticação: Utiliza da estrutura SASL.
  • Controle: Possui implementado as RFCs (5593,4551,5464,5551) que normatizam administração de servidores IMAP.
    Possui nativamente suporte há:
    • Hierarquia;
    • Autorização;
    • Quota.
    • Compartilhamentos
  • Suporta administração por mail de interface própria ( cyradm ) e várias linguagens como perl, python e java.
  • Conectividade: Possui suporte e módulos para diversas aplicações como:
    • Exim (MTA)
    • Postfix
    • SpamAssassin
    • Clamav
    • Amavis
  • Filtros: Suporte built-in para filtros no lado do servidor(SIEVE).

Como configurar o Cyrus IMAP para funcionamento com o Expresso

Esta configuração é específica para uma configuração apenas com um servidor IMAP.
O servidor também pode ser configurado de forma distribuída ( Cyrus Aggregation (Murder) ).

Edite o arquivo /etc/imapd.conf e certifique-se que este arquivo contém as seguintes linhas:

 unixhierarchysep: yes
 admins: expresso-admin
 sasl_mech_list: PLAIN
 sasl_pwcheck_method: saslauthd
 allowusermoves: yes
 duplicatesupression: 0
 lmtp_over_quota_perm_failure: 1
 partition-default: /var/spool/imap
 configdirectory: /var/lib/imap
 defaultpartition: default
 

Edite o arquivo /etc/cyrus.conf e certifique-se que este arquivo contém as seguintes linhas:

START {
	# do not delete this entry!
	recover		cmd="/usr/cyrus/bin/ctl_cyrusdb -r"
}

SERVICES {
        imap            cmd="imapd -U 30" listen="imap" prefork=1
	imaps		cmd="imapd -s -U 30" listen="imaps" prefork=1
	lmtpd		cmd="lmtpd" listen="lmtp" prefork=1
  	sieve		cmd="timsieved" listen="sieve" prefork=1
}

EVENTS {
  # this is required
  checkpoint	cmd="/usr/cyrus/bin/ctl_cyrusdb -c" period=5

  # SQUATTER indexa as caixas postais para pesquisa.
  squatter        cmd="/usr/cyrus/bin/squatter -s -r user" at=2300

 # Em versoes mais novas, a partir da 2.3.12 voce pode acrescentar o parametro -i
 # que realiza o update incremental caso já tenha sido feita uma indexaçao.
 # Este parametro diminui bastante o tempo de indexacao das caixas.
 #squatter        cmd="/usr/cyrus/bin/squatter -s -i -r user" at=2300

}

A lista de todos os parâmetros de configuração disponíveis pode ser acessada pelo shell através dos comandos

 man imapd.conf
 man cyrus.conf

Administrando as Contas no Servidor Cyrus IMAP

A administração de cotas e compartilhamentos de caixa é feita pelo módulo Expresso Admin do Expresso.
Quando você cria ou deleta uma conta de correio no Expresso Admin a operação é executada no Servidor IMAP.

As contas de e-mail podem ser administradas pela linha de comando através do comando "cyradm" ou via scripts
em perl, python e etc ....

A ferramenta cyradm é um shell interativo para administração do cyrus.

Abaixo segue um exemplo de conexão e criação de caixas:

cyradm --server servidor.imap.expresso  --user expresso-admin

cm user/login   ( criar caixa de usuário )
cm user/login/Sent
cm user/login/Drafts
cm user/login/Trash

lm (lista as caixas)

lq user/login ( listar quota do usuário: login )

sq user/login 1024000 ( Setar a cota de 1Gb para a caixa )

lam user/login ( Listar as ACLs de uma caixa )
lam user/login/*

( Para deletar uma caixa voce deve dar permissão ao expresso-admin para ela )
sam user/login expresso-admin all
dm user/login

Maiores dúvidas sobre a administração podem ser consultadas no manual do cyradm. ou pelo manual.

 man cyradm

Criando scripts para Administração em lote das contas

O cyrus possui uma API em perl que permite a criação de scripts

para tarefas rotineiras como criação de contas em massa, configuração de cotas,
definir compartilhamentos e etc .

Neste manual este assunto não vai ser abordado com detalhes.

Uma biblioteca que facilita bastante o trabalho é a " python-cyrus"
criada pelo Reinaldo Carvalho um dos colaboradores da comunidade Expresso.

Configurando o Expresso para utilizar um servidor Cyrus em uma máquina remota

A aplicação Expresso já prevê a distribuição dos seus serviços em outros servidores. Para o Cyrus,
proceda da seguinte forma:

- Se logue no expresso como expresso-admin;

- Vá no módulo Administrador e procure pelo módulo Admin do Email (EmailAdmin);

- Clique em "Configurações do Servidor";

- Edite o perfil e configure os novos parâmetros na aba POP3/IMAP;

Funcionalidades avançadas do Cyrus IMAPD

delay expunge:

A função delay expunge habilita um recurso parecido com a tradicional "Lixeira" dos Desktops.
Ao deletar uma mensagem ou pasta as mensagens não são removidas imediatamente do disco.
Na realidade apenas o indice da caixa é atualizado ( ou seja o usuário não enxerga mais a mensagem em sua caixa )
mas a mensagem permanece no disco, até que se rode a rotina "cyr_expire" para realizar o expurgo.

O administrador do sistema pode retornar a mensagem com o comando "unexpunge" ou no caso de uma pasta
removida simplesmente renomea-lá ao contexto do usuário. Isto facilita bastante já que você não tem
que recorrer ao backup para restaurar as mensagens apagadas acidentalmente por um usuário.

Ativando o delay expunge:

Primeiro edite o /etc/imapd.conf e coloque os parâmetros abaixo

No cyrus 2.4.X:

 deletedprefix: DELETED
 delete_mode: delayed
 expunge_mode: delayed
 expunge_days: 90    <-- Este parametro define o número de dias que você quer manter
                         na Quarentena antes de remover

No cyrus 2.3.X:

  deletedprefix: DELETED
  delete_mode: delayed
  expunge_mode: delayed
  expunge_days: 30

Depois edite o /etc/cyrus.conf e coloque o evento abaixo:

EVENTS {
 .........
  # Expira as mensagens e pastas do Cyrus começando as 23:00 
  delprune        cmd="/usr/cyrus/bin/cyr_expire -E 30 -X 30 -D 30" at=2300
 .......... 
}

Sendo que:

............
 −D delete-days
    Remove previously deleted mailboxes older than delete-days (when using the "delayed" delete mode).
 −E expire-days
   Prune the duplicate database of entries older than expire-days. This value is only used for entries
   which do not have a corresponding /vendor/cmu/cyrus-imapd/expire mailbox annotation.
 −X expunge-days
   Expunge previously deleted messages older than expunge-days (when using the "delayed" expunge mode).
.............

Depois de colocar estas informações basta reiniciar o Cyrus IMAP.

Restaurando as mensagens excluidas:

Para restaurar as mensagens excluídas de uma pasta você precisa ter acesso ao shell do servidor
aonde está localizado a caixa.
Como o usuário root ou cyrus use o comando unexpunge.

   unexpunge -l user/joe -> Para listar as mensagens removidas mas não expiradas
   unexpunge -ad user/joe -> Restaura todas as mensagens removidas e não expiradas
   unexpunge -ud user/joe 515 --> Restaura uma mensagem específica que foi apagada
   unexpunge -d -t 6h user/joe --> Restaura mensagens apagadas a 6 horas
   unexpunge -d -t 1d user/joe --> Restaura mensagens apagadas a 1 dia

Restaurando uma pasta removida:

Para restaurar uma pasta removida basta usar o cyradm e renomear a pasta para dentro do usuário

cyradm -u admin imap_server
imap_server> lm DELETED/user/joe/*
DELETED/user/joe/DITI-2010/4E08876B
DELETED/user/joe/WORK/4E08876B
imap_server> rename DELETED/user/joe/DITI-2010/4E08876B user/joe/DITI-2010

singleinstance store:

Este recurso ativa um tipo de compactação no Cyrus IMAP. Quando uma mensagem chega para
20 pessoas ele cria apenas 1 arquivo no disco e os demais são apenas "hard links"
para este arquivo.

Para ativar edite o seguinte arquivo /etc/imapd.conf e habilite o parâmetro:

singleinstancestore: 1

Depois reinicie o serviço do cyrus.

Para verificar se funcionou mande uma mensagem para 10 usuários, depois vá na pasta spool
de um destes usuários e execute o comando "ls -li":

cd /var/spool/imap/j/user/joe
ls -li
..........
  63063562 -rw------- 10 cyrus mail   23079 Jun 27 11:47 9562.
..........

Isto significa que existem 10 hardlinks apontando para o INODE 63063562.
O recurso de singleinstancestore reduz bastante a IO nos discos
(já que só é gravado um arquivo efetivamente e os demais são hard links)
e economiza bastante espaço em disco.

Obs: Este recurso funciona legal apenas se as mensagens estiverem sendo entregas
via lmtp ou lmtpproxyd, não funciona se a entrega for via cyr_deliver.

Obs2: Como o mailman manda 1 mensagem para cada recipiente ele também não se aproveita
deste recurso.

Obs3: Para otimizar ainda mais e diminuir o número de mensagens você pode ajustar no "main.cf" do postfix
o parâmetro "lmtp_destination_recipient_limit" e especificar um número maior de recipientes para tentar entregar simultaneo em uma mensagem.

Expirar mensagens de uma pasta automaticamente

Via comando de administração IMAP é possível definir um prazo de expiração para mensagens
em uma pasta.

cyradm -u admin imap_server
mboxcfg user/jose/Trash expire 30 <<-- As mensagens com mais de 30 dias são expurgadas pelo evento cyr_expire
mboxcfg user/jose/Spam expire 7 <<-- As mensagens com mais de 7 dias são expurgadas pelo evento cyr_expire

É importante que o EVENTO cyr_expire exista e esteja configurado no /etc/cyrus.conf.

FAQs:

* Qual a versão do Cyrus IMAP devo utilizar ?

Recomendação dos desenvolvedores é usar a versão 2.4.X mais recente.
Mas a versão que vem como estável nas distribuições já atende muito bem.

* Quais as versões do Cyrus IMAP testadas com o Expresso ?

O Expresso foi testado com Cyrus 2.2, 2.3.X e 2.4.X

* Porque o "restart" do serviço está demorando muito ?

Geralmente o arquivo deliver.db está muito grande.
Este arquivo é usado para controle de entrega de mensagem não duplicadas
e não há problemas em removê-lo.

* Qual o limite de mailboxes que posso ter no cyrus imap ?

Depende se você usa distribuições de 32 bits ou 64 bits.
Para 32 bits é na casa de 4 milhões.

* Qual o limite máximo de cota para uma mailbox no cyrus imap ?

É o limite do tamanho máximo de arquivo do filesystem que você utiliza.

* Quais os arquivos importantes em um backup do cyrus imap ?

Os mais importantes são o mailboxes.db e o annotations.db
O backup deve englobar as pastas /var/lib/imap, /var/spool/imap' e os arquivos
/etc/cyrus.conf e /etc/imapd.conf.

* Como restaurar uma instalação do cyrus imap ?

A restauração do Cyrus IMAP é relativamente simples. Basta restaurar os arquivos de configuração /etc/cyrus.conf e /etc/imapd.conf
e as pastas /var/lib/imap , /var/spool/imap.

Uma dica importante para instalações grandes é que você pode subir o sistema
sem ter acabado de retornar totalmente a pasta /var/spool/imap.

Se a pasta spool do usuário não tiver sido retornada, ele vai enxergar ela em branco
mas quando a pasta for restaurada ele consegue enxergar sem nenhum problema.
As mensagens que ficaram presas na fila do SMTP (pela caixa não existir ) serão entregues.

* O que é o squatter ?

O squatter é um daemon do cyrus que indexa as mensagens para facilitar na pesquisa.
Normalmente ele é disparado por um evento do cyrus.conf, mas pode ser rodado manualmente.

Como funciona a estrutra de pastas do Cyrus

O banco de dados com as caixas do Cyrus fica localizado em {configdirectory}/mailboxes.db.

A caixa de um usuário fica dentro de um path específico. Para descobrir aonde está a caixa de um usuário você pode usar o comando:

  mbpath user/login

 /var/spool/imap/l/user/login

Dentro de cada caixa existem arquivos de controle específicos. São eles os arquivos:

 cyrus.squat
 cyrus.cache
 cyrus.index 
 cyrus.header

Caso um usuário não esteja conseguindo ler as mensagens ou elas se encontrem embaralhadas você pode reconstruir a caixa do usuário com o comando:

 reconstruct -rf user/login

dependendo da versao o comando é o:

  cyrreconstruct -rf user/login

Mais informações

Maiores dúvidas visite o site:

 Documentação do cyrus