POSTFIX: Limitando a taxa na qual um usuário específico pode enviar email

13

Temos uma configuração de servidor do servidor CentOS que hospeda nossos sites e servidor de e-mail (usando o POSTFIX). 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 é uma boa idéia enviar literalmente milhares de emails em massa. Quando isso acontece, o servidor de email deixa de responder e o email para outros clientes diminui enquanto a fila é processada.

Existe uma maneira de limitar a taxa de e-mail enviada para um usuário específico do sistema e não para todos? Existe também uma configuração que devemos alterar para que nada que um usuário possa fazer possa causar falhas no servidor de correio para outros usuários?

obrigado

WarpKid
fonte

Respostas:

23

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

A ligação que @ 84104 sugeriu, embora muito útil, não pode ser usado para implementar adequadamente taxa por remetente. smtpd_clientOs limites não são para controle de tráfego, mas 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 complemento para o postfix . Pessoalmente, considero o policyd recomendado por @Janne Pikkarainen bastante complicado, embora seja considerado um padrão.

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

Primeiro faça o download do último complemento no site acima. Eu acredito que não há rpm para o CentOS, em contraste com o Ubuntu e o Debian. No entanto, é recomendável que a versão mais recente seja usada. Mais especificamente, a versão 1.32 (que está presente em, por exemplo, Ubuntu 14.04LTS repos) possui um bug desagradável que impede que ele funcione adequadamente. A versão 1.35 resolve isso.

Verifique se esses módulos PERL estão presentes. Se você estiver usando o Debian ou Ubuntu, poderá instalar a partir de repositórios para que todas as dependências sejam automaticamente classificadas e substituídas /usr/sbin/postfwdpela versão mais recente.

Em seguida, crie o conjunto de regras. Crie um arquivo como /etc/postfwd.cfou /etc/postfix/postfwd.cfe 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 para todos os remetentes. A sintaxe da rateação é:

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 . Discussões semelhantes podem ser encontradas aqui . Se o SASL estiver implementado (por exemplo, dovecot), você poderá substituí-lo sendercom segurança sasl_username. Você pode testar a validade do conjunto de regras com a -Copção:

postfwd -f /etc/postfwd.cf -C

Posteriormente, você pode, opcionalmente, criar um usuário e um grupo dedicados postfwdsob os quais o postfwd será executado e iniciá-lo:

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

No caso de instalá-lo a partir do apt (Debian, Ubuntu etc), também deve haver um arquivo de configuração /etc/default/postfwde você pode iniciar o serviço corretamente, por exemplo sudo service postfwd start.

Dê uma olhada no log para verificar se o postfwd está escutando. O Postfwd usa o mesmo log que o postfix (por exemplo, /var/log/mailou /usr/local/psa/var/log/maillogetc) e uma linha que postfwd 1.35 ready for inputdeve estar em vigor.

Em seguida, avise o postfix para usar o postfwd. Edite o arquivo conf postfix (geralmente /etc/postfix/main.cf) e na linha:

smtpd_recipient_restrictions = permit_mynetworks,...

adicionar check_policy_service inet:127.0.0.1:10040. Por favor, considere que a ordem em que você coloca isso smtpd_recipient_restrictionsé de grande importância e você pode acabar gastando muito tempo diagnosticando o que pode estar errado. Conforme explicado nesta pergunta , se uma verificação retornar OK ou REJECT, o postfix não continuará para a próxima, portanto, você provavelmente deve colocar esse valor alto.

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 ocorrência de regra é registrada de qualquer maneira. Observe também que o limite de taxa por remetente não distingue entre vários emails com um único destinatário ou um único email com vários destinatários.

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

grep "RULES" /var/log/mail

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

Wtower
fonte
1
uma explosão do passado esta pergunta! obrigado por dedicar um tempo para fornecer uma resposta tão bem pensada. Eu estou impressionado!
WarpKid
1
minha versão de Barfs postfix em qualquer smtpd_recipient_restrictionsentrada com um espaço nele, então eu tive que definir postfwd_ratelimit = check_policy_service inet:127.0.0.1:10040em /etc/postfix/main.cf e, em seguida, fazer referência a ela em /etc/postfix/master.cf comosmtpd_recipient_restrictions=...,$postfwd_ratelimit,...
Tom McClure
Para reiniciar o postfix no Ubuntu:sudo postfwd -f /etc/postfix/postfwd.cf --pidfile=/var/run/postfwd.pid --reload
Wtower
Usando o Ubuntu 16.04, pelo menos, descobri que precisava alterar o curinga nas regras para usar .+(pelo menos 1) em vez de .*(pelo menos 0) para que as regras não correspondam aos campos ausentes.
TommyPeanuts 13/06/19
4

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

Emre Yazici
fonte