Exim, очередь и ratelimit

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
mediamag
лейтенант
Сообщения: 693
Зарегистрирован: 2008-10-02 20:49:21

Exim, очередь и ratelimit

Непрочитанное сообщение mediamag » 2011-07-22 10:48:46

Добрый день уважаемые гуру. Стоит exim 4 на фре. Появилась, на мой взгляд нелегкая задача и вот какая:
Есть в сети уникалы, которые иногда перенаправляют почту на другие ящики...так вот они берут все сообщения (10-50) и кидают на определенные ящики в инете. Такой расклад не устраивает, ибо тупо спам получается. Можно ли настроить рейтлимиты экзима так, чтобы все исходящие письма с сервера (внутренние и внешние) можно было отправлять за раз около 5, а если больше, то последующие с интервалом 1 минута????. буду очень благодарен за предоставленные разъяснения и опции.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Laa
ст. лейтенант
Сообщения: 1032
Зарегистрирован: 2008-02-21 18:25:33
Откуда: Украина, Россия

Re: Exim, очередь и ratelimit

Непрочитанное сообщение Laa » 2011-07-22 11:20:58

Привет!
В транспорте remote_smtp покрути опцию max_rcpt и connection_max_messages.
exim: помните, что выдавая deny, вы можете недоставить ваше же письмо, зарубив sender-verify удаленного MTA к вашему MTA!!!

fogary
рядовой
Сообщения: 16
Зарегистрирован: 2011-07-22 0:18:08

Re: Exim, очередь и ratelimit

Непрочитанное сообщение fogary » 2011-07-25 15:55:28

Недавно решал примерно такую же задачу.
Получилось так: перед роутером внешней отправки вставил роутер с драйвером queryprogram, который вызывает внешний скрипт. Скрипт проверяет счетчик отправленных писем, если меньше указанного значения, то счетчик увеличивается на 1, а exim-у возвращается PASS. Если счетчик равен или больше, то exim-у возвращается DEFER, в результате письмо остается в очереди на повторную доставку. Через заданный период времени, счетчик обнуляется cron-ом. Дальше, через интервал заданный ключом -q<time>, запускается обработчик очереди и пробует отправить письма, для которых разрешен повтор.

mediamag
лейтенант
Сообщения: 693
Зарегистрирован: 2008-10-02 20:49:21

Re: Exim, очередь и ratelimit

Непрочитанное сообщение mediamag » 2011-07-26 8:43:58

Если вам не сложно - поделитесь скриптом или расскажите как в драйвере smtp примерно прописать рейтлимиты на исх. почту, а то я щас другой проект ворочу, на почтовик совсем времени нет думать. Заранее спасибо. Хотелось бы еще увидеть исключение на отправляемые хосты (то есть чтобы не на все исх действовал данный рейтлимит)

fogary
рядовой
Сообщения: 16
Зарегистрирован: 2011-07-22 0:18:08

Re: Exim, очередь и ratelimit

Непрочитанное сообщение fogary » 2011-07-26 13:14:58

Не до конца уверен, но вроде рейтлимиты срабатывают только на вход, как их применить (и можно ли) на выход я понять не смог.

Скрипт (chklimit.sh):

Код: Выделить всё

#!/bin/sh
PATH=/bin:/usr/local/sbin
qcount_file=/var/spool/exim/qcount
qlimit=48
# read counter from file
if [ -s $qcount_file ]
then
    qcount=$(cat $qcount_file)
else
    qcount=0
fi
# check to limit
if [ $qcount -ge $qlimit ]
then
    echo "DEFER To smarthost limit reached"
else
    # save counter to file
    echo $(($qcount + 1)) > $qcount_file
    echo "PASS"
fi
qcount_file - файл в который сохраняется счетчик.
qlimit - макс. кол-во писем за период времени.
После DEFER, текст который будет писаться в журнал.

Роутер:

Код: Выделить всё

checklimit:
  driver = queryprogram
  domains = ! +local_domains
  command = /usr/local/etc/chklimit.sh
  command_user = mailnull
  command_group = mail

Собственно, в domains перечисляется на какие домены срабатывает роутер. Вероятно, тоже самое можно сделать и для хостов. Сразу за этим роутером, прописан роутер для отправки в интернет.