The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Exim catchall"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Почта / Linux)
Изначальное сообщение [ Отслеживать ]

"Exim catchall"  +/
Сообщение от ramzes3000email (ok), 07-Июн-22, 23:44 
Привет.
Подскажите как в Exim реализовать catchall - отправку/копирование всех приходящих писем на несуществующие адреса - на один ящик?
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Exim catchall"  +/
Сообщение от Тот Самый (?), 11-Июн-22, 10:10 
> Привет.
> Подскажите как в Exim реализовать catchall - отправку/копирование всех приходящих писем
> на несуществующие адреса - на один ящик?

Привет!
Поясни задачу, а то не понятно.
Копирование (прием) на один ящик всех приходящих на несуществующие адреса писем - это легко, помогу.
А отправка - это что и куда?


Ответить | Правка | Наверх | Cообщить модератору

2. "Exim catchall"  +/
Сообщение от ramzes3000email (ok), 12-Июн-22, 20:17 
> Привет!
> Поясни задачу, а то не понятно.
> Копирование (прием) на один ящик всех приходящих на несуществующие адреса писем -
> это легко, помогу.
> А отправка - это что и куда?

Привет.
Да, прием на один (или несколько в будущем) всех приходящих на несуществующие адреса писем.
Главное, что бы спам не полетел.

Ответить | Правка | Наверх | Cообщить модератору

3. "Exim catchall"  +/
Сообщение от Тот Самый (?), 12-Июн-22, 22:50 
Понятно.
Формализуем задачу:
Есть exim, который обслуживает домен dom.org
Есть реальные почтовые ящики u1@dom.org, u2@dom.org - они работают в нормальном режиме
Есть почтовый ящик any@dom.org в который сваливается почта для несуществующих (123@dom.org, mumu@dom.org etc) почтовых ящиков ДЛЯ ДОМЕНА dom.org (!) Для других доменов почту не принимаем (главное, что бы спам не полетел). Для авторизованной отправки все останется как было - мы ее не трогаем.
Ответить | Правка | Наверх | Cообщить модератору

4. "Exim catchall"  +/
Сообщение от Тот Самый (?), 12-Июн-22, 22:58 
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 (адрес почтового ящика сбора)

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

7. "Exim catchall"  +/
Сообщение от ramzes3000email (ok), 13-Июн-22, 11:26 
>[оверквотинг удален]
>   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%

Ответить | Правка | Наверх | Cообщить модератору

10. "Exim catchall"  +/
Сообщение от Тот самый (?), 14-Июн-22, 00:55 
> Но есть еще какой то локальный транспорт, что из них актуальное? :

С транспортами все просто. Они работают исключительно по вызовам из роутеров по имени и ни как по другому. Если какой-то транспорт не упоминается (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

Ответить | Правка | Наверх | Cообщить модератору

5. "Exim catchall"  +/
Сообщение от Тот Самый (?), 12-Июн-22, 23:16 
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

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

8. "Exim catchall"  +/
Сообщение от ramzes3000email (ok), 13-Июн-22, 11:34 
>[оверквотинг удален]
>   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

Ответить | Правка | Наверх | Cообщить модератору

6. "Exim catchall"  +/
Сообщение от Тот Самый (?), 12-Июн-22, 23:56 
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

Всё!

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

9. "Exim catchall"  +/
Сообщение от ramzes3000email (ok), 13-Июн-22, 14:40 
В общем добавил в роутерах:

local_catchall:
debug_print = "R: catchall for $local_part@$domain"
driver = redirect
domains = +local_domains
allow_fail
allow_defer
data = мойадрес@domai.com

Работает.
Как в данном случае не принимать спам?

Ответить | Правка | Наверх | Cообщить модератору

11. "Exim catchall"  +1 +/
Сообщение от Тот самый (?), 14-Июн-22, 01:24 
> Как в данном случае не принимать спам?

Ты же сам поставил задачу принимать всю почту для несуществующих почтовых ящиков. Таким образом письма для info, sales, director, buhgalter, audit, office и т.п. ты будешь принимать.

Ну а для общей фильтрации спама есть масса универсальных средств: DNSBL (dnslists = sbl.spamhaus.org), greylist etc. Выбирай, комбинируй.

Ответить | Правка | Наверх | Cообщить модератору

12. "Exim catchall"  +/
Сообщение от ramzes3000email (ok), 14-Июн-22, 08:42 

Спасибо за помощь! Всех благ тебе!

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру