У меня есть виртуальный сервер, на котором работает 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, но это не считалось "бизнесом" для этого сообщества.
Спасибо за прочтение. :)