= Cyrus IMAP = [[PageOutline(1-3, Conteúdo)]] O servidor Cyrus IMAP é o responsável em fornecer as mailboxes dos usuários. Ele é um servidor IMAP[[BR]] de alta performance que permite que vários usuários trabalhem simultanemanete na mesma mailbox, além de[[BR]] possuir funções de pesquisa, indice e compartilhamento muito avançadas. Para maiores informações sobre o[[BR]] protocolo IMAP e suas funções consulte o seguinte [http://pt.wikipedia.org/wiki/Internet_Message_Access_Protocol endereço]. [[BR]][[BR]]O servidor Cyrus IMAP é compatível com os principais clientes IMAP disponíveis no mercado[[BR]] (Apple Mail,Android,Thunderbird,Outlook,Evolution,KMail). Atualmente a versão considerada estável pelo[[BR]] 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.[[BR]] 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.[[BR]] 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.[[BR]] Quando você cria ou deleta uma conta de correio no Expresso Admin a operação é executada no Servidor IMAP.[[BR]] [[BR]] As contas de e-mail podem ser administradas pela linha de comando através do comando "cyradm" ou via scripts[[BR]] 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[http://www.cyrusimap.org/docs/cyrus-imapd/2.3.16/man/cyradm.1.php 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[[BR]] para tarefas rotineiras como criação de contas em massa, configuração de cotas,[[BR]] definir compartilhamentos e etc . Neste manual este assunto não vai ser abordado com detalhes.[[BR]] Uma biblioteca que facilita bastante o trabalho é a "[http://python-cyrus.sourceforge.net/ python-cyrus]"[[BR]] 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,[[BR]] 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.[[BR]] Ao deletar uma mensagem ou pasta as mensagens não são removidas imediatamente do disco.[[BR]] Na realidade apenas o indice da caixa é atualizado ( ou seja o usuário não enxerga mais a mensagem em sua caixa )[[BR]] mas a mensagem permanece no disco, até que se rode a rotina "cyr_expire" para realizar o expurgo.[[BR]] O administrador do sistema pode retornar a mensagem com o comando "unexpunge" ou no caso de uma pasta[[BR]] removida simplesmente renomea-lá ao contexto do usuário. Isto facilita bastante já que você não tem[[BR]] 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[[BR]] aonde está localizado a caixa.[[BR]] Como o usuário '''root''' ou '''cyrus''' use o comando '''unexpunge'''.[[BR]] {{{ 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[[BR]] {{{ 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[[BR]] 20 pessoas ele cria apenas 1 arquivo no disco e os demais são apenas "'''hard links'''" [[BR]] para este arquivo.[[BR]] 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[[BR]] 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.[[BR]] O recurso de '''singleinstancestore''' reduz bastante a IO nos discos[[BR]] (já que só é gravado um arquivo efetivamente e os demais são hard links)[[BR]] e economiza bastante espaço em disco. '''Obs: Este recurso funciona legal apenas se as mensagens estiverem sendo entregas[[BR]] 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[[BR]] deste recurso.''' '''Obs3: Para otimizar ainda mais e diminuir o número de mensagens você pode ajustar no "main.cf" do postfix[[BR]] 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[[BR]] 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.[[BR]] Mas a versão que vem como estável nas distribuições já atende muito bem.[[BR]] '''* 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.[[BR]] Este arquivo é usado para controle de entrega de mensagem não duplicadas[[BR]] e não há problemas em removê-lo.[[BR]] '''* Qual o limite de mailboxes que posso ter no cyrus imap ?''' Depende se você usa distribuições de 32 bits ou 64 bits.[[BR]] Para 32 bits é na casa de 4 milhões.[[BR]] '''* 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.[[BR]] '''* Quais os arquivos importantes em um backup do cyrus imap ?''' Os mais importantes são o '''mailboxes.db''' e o '''annotations.db'''[[BR]] O backup deve englobar as pastas '''/var/lib/imap, /var/spool/imap'''' e os arquivos[[BR]] '''/etc/cyrus.conf''' e '''/etc/imapd.conf'''.[[BR]] '''* 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''' [[BR]] e as pastas '''/var/lib/imap''' , '''/var/spool/imap'''. Uma dica importante para instalações grandes é que você pode subir o sistema[[BR]] 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[[BR]] mas quando a pasta for restaurada ele consegue enxergar sem nenhum problema.[[BR]] 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.[[BR]] 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: [http://www.cyrusimap.org Documentação do cyrus]