Informática Numaboa - Linux
Debian + Postfix + PostfixAdmin + SquirrelMail
Sab 16 Mai 2009 01:19 |
- Detalhes
- Categoria: Como fazer instalações
- Atualização: Quinta, 28 Janeiro 2010 21:08
- Autor: vovó Vicki
- Acessos: 59434
- Debian + Postfix + PostfixAdmin + SquirrelMail
- A lista de fontes
- Iptables e logcheck
- MySQL, Postfix e Dovecot
- Certificados SSL (Autoridade)
- Certificados SSL (Requisições)
- phpMyAdmin
- SquirrelMail e PostfixAdmin
- SquirrelMail e PostfixAdmin II
- SquirrelMail e PostfixAdmin III
- Configurar SASL e TLS
- Amavis e SpamAssassin
- Amavis, SpamAssassin, ClamAV, Razor, Pyzor
- Amavis
- Amavis II
- Tabelas Bayes e AWL
- Personalizar o SquirrelMail
- Razor, pflogsumm e BIND
- Configurações Postfix adicionais
- Férias no PostfixAdmin
- Quotas, MailGraph e mysql-zrm
- O problema dos Aliases
- Todas as Páginas
Quotas
Quando criamos novas caixas postais, o script mail_profile.sh entra a informação da quota no arquivo 'maildirsize' localizado no diretório de mail do usuário. Quando editamos uma caixa postal de usuário, o script quotaedit.sh atualiza a informação da quota. Usamos o controle de quota Maildir++. A página web para a quota do Dovecot é http://wiki.dovecot.org/Quota. Cada vez que uma mensagem entra ou sai do INBOX do usuário, o arquivo 'maildirsize' é atualizado. Como estamos usando o 'entregador' Dovecot como um LDA (Local Delivery Agent), o Postfix não tem como saber quantos bytes de dados existem na caixa postal do destinatário, mas o 'entregador' pode. Configurei o dovecot.conf para avisar o usuário duas vezes: quando 75% e quando 90% do espaço estiver ocupado:
quota_warning = storage=90%% /usr/sbin/quota-warning.sh 90 quota_warning2 = storage=70%% /usr/bin/quota-warning.sh 70
Observe que estas entradas chamam um script que coloca as mensagens de alerta diretamente nas caixas postais. Você pode editar o texto da mensagem que está no script. Quando o limite de espaço tiver sido atingido, as mensagens para o destinatário ficarão retidas na nossa máquina na fila de deferidos (deferred queue) do Postfix. Isto acontece devido à nossa configuração:
quota_full_tempfail = yes
Precisamos pegar este script:
cd /usr/sbin wget -U NoSuchBrowser/1.0 http://www.numaboa.com/debian/quota-warning.sh.txt mv quota-warning.sh.txt quota-warning.sh chmod +x quota-warning.sh sed -i 's/host.domain.tld/nome_do_host.exemplo.com/' quota-warning.sh
Veja o script baixado: quota-warning.sh.
Você terá quer editar a parte textual do script (especialmente o número de telefone):
vi /usr/sbin/quota-warning.sh
Para testar tudo isto, primeiro esvazie toda a correspondência do usuário de teste (Eu uso teste@exemplo.com). Chame https://nome_do_host.exemplo.com/mail para realizar esta tarefa e para fazer os testes. Depois faça login em https://nome_do_host.exemplo.com/postFixadmiNx e edite a caixa postal deste usuário colocando a quota em 1Mb. Verifique se o o arquivo maildirsize foi atualizado:
cat /var/vmail/exemplo.com/teste/maildirsize
Meu sistema mostra:
1024000S 0 0
Encontre um arquivo que não seja rejeitado pelo amavisd-new (.txt, .doc, .xls, .html, .pdf) com cerca de 70Kb que possa ser usado como anexo. Queremos enviar uma série de mensagens para o usuário teste que tenha este anexo. Queremos disparar a mensagem de alerta de quota enviando uma sérei de mensagens que totalizarão mais de 900Kb (use o link Check Mail do SquirrelMail ou vá para o uma outra pasta e volte para o INBOX para ver quanto de espaço ainda está disponível). Quando passar dos 70% e dos 90% você verá mensagens de alerta (estes limites foram estabelecidos no arquivo /usr/share/squirrelmail/plugins/check_quota/config.php). O destinatário também deve receber mensagens de alerta com o Assunto: "IMPORTANT: YOur Mailbox is X% full!". O destinatário só é avisado uma vez quando estiver em 70% e uma vez quando estiver em 90% de modo que, se você quiser testar novamente, você terá que eliminar algumas mensagens e enviar algumas outras novas.
Quando estiver satisfeito com os avisos, envie mais uma mensagem para estourar a quota. Se você olhar em /var/log/mail.log verá que esta mensagem não foi encaminhada ao destinatário, mas que foi colocada na fila de espera (o que também pode ser confirmado com o comando mailq):
Mai 17 06:32:56 ns2 postfix/pipe[24553]: 0961525F51: to=, relay=dovecot, delay=0.43, delays=0.14/0.04/0/0.26, dsn=4.3.0, status=deferred (temporary failure. Command output: Quota exceeded (mailbox for user is full) )
Você também vai receber mensagens (esperadas) de erro em /var/log/dovecot-deliver.log:
deliver(teste@exemplo.com): 2009-05-17 09:42:26 Info: msgid=<541620004.20090405094236@exemplo.com>: save failed to INBOX: Quota exceeded (mailbox for user is full) deliver(teste@exemplo.com): 2009-05-17 09:42:26 Info: sieve runtime error: Keep: Generic Error deliver(teste@exemplo.com): 2009-05-17 09:42:26 Error: sieve_execute_bytecode(/var/sieve/global.sievec) failed
Agora esta correspondência vai ficar atolada na fila de espera até que o usuário delete algumas mensagens para abrir espaço, até que você aumente a quota dele ou que se passem 5 dias. O logcheck vai notificar o root de que houve falha de entrega. Se este usuário não se importar com os avisos e não esvaziar sua caixa postal, todas as suas novas mensagens irão parar na fila de deferidas. Quando a correspondência estiver deferida por 5 dias (é o $maximal_queue_lifetime do Postfix), o remetente receberá o email de volta e a mensagem será eliminada da fila.
Se o usuário continuar sendo irresponsável, você pode querer acabar de vez com a festa intervindo manualmente e rejeitando todas as mensagens para este usuário ao invés de segurá-las na fila de deferidas (não fique tentado a deletar os emails da fila de deferidos quando a máquina estiver em produção - lembre-se, os emails não são seus). O certo é adicionar este destinatário no /etc/postfix/reject_over_quota com alguma coisa do tipo (isto tudo deve ficar em apenas uma linha):
teste@exemplo.com REJECT A caixa postal do destinatário está cheia - sua mensagem não foi entregue aos destinatários hospedados no servidor de email exemplo.com
E, depois disto, é claro que será preciso fazer um:
postmap /etc/postfix/reject_over_quota
A maior desvantagem disto é que a mensagem como um todo será rejeitada. Se a mensagem tiver sido endereçada para múltiplos destinatários no seu servidor, nenhum deles a receberá. Isto pode não ser justo para com o remetente ou com os outros destinatários, então pense duas vezes antes de tomar esta atitude
Opcional. Em geral, quando emails vão para a fila de espera, o remetente não é avisado do atraso. Se você quiser notificar todos os remetentes que tiverem seus emails deferidos por qualquer razão, você pode usar o Postfix para fazer isto. Aqui vamos dar ao Postfix uma hora para tentar fazer a entregar antes de enviar um aviso ao remetente:
postconf -e "delay_warning_time = 1h" postfix reload
Instalar o Mailgraph - opcional
O Mailgraph produz gráficos diários, semanais, mensais e anuais de emails recebidos/enviados e devolvidos/rejeitados.
apt-get install mailgraph
sed -i 's/IGNORE_LOCALHOST=false/IGNORE_LOCALHOST=true/' /etc/default/mailgraph /etc/init.d/mailgraph restart
Pode ser que demore alguns minutos para isto funcionar. Espere um pouco e depois dê uma olhada em https://nome_do_host.exemplo.com/cgi-bin/mailgraph.cgi.
Instalar o mysql-zrm - opcional
Este programinha legal pode fazer backups dos nossos dados MySQL. Vamos fazer backups locais e mantê-los por 4 dias.
apt-get install libxml-parser-perl
cd /usr/local/src wget http://www.zmanda.com/downloads/community/ZRM-MySQL/2.1/Debian/mysql-zrm_2.1_all.deb dpkg -i mysql-zrm_2.1_all.deb
sed -i 's/#user="wikiuser"/user="root"/' /etc/mysql-zrm/mysql-zrm.conf sed -i 's/#password="userwiki"/password="senha_do_root"/' /etc/mysql-zrm/mysql-zrm.conf sed -i 's/#retention-policy=10W/retention-policy=4D/' /etc/mysql-zrm/mysql-zrm.conf sed -i 's/mailto="root@localhost"/mailto="root@exemplo.com"/' /etc/mysql-zrm/mysql-zrm.conf chown root:root /usr/share/man/man5/mysql-zrm* chown root:root /usr/share/man/man1/mysql-zrm* chmod 644 /usr/share/man/man5/mysql-zrm* chmod 644 /usr/share/man/man1/mysql-zrm*
mysql-zrm-scheduler --now --backup-set dailyrun --backup-level 0
mysql-zrm-scheduler --add --interval daily --backup-set dailyrun --backup-level 0
Isto insere entradas no crontab do root. Rode crontab -e e veja se há qualquer caracter extra de quebra de linha separando as entradas - elimine-os se existirem. Os detalhes do que acabou de ser feito pode ser visto aqui: http://www.howtoforge.com/mysql_zrm_debian_sarge. Sugiro que você faça o download das 5 páginas deste HOWTO (e que, talvez, também o leia). Este programa vai te enviar alguns emails (chatos) diariamente.
Aqui está o manual do usuário: http://mysqlbackup.zmanda.com/index.php/Zmanda_Recovery_Manager_for_MySQL_Users_Manual.