Exim Smarthost Несколько доменов и учетные данные Mailgun

У меня есть экземпляр GCP, работающий с настройками whm/cpanel и mailgun с использованием exim для нескольких учетных записей, использующих несколько доменов.

Текущая настройка работает для всех доменов, однако она действует только для основного домена. Mailgun поддерживает несколько доменов с несколькими учетными данными.

При отправке электронной почты с домена, отличного от "c ********* t.com", сообщения электронной почты имеют VIA в gmail, поскольку header.from не совпадает

dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=c*****s.com

Снимок экрана: "VIA" и "Изображения не отображаются"

Раздел: AUTH

mailgun_login:
driver = plaintext
public_name = LOGIN
hide client_send = : postmaster@c*********t.com : 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Раздел: ROUTERSTART

mailgun:
driver = manualroute
domains = ! +local_domains
transport = mailgun_transport
route_list = "* smtp.mailgun.org::2525 byname"
host_find_failed = defer
no_more

Раздел: ТРАНСПОРТСТАРТ

mailgun_transport:
driver = smtp
hosts = smtp.mailgun.org
hosts_require_auth = smtp.mailgun.org
hosts_require_tls = smtp.mailgun.org

Любые предложения или альтернативы будут оценены. Спасибо.

ОБНОВЛЕНИЕ Текущие ошибки в журнале на основе ответа ниже:

LOG: MAIN
  cwd=/usr/local/cpanel/whostmgr/docroot 4 args: /usr/sbin/exim -v -M 
1gPYIq-0001cc-UL
delivering 1gPYIq-0001cc-UL
Transport port=25 replaced by host-specific port=2525
Connecting to smtp.mailgun.org [**.**.**.***]:2525 ... connected
  SMTP<< 220 ak47 ESMTP ready
  SMTP>> EHLO instance-1
  SMTP<< 250-ak47
         250-AUTH PLAIN LOGIN
         250-SIZE 52428800
         250-8BITMIME
         250-ENHANCEDSTATUSCODES
         250-SMTPUTF8
         250 STARTTLS
  SMTP>> STARTTLS
  SMTP<< 220 2.0.0 Start TLS
  SMTP>> EHLO instance-1
  SMTP<< 250-ak47
         250-AUTH PLAIN LOGIN
         250-SIZE 52428800
         250-8BITMIME
         250-ENHANCEDSTATUSCODES
         250 SMTPUTF8
  SMTP>> AUTH LOGIN
  SMTP<< 334 VXNlcm5hbWU6
  SMTP>> *
  SMTP<< 500 5.5.1 Invalid command
  SMTP>> QUIT
  SMTP(close)>>
Transport port=25 replaced by host-specific port=2525
Connecting to smtp.mailgun.org [**.**.**.***]:2525 ... connected
  SMTP<< 220 ak47 ESMTP ready
  SMTP>> EHLO instance-1
  SMTP<< 250-ak47
         250-AUTH PLAIN LOGIN
         250-SIZE 52428800
         250-8BITMIME
         250-ENHANCEDSTATUSCODES
         250-SMTPUTF8
         250 STARTTLS
  SMTP>> STARTTLS
  SMTP<< 220 2.0.0 Start TLS
  SMTP>> EHLO instance-1
  SMTP<< 250-ak47
         250-AUTH PLAIN LOGIN
         250-SIZE 52428800
         250-8BITMIME
         250-ENHANCEDSTATUSCODES
         250 SMTPUTF8
  SMTP>> AUTH LOGIN
  SMTP<< 334 VXNlcm5hbWU6
  SMTP>> *
  SMTP<< 500 5.5.1 Invalid command
  SMTP>> QUIT
  SMTP(close)>>
Transport port=25 replaced by host-specific port=2525
Connecting to smtp.mailgun.org [**.**.**.***]:2525 ... connected
  SMTP<< 220 ak47 ESMTP ready
  SMTP>> EHLO instance-1
  SMTP<< 250-ak47
         250-AUTH PLAIN LOGIN
         250-SIZE 52428800
         250-8BITMIME
         250-ENHANCEDSTATUSCODES
         250-SMTPUTF8
         250 STARTTLS
  SMTP>> STARTTLS
  SMTP<< 220 2.0.0 Start TLS
  SMTP>> EHLO instance-1
  SMTP<< 250-ak47
         250-AUTH PLAIN LOGIN
         250-SIZE 52428800
         250-8BITMIME
         250-ENHANCEDSTATUSCODES
         250 SMTPUTF8
  SMTP>> AUTH LOGIN
  SMTP<< 334 VXNlcm5hbWU6
  SMTP>> *
  SMTP<< 500 5.5.1 Invalid command
  SMTP>> QUIT
  SMTP(close)>>
LOG: MAIN
  == *********@gmail.com R=mailgun T=mailgun_transport defer (-42): authentication required but authentication attempt(s) failed

3 ответа

Отработав "Ответ от Каракоса" (который я пытался, но не смог заставить работать), я смог найти этот пост на форуме, и после изменения деталей для Mailgun он работал как шарм. Мне также нравится это решение, потому что оно масштабируется для других служб ретрансляции почты при необходимости.
https://forums.cpanel.net/threads/how-to-send-email-from-different-domains-using-different-smarthosts.641949/

Я просто обрисую настройки, которые я использовал для Mailgun, но обратитесь к ссылке для более подробных объяснений, рисунков и других примеров, таких как Sendgrid, Mailjet и Sendpulse.


  1. В WHM перейдите к "Exim Configuration Manager" (Домашняя страница> Конфигурация службы> Exim Configuration Manager). После этого нажмите на вкладку "Расширенный редактор".
    (Вероятно, хорошая идея сделать резервную копию настроек перед внесением этих изменений)

Раздел: AUTH

#Smart Host Sending
sendbysmarthosts:
driver = plaintext
public_name = LOGIN
hide client_send = : ${extract{user} 
{${lookup{$sender_address_domain}lsearch{/etc/exim_smarthosts}}}}: ${extract{pass}{${lookup{$sender_address_domain}lsearch{/etc/exim_smarthosts}}}}

Раздел: PREROUTERS

#Smart Host Sending
sendbysmarthostsrouter:
driver = manualroute
domains = ! +local_domains
condition =  "${if eq{${lookup{$sender_address_domain}partial- 
lsearch{/etc/exim_smarthosts}{$value}}}{}{false}{true}}"
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
headers_add = "${perl{mailtrapheaders}}"
transport = sendbysmarthoststransport
route_list = * ${extract{smtp} {${lookup{$sender_address_domain}lsearch{/etc/exim_smarthosts}}}}

Раздел: ТРАНСПОРТСТАРТ

#Smart Host Sending
sendbysmarthoststransport:
driver = smtp
port = ${extract{port} 
{${lookup{$sender_address_domain}lsearch{/etc/exim_smarthosts}}}}
hosts_require_auth = $host_address
hosts_require_tls = $host_address

Прокрутите страницу вниз и сохраните конфигурацию exim и убедитесь, что exim перезапускается.


  1. Создайте файл с именем "exim_smarthosts" в каталоге "/etc" с помощью Mailgun или других параметров smarthost.

Это пример данных, смени домен, пользователя и пароль.

#Sending by Mailgun
domain1.com: domain=domain1.com user=postmaster@mg.domain1.com pass=MAILGUN_password smtp=smtp.mailgun.org port=587
domain2.com: domain=domain2.com user=postmaster@mg.domain2.com pass=MAILGUN_password smtp=smtp.mailgun.org port=587
domain3.com: domain=domain3.com user=postmaster@mg.domain2.com pass=MAILGUN_password smtp=smtp.mailgun.org port=587

В третьем примере используются учетные данные domain2.com для domain3.com, это будет работать, но в электронные письма будет входить сообщение через mg.domain2.com.


Теперь электронная почта, отправленная с созданных cPanel учетных записей электронной почты на их соответствующие домены, будет перехватываться exim (разрешено подключаться к внешним SMTP-серверам) и ретранслироваться через Mailgun, если учетные данные в /etc/exim_smarthosts указаны правильно и настройки DNS верны. Однако настройки безопасности WHM по-прежнему ограничивают подключение всех учетных записей cPanel к какой-либо внешней службе SMTP, поэтому нам необходимо сделать еще один шаг, чтобы использовать вышеуказанные настройки для электронной почты на основе приложений.

К вашему сведению: этот параметр следует сохранить при ограничении внешних SMTP-подключений.
Администратор WHM >> Настройки твика >> Почта >> Ограничить исходящий SMTP для root, exim и mailman

Чтобы отправить электронное письмо из Joomla, Wordpress или другой CMS или приложения, выполните следующие действия.


  1. a) Создайте учетную запись электронной почты в cPanel и получите учетные данные для безопасного входа.
    cPanel >> Учетные записи электронной почты >> (Новая электронная почта) >> Подключение устройств >> Настройка почтового клиента

    б) Используйте это имя пользователя, пароль и данные исходящего сервера в вашем Joomla, WordPress или другом CMS/App/Plugin


Теперь ваши CMS, плагины и приложения подключаются только к внутренней учетной записи SMTP, но при отправке этой учетной записи она передается через внешнюю настройку SMTP на первых этапах.

ОГРОМНОЕ СПАСИБО DigitalComunic на форумах cPanel, чья усердная работа и устранение неполадок дали нам надежный обходной путь, который должен быть полезен на долгие годы!

У меня такая же настройка (VPS + WHM/cPanel + Exim + Mailgun), и после некоторых онлайн-исследований я нашел несколько полезных веб-сайтов по этой теме и смог выбрать правильную конфигурацию. Ниже приведены решения, которые я сейчас использую на своем VPS, и надеюсь, что это поможет вам. Это должно решить вашу проблему "через" и может решить прерывистую ошибку 550 5.7.1 Relaying denied"от Mailgun:



Перейдите в "Редактор конфигурации exim" в WHM. Выберите "Расширенный редактор" и вставьте конфигурацию ниже:



Раздел: AUTH

mailgun_login:
driver = plaintext
public_name = LOGIN
hide client_send = ": ${extract{login}{${lookup{$sender_address_domain}lsearch{/etc/exim_mailgun}{$value}fail}}} : ${extract{password}{${lookup{$sender_address_domain}lsearch{/etc/exim_mailgun}{$value}fail}}}"



Раздел: ROUTERSTART

mailgun:
driver = manualroute
domains = ! +local_domains
transport = mailgun_transport
route_list = "* smtp.mailgun.org::587 byname"
host_find_failed = defer
no_more



Раздел: ТРАНСПОРТСТАРТ

mailgun_transport:
driver = smtp
hosts = smtp.mailgun.org
hosts_require_auth = smtp.mailgun.org
hosts_require_tls = smtp.mailgun.org



Затем создайте файл с именем /etc/exim_mailgun и вставьте содержимое, похожее на структуру ниже (замените его учетными данными для входа в домен Mailgun, которые были проверены):

domain1.com:    username=postmaster@mg.domain1.com     password=abcdefghi
domain2.com:    username=postmaster@mg.domain2.com     password=jklmnopqr



ОБНОВИТЬ:

Как прокомментировал @Supamic, я иногда сталкивался с ошибкой, о которой он упоминал, когда электронная почта отправлялась системой доставки почты (Mailer-Daemon@hostname.yourserver.com) на мою внешнюю учетную запись электронной почты (Gmail):

authentication required but authentication attempt(s) failed


Я думаю, возможно, из-за части "Идентификация отправителя" Mailer-Daemon, так как exim не смог получить учетные данные для входа из моего /etc/exim_mailgun, так как нет домена отправителя:

“Sender identification U=mailnull D=-system- S=mailnull”

Чтобы решить эту проблему, служба технической поддержки cPanel рекомендовала переслать всю электронную почту от Mailer-Daemon на локальный адрес электронной почты, размещенный на моем сервере, а затем с помощью функции пересылки передать электронную почту моей учетной записи Gmail.



Что касается периодически возникающей ошибки "550 5.7.1 Relaying denied", после обращения в службу технической поддержки cPanel, они рекомендовали мне подключить smtp.mailgun.org к одному IP, установив статический IP в /etc/hosts вместо разрешив exim разрешить smtp.mailgun.org для нескольких IP-адресов.

Ошибка аутентификации начнет происходить, когда exim разрешил smtp.mailgun.org для нескольких IP-адресов. Служба технической поддержки cPanel не смогла указать точную причину этой ошибки "550 5.7.1 Relaying denied". Возможно, что-то не работает должным образом, когда Mailgun поддерживает аутентификацию в избыточной SMTP-инфраструктуре.

Вы можете разрешить IP-адреса SMTP-сервера Mailgun с помощью одной из следующих команд:

nslookup smtp.mailgun.org

dig +short smtp.mailgun.org @resolver1.opendns.com


Используйте один из IP-адресов из результата и поместите его в файл /etc/hosts:

xxx.xxx.xxx.xxx     smtp.mailgun.org



И я хочу передать БОЛЬШОЕ СПАСИБО @ Supamic великолепной команде технической поддержки cPanel. Их преданность делу устранения неполадок заслуживает похвалы.

Полезный!

Я использовал это как вдохновение для своей конфигурации. (Хотя я не использую cpanel, по сути это то же самое) Мне нужно, чтобы почта с некоторых доменов доставлялась через серверы провайдера, а не через мой собственный сервер, потому что такие вещи, как проверки SPF, не работают, поскольку мои серверы не будут указаны как разрешенные. отправлять. У меня было несколько проблем с приведенными выше примерами конфигурации, особенно когда используются адреса IPv6.

Вот что я придумал, просто чтобы немного улучшить вышеизложенное:

Макросы (начало файла/main/debian 00_macros):

      # Smarthost auth - comment out to disable:
SMARTHOST_AUTH           = /etc/exim4/exim_smarthosts

Маршрутизатор

ROUTER_DNSLOOKUP_IGNORE_TARGET_HOSTSПохоже, это значение по умолчанию, основанное на конфигурации exim Debian, поэтому оно используется в другом месте моей конфигурации, поэтому с таким же успехом можно было бы быть последовательным и использовать его для этого маршрутизатора. В моей конфигурации это прямо перед маршрутизатором, но оно также может быть вверху, в конфигурации main/macros.

      # ignore private rfc1918, loopback, APIPA/link-local, local broadcast, unspecified, unique local, linked-scoped unicast and discard-Only:

.ifndef ROUTER_DNSLOOKUP_IGNORE_TARGET_HOSTS
ROUTER_DNSLOOKUP_IGNORE_TARGET_HOSTS = <; 0.0.0.0 ; 127.0.0.0/8 ; 192.168.0.0/16 ; 172.16.0.0/12 ; 10.0.0.0/8 ; 169.254.0.0/16 ; 255.255.255.255 ; ::/128 ; ::1/128 ; fc00::/7 ; fe80::/10 ; 100::/64
.endif

Теперь сам роутер

Лучше использует функции ручной маршрутизации exim. Позволяет указать несколько серверов с разными портами и т. д. Используйте адрес_данных, чтобы получить все данные из файла за один раз, а не при поиске нескольких файлов:

      .ifdef SMARTHOST_AUTH
# Route some senders to use different outgoing smarthost instead 
# of direct sending. Lookup from SMARTHOST_AUTH file:

r_sendbysmarthost:
        debug_print = "R: $router_name for $local_part@$domain"
        driver = manualroute
        domains = ! +local_domains
        condition = ${lookup{$sender_address_domain}partial-lsearch{SMARTHOST_AUTH}{true}{false}}
        address_data = ${lookup{$sender_address_domain}partial-lsearch{SMARTHOST_AUTH}}
        ignore_target_hosts = ROUTER_DNSLOOKUP_IGNORE_TARGET_HOSTS
        transport = t_sendbysmarthost
        route_data = <,${extract{smtp}{$address_data}}
        host_find_failed = ignore
        host_all_ignored = defer
        hosts_randomize = true
        # remove previous Received headers for privacy if needed:
        headers_remove = Received
        # cPanel requirement:
        # headers_add = "${perl{mailtrapheaders}}"
        more = no
.endif

Транспорт

Я упростил это, так что он просто настраивает порт smtp и требования аутентификации. По умолчанию используется порт 587, но маршрутизатор exim позволяет при необходимости переопределить его в файле для каждого сервера.

hosts_require_authиhosts_require_tlsпредставляют собой списки хостов, и при использовании были проблемы с адресами IPv6.$host_addressи двоеточия. (Адреса IPv6 содержат двоеточия, и это нарушает списки хостов, разделенных двоеточиями. Мы могли бы это исправить, но поскольку маршрутизатор уже решил использовать этот транспорт, мы можем просто указать здесь «*».)

      t_sendbysmarthost:
        debug_print = "T: $transport_name for $local_part@$domain"
        driver = smtp
        port = 587
        connect_timeout = 30s
        hosts_require_auth = *
        hosts_require_tls = *

Авторизация

Добавлено условие, предотвращающее использование exim неправильного аутентификатора, если настроено более одного входа в систему. Использовать$address_data(настроено маршрутизатором), а не выполнять дополнительные поиски файлов.

      .ifdef SMARTHOST_AUTH
auth_smarthost:
  driver = plaintext
  public_name = LOGIN
  client_condition = "${extract{smtp}{$address_data}{true}{false}}"
  hide client_send = ": ${extract{user}{$address_data}}:${extract{pass}{$address_data}}"
.endif

Файл поиска

Файл определенSMARTHOST_AUTH(например/etc/exim4/exim_smarthosts)

Примеры:

      # Simple - Select a single server:
domain1.com: user=username@domain1.com pass=PASSWORD_HERE smtp=smtp.domain1.com

# List of servers to try (separated with ",")
domain2.com: user=username@domain2.com pass=PASSWORD_HERE smtp=server1.domain2.com,server2.domain2.com

# Subdomain, give a list of servers, specify non-standard port (overrides transport)
*.domain3.com: user=username@domain3.com pass=PASSWORD_HERE smtp=weirdserver1.domain3.com:444,weirdserver3.domain3.com:587

# List of servers, grouped primary, secondary MX-like behaviour. 
# Separate groups with "+".
domain4.com: user=username@domain4.com pass=PASSWORD_HERE smtp=smtp1.domain4.com,smtp2.domain4.com,smtp3.domain4.com+backup1.domain4.com,backup2.domain4.com

РЕДАКТИРОВАТЬ: Если какое-либо из значений содержит пробелы, они должны быть заключены в двойные кавычки, а любые значения, заключенные в двойные кавычки, подлежат экранирующей обработке.

Не ставьте пробелы вокруг разделителей, например «,» или «+».

Рекомендации

  1. Exim: расширение строк
  2. Exim: поиск файлов и баз данных
  3. Exim: общие параметры для маршрутизаторов
  4. Exim: маршрутизация вручную
  5. Exim: smtp-транспорт
Другие вопросы по тегам