К списку форумов К списку вопросов
Exim. Вопрос по роутеру.
ray_man
21.09.2004 - 14:10
Используется связка Exim + Exchange. В exim настроен роутер, который проверяет пользователей exchenge по LDAP и если таковые есть - отдает письма ему, нет - отбрасывает с ошибкой "Unknown user". Проблемма следующая: когда exchange не доступен exim'у, роутер не может сделать запрос и отклоняет письмо с ошибкой "Temporary local problem". А надо бы поместить письмо в очередь и отправить позже. Как это сделать подскажите. Вот роутер который осуществляет проверку:
-----
...
domainlist relay_to_domains = some.server.com
...
begin routers
exchangemaillookup:
  driver = redirect data = ${lookup ldap
  domains = +relay_to_domains
  verify_recipient self = pass pass_router = dnslookup no_more
dnslookup:
...
exchangeroute:
  driver = manualroute
  domains = +relay_to_domains
  transport = remote_smtp
  route_data = 192.168.xxx.xxx
  no_more

begin transports
...
----------------
ano
1 - 21.09.2004 - 15:17
Я бы, честно говоря, убрал первый router. Проверку на существование ящика надёжнее всего либо вообще не делать (результат тот-же - если не exim, так exchange даст отлуп типа "user unknown", когда будет доступен), либо делать по локальному файлу - экспортировать из exchange в текстовый файл и класть на ту машинку, где exim раз в 5 минут - но в этом случае можно такую проверку делать уже в ACL на RCPT, тогда ещё и трафик сэкономишь. Ещё вариант - перенести такую проверку в транспорт, но это надо пробовать, не знаю точно, что получится...
tuxer
2 - 21.09.2004 - 15:24
С exim'ом в качестве роутера не сталкивался, не зная версии и не видя полного конфига будем гадать:
ignore_bounce_errors_after = ?
timeout_frozen_after = ?
auto_thaw = ?
tuxer
3 - 21.09.2004 - 15:32
Согласен с ano, здесь проще не делать проверку на существование юзера вообще.
ray_man
4 - 21.09.2004 - 15:45
[1] проверка мэйлбокса нужна, т.к. Exchange 5.5 и кажется более старшие версии (точно не знаю) принимают почту для несуществующих ящиков на мэйлбокс постмастера (если можно настроить exchange, чтобы он давал "отлуп типа "user unknown", хотелось бы узнать как это сделать). Вариант с текстовым файлом не совсем нравится, если выхода не будет тогда посмотрю. С транспортом не совсем понял как реализовать.
[2] exim 4.20 данные параметры, как мне кажется, ничем не помогут, т.к. письмо режектится. А мне нужно чтобы оно попало в очередь или было "заморожено". Если я не прав поясните плз.
ray_man
5 - 21.09.2004 - 15:54
Основная функция exim в этой связке - избавиться от спама, большая часть из которого идет на несуществующие ящики. Сам exchange не может этого сделать (или я не не нашел как это сделать).
tuxer
6 - 21.09.2004 - 16:01
В контексте "не делать проверку на существование юзера" имеет значение, иначе нет. Можно почту для всех валить в одно место (ящик), а exchange будет выгребать оттуда и раскладывать по своим user'ам, через определенное время.
ray_man
7 - 21.09.2004 - 16:05
прошу прощения, сразу не заметил, роутер корявый получился, вот поправил:
exchangemaillookup:
driver = redirect
data = ${lookup ldap
domains = +relay_to_domains
verify_recipient
self = pass
pass_router = dnslookup
no_more
ano
8 - 21.09.2004 - 16:09
Лучше бы, конечно, exchange отучить такую подлость делать, но тут не подскажу, не работал я с ним и не буду ;-) Вариант с экспортом в файл на самом деле наиболее жизнеспособен - проще и надёжнее остальных. Как по другому сделать - пока не знаю, подумаю, если время будет, но скорее всего ничего больше не придумаю. Дело в том, что перехватить defer в exim'e можно только в callout'ах, в остальных местах никак. Да, есть ещё вариант - написать проверку на perl, подключить в exim'e и радоваться жизни. Я так себе greylisting сделал. Отлично работает :-)
ano
9 - 21.09.2004 - 16:12
5: ну, от спама ты так просто не избавишься :-) Это гораздо более обширная тема.
ray_man
10 - 21.09.2004 - 16:22
[ano] На несуществующие ящики в час приходит около 150 писем. Это прилично. Поэтуму хотелось бы подлечить exchange, и не принимать эти письма.
Может есть у кого идеи как всетаки подправить роутер?
ano
11 - 21.09.2004 - 16:36
Вот моя статистика с одного сервера:
# egrep -c 'wrong HELO|dynamic_|VIRUS|DNSBL' /var/log/exim/mainlog
1386
# grep -c 'mailbox does not exist' /var/log/exim/mainlog
80
Вот с другого:
# egrep -c 'wrong HELO|dynamic_|VIRUS|DNSBL' /var/log/exim/mainlog
1085
# grep -c 'mailbox does not exist' /var/log/exim/mainlog
186
Это за текущие сутки. Отсюда вывод - на несуществующие ящики приходит не так уж и много спама (эта проверка у меня стоит первой).
ray_man
12 - 21.09.2004 - 16:38
Объясните плз. почему вы против этого роутера? В чем минусы его использования?
ano
13 - 21.09.2004 - 16:49
Минус - в том, что он вместо 5xx mailbox does not exist (deny) даёт 4xx temporarily rejected (defer), когда exchange не отвечает. Причём, даже тогда, когда ящик существует. В принципе, на результат это не повлияет - нормальный сервер через час попытается отправить письмо ещё раз, а спамер скорее всего нет, причём если exchange ответил "нету такого", повторная попытка завершится как задумано (5хх). Это "некрасиво", но работает :-) И я ничуть не против. Но тебе-ж самому не нравится ;-)
ano
14 - 21.09.2004 - 17:01
Да, ещё такое соображение: ACL'ы - контролируют, router'ы - маршрутизируют, transport'ы - доставляют, соответственно, наилучшее место для проверок чего угодно - именно ACL, по крайней мере для этого он придуман. Бывают исключения, но редко.
ray_man
15 - 21.09.2004 - 17:02
Понятно. Тогда вариант с тесктовым файлом. Каким образом его соорудить? В каком направлении капать?
ano
16 - 21.09.2004 - 17:11
Ну, это уж как сделаешь, я тут не подсказчик, как в exchange сделать экспорт просто не знаю. Потом ещё надо же перекинуть его на машинку с exim'ом - тут тоже я не могу знать, какие возможности для этого есть (ftp, ssh, http, ...). А вот сам ACL могу и показать:
acl_check_rcpt:
  accept hosts = :
  deny local_parts = ^.*[@%!|] : ^\\.
  accept local_parts = postman : postmaster : abuse
          domains = +local_domains
  deny condition = ${lookup{${lc:$local_part}@${lc:$domain}} \

          domains = +local_domains
          message = mailbox does not exist ($local_part@$domain)
          log_message = mailbox does not exist
  accept hosts = +relay_from_hosts
...
ray_man
17 - 21.09.2004 - 17:19
Спасибо
ano
18 - 21.09.2004 - 17:36
Ой... Чего-то condition обрезался... Должен быть такой:
condition = ${lookup{${lc:$local_part}@${lc:$domain}} dbm{/usr/local/etc/exim/db/valid_boxes.db}{no}{yes}}

К списку вопросов на форуме Сети

>>