У меня есть виртуальный сервер, на котором работает Debian Stretch, и я намерен стать почтовым обменом (и, возможно, веб-сервером) только для нескольких личных доменных имен. (В настоящее время 1, хотя еще 2 в ближайшее время.) Я использую Exim в качестве почтового обмена и Dovecot для виртуальных пользователей для доступа к почтовым ящикам.

Я использую пакет exim4-daemon-heavy с комбинированным форматом конфигурации, который хранится в /etc/exim4/exim4.conf.template . Я также использовал это руководство в качестве основы для настройки маршрутизации exim для виртуальных пользователей Dovecot, с некоторыми адаптациями для того, что я хочу (мультидоменный) и для его работы в Debian Stretch.

Мои намерения в отношении каждого доменного имени, для которого я хочу разместить почту / Интернет:

  • Иметь единого системного пользователя.
  • Каждый домен хранит все (почта и Интернет) в /home/{domain} .
  • Почта в /home/{domain}/mail .
  • Веб в /home/{domain}/public_html .
  • Каждый почтовый ящик в домене находится в /home/{domain}/mail/{user} .
  • Каждый почтовый ящик использует формат MAILDIR, а не MBOX.
  • Нет записей о системных пользователях для каждого виртуального почтового ящика, Dovecot будет отвечать за ведение списка виртуальных пользователей.

Вы, наверное, заметили, что это немного похоже на то, как cPanel/WHM работает, так почему бы мне просто не использовать это? Слишком дорого для того, что является только персональным VPS, размещенным в качестве виртуального сервера у меня дома. (Кроме того, мне очень нравится дистрибутив Debian, а не RHEL, который не поддерживает cPanel/WHM.)

Поначалу и Exim, и Dovecot отлично справлялись со своей работой. Я могу отправлять / получать (большинство) электронных писем без каких-либо проблем. Я также поставил Roundcube для доступа к веб-почте, никаких проблем там нет.

Однако когда exim получает почту от внешних ретрансляторов для определенных адресов электронной почты, он отказывается от почты с "Unrouteable address". Это может быть просто конфликт конфигурации.

Сценарий таков:

  • Полное доменное имя VPS соответствует первому имени виртуального домена, для которого в данный момент размещается почта / Интернет. (Давайте назовем это «example.com».)
  • Почтовый ящик, который полностью работает (и я замечаю больше всего), - это мой собственный почтовый ящик "adam@example.com".
  • У меня есть системный пользователь "Адам", который я использую для управления через SSH. (Это имеет разрешение sudo.)
  • Существует почтовый ящик для системных предупреждений «server@example.com», для которого я предназначался для получения писем от CRON, CSF+LFD, Webmin и т.д. (Псевдоним "root" сопоставлен с этим адресом электронной почты.)

Что работает без проблем:

  • IMAP/SMTP доступ к "adam@example.com".
  • IMAP/SMTP доступ к "server@example.com".
  • Почта из виртуального почтового ящика "adam@example.com" на "server@example.com".
  • Почта из виртуального почтового ящика «server@example.com» на «adam@example.com».
  • Отправьте письмо с псевдонимом, например «root@example.com» или «webmin@example.com», на «server@example.com».
  • Письмо с "where-else@example.org "на" adam@example.com ".
  • Почта, пересылаемая с почтового ящика, размещенного интернет-провайдером "adam@my-isp.example.org" на "adam@example.com".

Вещи, которые не работают:

  • Письмо с «where-else@example.org »на« server@example.com »отклоняется с" Unrouteable address ".
  • Почта, пересылаемая с почтового ящика, размещенного у интернет-провайдера «server@my-isp.example.org» на «server@example.com», отклоняется с "Unrouteable address".

Пример строки из журнала отклонений exim:

H=some-relay.my-isp.example.org [a.b.c.d] X=TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128 CV=no F=<anywhere-else@example.org> rejected RCPT <server@example.com>: Unrouteable address

Я полагаю, что проблема может быть в том, что exim не знает, куда отправлять почту с внешнего ретранслятора, или Dovecot не верит, что почтовый ящик "server@example.com" существует. Я считаю, что последнему трудно поверить, так как почта от «adam@example.com» прекрасно с этим справляется, и это также использовало бы список виртуальных пользователей Dovecot.

Вот конфигурация маршрутизатора Exim для Dovecot:

#####################################################
### router/299_exim4-config_dovecot_router
#####################################################

### router/299_exim4-config_dovecot_router
#################################

# This router delivers mail to any dovecot virtual
# user who has a directory under /home/$domain/mail
# Place after remote router and before localuser router
# + addressing support requires uncommenting
dovecot_router:
  driver = accept
  #local_part_suffix = +*
  #local_part_suffix_optional
  require_files = +/home/$domain/mail/$local_part/
  transport = dovecot_transport

#####################################################
### end router/299_exim4-config_dovecot_router
#####################################################

Поскольку я думал, что существует возможный конфликт с router/300_exim4-config_real_local сидящим с 300-м приоритетом, я переместил 299_exim4-config_dovecot_router с его оригинального приоритета 320 до 299, но это не имело никакого значения. (Я подумал, что, возможно, это заставит exim попытаться отправить письмо Dovecot, прежде чем пытаться передать его в почтовый ящик пользователя системы.)

Вот транспортная конфигурация для Dovecot:

#####################################################
### transport/40_exim4-config_dovecot_transport
#####################################################

# Transport to send any mail for virtual dovecot users to correct maildir box
dovecot_transport:
  debug_print = "T: dovecot_virtual appendfile for $local_part@$domain"
  driver = appendfile
  create_directory
  directory_mode = 0750
  directory = /home/$domain/mail/$local_part
  maildir_format = true
  delivery_date_add
  envelope_to_add
  return_path_add
  user = $domain
  group = $domain
  mode = 0640
  mode_fail_narrower = false

#####################################################
### end transport/40_exim4-config_dovecot_transport
#####################################################

Я не думаю, что это будет так актуально, но вот конфигурация для аутентификации Exim SMTP-входов через Dovecot:

# Authenticate against Dovecot
dovecot_plain:
  driver = dovecot
  public_name = PLAIN
  server_socket = /var/run/dovecot/auth-client
  server_set_id = $auth1

dovecot_login:
  driver = dovecot
  public_name = LOGIN
  server_socket = /var/run/dovecot/auth-client
  server_set_id = $auth1

Обратная трассировка exim из оболочки на "example.com":

# exim -bt server@example.com
server@example.com
  router = dovecot_router, transport = dovecot_transport

Обратный путь exim до оболочки из несвязанной системы Debian, которая использует exim в спутниковом режиме:

# exim -bt server@example.com
R: smarthost for server@example.com
server@example.com
  router = smarthost, transport = remote_smtp_smarthost
  host mailhost.my-isp.example.org [a.b.c.d] port=587
  host mailhost.my-isp.example.org [a.b.c.e] port=587

Обратные следы были одинаковыми при запросах «adam@example.com» и «server@example.com» из обеих систем.

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

Я ценю это проблема с сервером, а не проблема конечного пользователя. Первоначально я спрашивал об этом в Server Fault, но это не считалось "бизнесом" для этого сообщества.

Спасибо за прочтение. :)

0