The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Exim catchall, !*! ramzes3000, 07-Июн-22, 23:44  [смотреть все]
Привет.
Подскажите как в Exim реализовать catchall - отправку/копирование всех приходящих писем на несуществующие адреса - на один ящик?
  • 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. Выбирай, комбинируй.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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