Страница 1 из 1

Exim, очередь и ratelimit

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

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

Добавлено: 2011-07-22 11:20:58
Laa
Привет!
В транспорте remote_smtp покрути опцию max_rcpt и connection_max_messages.

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

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

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

Добавлено: 2011-07-26 8:43:58
mediamag
Если вам не сложно - поделитесь скриптом или расскажите как в драйвере smtp примерно прописать рейтлимиты на исх. почту, а то я щас другой проект ворочу, на почтовик совсем времени нет думать. Заранее спасибо. Хотелось бы еще увидеть исключение на отправляемые хосты (то есть чтобы не на все исх действовал данный рейтлимит)

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

Добавлено: 2011-07-26 13:14:58
fogary
Не до конца уверен, но вроде рейтлимиты срабатывают только на вход, как их применить (и можно ли) на выход я понять не смог.

Скрипт (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 перечисляется на какие домены срабатывает роутер. Вероятно, тоже самое можно сделать и для хостов. Сразу за этим роутером, прописан роутер для отправки в интернет.