A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Linux

Debian + Postfix + PostfixAdmin + SquirrelMail

Sab

16

Mai

2009


01:19

(19 votos, média 4.53 de 5) 


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

info 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 smile

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.

Informações adicionais