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.
- В 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 перезапускается.
- Создайте файл с именем "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 или приложения, выполните следующие действия.
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
РЕДАКТИРОВАТЬ: Если какое-либо из значений содержит пробелы, они должны быть заключены в двойные кавычки, а любые значения, заключенные в двойные кавычки, подлежат экранирующей обработке.
Не ставьте пробелы вокруг разделителей, например «,» или «+».