sábado, 12 de setembro de 2009

Utilizando o Postfix Quota Reject 2.0

Implementar o Postfix Quota Reject em um servidor com Postfix + Cyrus/Courier é uma tarefa bastante simples e que agrega muito ao serviço de correio.

O PQR é composto de 2 scripts Perl que rodam como policy daemons no Postfix. Existe uma versão para Cyrus e outra para Courier, mas ambas funcionam de forma análoga. O projeto é bem documentado, e o tarball vem com um pdf que explica mais sobre o software.

Instalando o PQR

Para começar baixe o .tar.gz do PQR e abra-o em um diretório ( por exemplo /usr/local/pqr ). É preciso dar permissão de leitura e de execução nesse diretório e nos scripts para o usuário que for rodar os daemons ( nesse caso, vou usar o usuário vmail ).

Configurando o Postfix

Arquivo /etc/postfix/master.cf:

Adicione as seguintes linhas no arquivo master.cf:
127.0.0.1:2222 inet n n n - 0 spawn user=vmail argv=/usr/local/pqr/postfix-qreject-frontales.pl
127.0.0.1:3333 inet n n n - 0 spawn user=vmail argv=/usr/local/pqr/postfix-qreject-buzones-courier.pl

Se você for usar cyrus, troque o script postfix-qreject-buzones-courier.pl pelo script postfix-qreject-buzones-cyrus.pl.

E não esqueça: é preciso que o usuário que rodará os scripts (configurado no master.cf) tenha permissão de leitura e execução dos mesmos, caso contrário os daemons não serão carregados.

Arquivo de classe de restrição (/etc/postfix/qreject):

É necessário criar um arquivo com os domínios que serão consultados pelo PQR. O conteúdo do arquivo deve ser algo como:
[root@mailserver /etc/postfix]# cat qreject
seudominio.com.br pqr

Após a criação ou modificação desse arquivo, gere a tabela hash com o comando postmap /etc/postfix/qreject.

Explicando de forma bem simples, esse arquivo (juntamente com as demais configurações) garante que qualquer e-mail enviado para o domínio seudominio.com.br deverá consultar a classe de restrição pqr, que será criada no arquivo /etc/postfix/main.cf e que evocará os scripts do Postfix Quota Reject.

Arquivo /etc/postfix/main.cf:
# Classe do pqr
pqr = check_policy_service inet:127.0.0.1:2222

smtpd_restriction_classes = pqr # caso já existam outras classes, basta adicionar a classe pqr a lista

smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
check_recipient_access hash:/etc/postfix/qreject,
...

smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:2222

Criando o banco de dados do PQR


Antes de continuar, é preciso criar o banco de dados do PQR no servidor MySQL.

Para isso crie um database (com nome de qreject, por exemplo) e um usuário (novamente qreject) que tenha permissão total nesse banco. Como não é o objetivo desse post, não irei entrar nos detalhes dessas operações, supondo que o leitor saiba como efetuar tais tarefas.

Depois de criados adicione os dados do script qreject.sql que vem com o tarball do PQR nesse novo DB. Isso pode ser feito com o seguinte comando (logado como root) :
mysql -p -D qreject < /usr/local/pqr/qreject.sql

Arquivo /usr/local/pqr/postfix-qreject-frontales.pl
(obs. do Allan Carvalho)

Abra o arquivo /usr/local/pqr/postfix-qreject-frontales.pl e altere as variáveis do banco de dados, com os dados do seu servidor.

No meu exemplo, tenho o seguinte:
our $mysql_server = "127.0.0.1";
our $mysql_port = 3306;
our $database = "qreject";
our $usu_mysql = "qreject";
our $clave_mysql = "password";

Inserção de usuários no DB


Como já explanado em meu post anterior, o mais trabalhoso na configuração do PQR é a necessidade de cadastrar no banco de dados cada conta que deverá ser verificada (o que por outro lado também torna a ferramenta mais flexível, pois permite que você verifique somente as contas desejadas).

Para facilitar essa tarefa (pelo menos nos casos onde todas as contas do servidor devem ser consultadas), adaptei alguns scripts (baseados nos originais sugeridos por Egoitz Aurrekoetxea Aurre, desenvolvedor do Postfix Quota Reject) e os mesmos podem ser baixados aqui. É bem provável que sejam necessárias pequenas adaptações para fazê-los funcionarem no seu ambiente, mas nada que seja complexo.

DICA: caso existam contas com quota ilimitada (ou sem quota), não adicione estas no DB, pois o sistema irá negar todas as mensagens destinadas as mesmas por overquota (experiência própria).

Concluindo

O PQR é uma ferramenta eficiente que permite o bloqueio de mensagens destinadas a usuários com caixas postais lotadas diretamente no SMTP. Tal abordagem além de não gerar tráfego desnecessário, reduz as filas no seu servidor e garante que o remetente tenha consciência de que a mensagem não foi entregue logo após enviá-la, o que em muitos casos é algo fundamental. Sua instalação é simples e sua performance é muito boa, o que me faz recomendar sua instalação sem receios em qualquer servidor que necessite desse recurso.


Leia também:Link