POSTFIX: Limitando a taxa na qual um usuário em particular pode enviar e-mail

13

Temos uma configuração de servidor CentOS do servidor que hospeda nossos sites e servidores de e-mail (usando POSTFIX). Nós gerenciamos o sistema usando o Virtualmin e o Webmin, respectivamente.

Em geral, para todos os sites que configuramos, fornecemos ao cliente uma conta de e-mail em nosso sistema. Um cliente em particular decidiu que seria uma boa ideia enviar literalmente milhares de emails em massa. Quando isso acontece, o servidor de e-mail não responde e o e-mail de outros clientes fica inativo enquanto a fila é processada.

Existe uma maneira de limitar a taxa de e-mail enviada para um usuário específico do sistema em vez de todos? Existe também uma configuração que devemos mudar para que nada que um usuário possa fazer possa fazer com que o servidor de e-mail comece a falhar para outros usuários?

Obrigado

    
por WarpKid 15.07.2011 / 12:30

5 respostas

9

O Postfix-Policyd é de grande ajuda para isso, entre outras coisas.

    
por 15.07.2011 / 12:37
19

Parece-me que todas as outras respostas a essa pergunta antiga são apenas de link. Por isso vou descrever em poucas palavras como implementar a minha solução favorita para este trabalho.

O link que @ 84104 sugeriu, embora muito útil, não pode ser usado para implementar corretamente a taxa por remetente. Os limites de smtpd_client não são para controle de tráfego, mas sim para ajudar com o software cliente: "Medidas contra clientes que fazem muitas conexões". Embora se possa encontrar recomendações como esta uma que certamente pode ajudar. Como @E. Yazici sugeriu, é necessário um addon para o postfix . Pessoalmente, eu acho policyd como recomendado por @Janne Pikkarainen bastante complicado, embora seja considerado um padrão.

Meu addon favorito é postfwd porque é leve e fácil. Também vale a pena notar que isso funciona muito facilmente com o Plesk ou outro similar, sem afetar o complicado conjunto de arquivos de configuração do Plesk. O limite de taxa de e-mail no Plesk foi implementado apenas na versão 12, mas ainda assim os recursos da política são limitados.

Primeiro, baixe o addon mais recente do site acima. Eu acredito que não há rpm para o CentOS, em contraste com o Ubuntu e o Debian. No entanto, é aconselhável que a versão mais recente seja usada. Mais especificamente, a versão 1.32 (que está presente, por exemplo, nas reutas do Ubuntu 14.04LTS) tem um erro desagradável que impede que funcione adequadamente. Versão 1.35 classifica isso.

Certifique-se de que estes módulos PERL estejam presentes. Se estiver usando Debian ou Ubuntu você pode instalar a partir de repos para que todas as dependências sejam automaticamente classificadas e em seguida, substitua /usr/sbin/postfwd pela versão mais recente.

Em seguida, crie o conjunto de regras. Crie um arquivo como /etc/postfwd.cf ou /etc/postfix/postfwd.cf e adicione:

id=R001; sender=~/.*/; action=rate(sender/100/86400/REJECT only 100 messages per day for $$sender)
id=R002; sender=~/.*/; action=rate(sender/50/3600/REJECT only 50 messages per hour for $$sender)

O conjunto de regras acima tem obviamente duas regras que avaliam todos os remetentes. A sintaxe da ação rate é:

rate (<item>/<max>/<time in sec>/<action>)

Outros exemplos de taxas podem ser encontrados aqui . A referência à sintaxe pode ser encontrada na documentação . Uma discussão semelhante pode ser encontrada aqui . Se o SASL for implementado (por exemplo, dovecot), você poderá substituir com segurança sender por sasl_username . Você pode testar a validade do conjunto de regras com a opção -C :

postfwd -f /etc/postfwd.cf -C

Depois, você pode criar um usuário e grupo dedicados postfwd sob o qual o postfwd será executado e lançado:

postfwd --daemon -f /etc/postfwd.cf -u postfwd -g postfwd 

No caso de ter instalado a partir do apt (Debian, Ubuntu, etc), também deve haver um arquivo de configuração em /etc/default/postfwd e você poderia iniciar o serviço corretamente, por exemplo, sudo service postfwd start .

Em seguida, dê uma olhada no log para verificar se o postfwd está escutando. O Postfwd usa o mesmo log do postfix (por exemplo, /var/log/mail ou /usr/local/psa/var/log/maillog etc) e uma linha como postfwd 1.35 ready for input deve estar no lugar.

Então, deixe o postfix saber usar o postfwd. Edite o arquivo conf postfix (geralmente /etc/postfix/main.cf ) e na linha:

smtpd_recipient_restrictions = permit_mynetworks,...

adicione check_policy_service inet:127.0.0.1:10040 . Por favor, considere que a ordem em que você coloca isso em smtpd_recipient_restrictions tem grande importância e você pode acabar gastando muito tempo diagnosticando o que pode estar errado. Como explicado em esta questão , se uma verificação retornar OK ou REJECT, então o postfix não não continuar para o próximo, então você provavelmente deve colocar isso em alta.

Por fim, para verificar se isso funciona, você pode especificar um limite muito pequeno, como 1 ou até mesmo adicionar uma regra como id=DEFAULT; action=dunno . Qualquer hit de regra é registrado de qualquer maneira. Observe também que o limite de taxa por remetente não faz distinção entre vários e-mails com um único destinatário ou um único e-mail com vários destinatários.

Em seguida, envie um email de uma conta (nesse servidor) e observe o log:

grep "RULES" /var/log/mail

Outros links: início rápido do postfwd .

    
por 05.11.2015 / 15:43
3

O que você precisa é de um addon de política para o Postfix. Há uma dúzia de addon de política para o Postfix, alguns deles têm recurso de limitação de taxa. Você pode encontrar uma lista de addons de política do Postfix aqui .

    
por 15.07.2011 / 14:06
2

De uso: link

    
por 15.07.2011 / 17:17
0

Verifique este daemon de política configurável a partir do mysql link

    
por 12.10.2014 / 14:26

Tags