- Exim catchall, Тот Самый, 10:10 , 11-Июн-22 (1)
> Привет. > Подскажите как в Exim реализовать catchall - отправку/копирование всех приходящих писем > на несуществующие адреса - на один ящик?Привет! Поясни задачу, а то не понятно. Копирование (прием) на один ящик всех приходящих на несуществующие адреса писем - это легко, помогу. А отправка - это что и куда?
- Exim catchall, ramzes3000, 20:17 , 12-Июн-22 (2)
> Привет! > Поясни задачу, а то не понятно. > Копирование (прием) на один ящик всех приходящих на несуществующие адреса писем - > это легко, помогу. > А отправка - это что и куда?Привет. Да, прием на один (или несколько в будущем) всех приходящих на несуществующие адреса писем. Главное, что бы спам не полетел.
- Exim catchall, Тот Самый, 22:50 , 12-Июн-22 (3)
Понятно. Формализуем задачу: Есть exim, который обслуживает домен dom.org Есть реальные почтовые ящики u1@dom.org, u2@dom.org - они работают в нормальном режиме Есть почтовый ящик any@dom.org в который сваливается почта для несуществующих (123@dom.org, mumu@dom.org etc) почтовых ящиков ДЛЯ ДОМЕНА dom.org (!) Для других доменов почту не принимаем (главное, что бы спам не полетел). Для авторизованной отправки все останется как было - мы ее не трогаем.
- Exim catchall, Тот Самый, 22:58 , 12-Июн-22 (4)
1) делаем новый транспорт доставки в секции begin transports в любом местеУ тебя уже есть delivery_local транспорт. Что-то типа: delivery_local: driver = pipe command = /bin/deliver -d $local_part@$domain timeout = 30s force_command = true message_size_limit = 50M ..... Полностью копируем его в delivery_any: driver = pipe command = /bin/deliver -d any@$domain timeout = 30s force_command = true message_size_limit = 50M ..... Меняем ему название на delivery_any и в command меняем $local_part на any (адрес почтового ящика сбора)
- Exim catchall, ramzes3000, 11:26 , 13-Июн-22 (7)
>[оверквотинг удален] > command > = /bin/deliver -d any@$domain > timeout > = 30s > force_command = > true > message_size_limit = 50M > ..... > Меняем ему название на delivery_any и в command меняем $local_part на any > (адрес почтового ящика сбора) У меня есть delivery_local транспорт. Что-то типа: procmail: driver = pipe command = "/usr/bin/procmail -d $local_part" return_path_add delivery_date_add envelope_to_add user = $local_part initgroups return_output Скопировал, заменил: delivery_any: driver = pipe command = "/usr/bin/procmail -d any" return_path_add delivery_date_add envelope_to_add user = $local_part initgroups return_output Но есть еще какой то локальный транспорт, что из них актуальное? : local_delivery: driver = appendfile maildir_format maildir_use_size_file user = ${extract{2}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}} group = mail create_directory directory_mode = 770 mode = 660 use_lockfile = no delivery_date_add envelope_to_add return_path_add directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part" quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}M quota_warn_threshold = 75%
- Exim catchall, Тот самый, 00:55 , 14-Июн-22 (10)
> Но есть еще какой то локальный транспорт, что из них актуальное? : С транспортами все просто. Они работают исключительно по вызовам из роутеров по имени и ни как по другому. Если какой-то транспорт не упоминается (transport = ..., file_transport = ...) ни в одном роутере, значит он не нужен и его можно смело удалять. Судя по твоим роутерам у тебя не используется procmail (может быть он в других роутерах?), а используется транспорт local_delivery, в котором exim сам выступает в роли LDA (driver = appendfile) Можешь сделать транспрорт delivery_any аналогично, только заменив delivery_any: driver = appendfile ...... user = any ...... directory = "/mail/$domain/any" ...... А можно использовать /usr/bin/procmail в качестве LDA delivery_any: driver = pipe command = "/usr/bin/procmail -d any" return_path_add delivery_date_add envelope_to_add user = any (здесть тоже надо $local_part изменить) initgroups return_output
- Exim catchall, Тот Самый, 23:16 , 12-Июн-22 (5)
2) делаем роутер в секции begin routers (порядок роутеров имеет значение!)Обычно ПОСЛЕДНИЙ роутер используется для локальной доставки. У тебя должно быть что-то типа: local_user: driver = accept domains = +local_domains local_parts = dsearch;/vmail (здесь у тебя наверное другое размещение - оставляй как было) transport = delivery_local cannot_route_message = No such mailbox here. Строку cannot_route_message комментируем. Вместо нее добавляем no_more (это чтобы почта для u1 и u2 так-же не сваливалась в any) ПОСЛЕ этого роутера делаем свой any_user: driver = accept domains = +local_domains (важное условие!) transport = delivery_any
- Exim catchall, ramzes3000, 11:34 , 13-Июн-22 (8)
>[оверквотинг удален] > transport = delivery_local > cannot_route_message = No such mailbox here. > Строку cannot_route_message комментируем. Вместо нее добавляем no_more (это чтобы почта > для u1 и u2 так-же не сваливалась в any) > ПОСЛЕ этого роутера делаем свой > any_user: > driver = accept > domains = +local_domains (важное > условие!) > transport = delivery_any Роутер local_user у меня такой, что делать? что менять? localuser: driver = accept transport = local_delivery condition = ${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}{true}{false}} Ниже присутствует такой роутер: (его как то можно использовать для решения задачи?) catchall: driver = redirect headers_add = X-redirected: yes require_files = /etc/exim4/domains/$domain/aliases data = ${extract{1}{:}{${lookup{*@$domain}lsearch{/etc/exim4/domains/$domain/aliases}}}} file_transport = local_delivery redirect_router = dnslookup
- Exim catchall, Тот Самый, 23:56 , 12-Июн-22 (6)
3) возможно придется внести коррективы в acl_check_rcpt Что у тебя там наворочено я не знаю, поэтому могу дать только общие рекомендации.Например, у меня ПЕРЕД require verify = recipient используется deny domains = +local_domains !local_parts = lsearch;/etc/vpasswd (у меня вируальные пользователи в vpasswd) message = No such address here. Если у тебя есть подобная проверка в acl_check_rcpt, нужно будет ее удалить (Остальные проверки естественно должны оставаться на месте) require verify = recipient можно оставить, т.к теперь есть роутер any_user и команда RCPT TO: director@dom.org нормально пройдет verify Может случиться, что тебе не придется подстраивать acl_check_rcpt, но в любом случае после внесения всех этих изменений ОБЯЗАТЕЛЬНО надо проверить корректность работы acl_check_rcpt на предмет open relay Всё!
- Exim catchall, ramzes3000, 14:40 , 13-Июн-22 (9)
В общем добавил в роутерах:local_catchall: debug_print = "R: catchall for $local_part@$domain" driver = redirect domains = +local_domains allow_fail allow_defer data = мойадрес@domai.com Работает. Как в данном случае не принимать спам?
- Exim catchall, Тот самый, 01:24 , 14-Июн-22 (11) +1
> Как в данном случае не принимать спам?Ты же сам поставил задачу принимать всю почту для несуществующих почтовых ящиков. Таким образом письма для info, sales, director, buhgalter, audit, office и т.п. ты будешь принимать. Ну а для общей фильтрации спама есть масса универсальных средств: DNSBL (dnslists = sbl.spamhaus.org), greylist etc. Выбирай, комбинируй.
- Exim catchall, ramzes3000, 08:42 , 14-Июн-22 (12)
Спасибо за помощь! Всех благ тебе!
|