Назад | Перейти на главную страницу

Как настроить отправку LAN-сервера через smarthost?

У меня есть сервер в моей локальной сети runnnig exim4, настроенный на использование смарт-хоста в глобальной сети следующим образом:

disable_ipv6='true'
dc_eximconfig_configtype='smarthost'
dc_other_hostnames='hostname.mydomain.com'
dc_local_interfaces='127.0.0.1'
dc_readhost='mydomain.com'
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='smtp.mydomain.com::587'
CFILEMODE='644'
dc_use_split_config='true'
dc_hide_mailname='true'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool

Если я использую hostname -f на этом сервере, я получаю hostname.mydomain.com. «hostname» не находится в общедоступном DNS для mydomain.com.

Если я отправлю тестовое письмо с помощью сваков:

swaks --tls --auth --to me@mydomain.com --server smtp.mydomain.com:587

он отправляет как username@hostname.mydomain.com, а smtp.mydomain.com говорит:

<~  235 2.7.0 Authentication successful
 ~> MAIL FROM:<username@hostname.mydomain.com>
<~  250 2.1.0 Ok
 ~> RCPT TO:<me@mydomain.com>
<~* 450 4.1.8 <username@hostname.mydomain.com>: Sender address rejected: Domain not found
 ~> QUIT
<~  221 2.0.0 Bye

Но если я попробую --from username@mydomain.com, тогда все в порядке.

Как ни странно, если я попробую использовать bsd-mailx для отправки почты:

mail me@mydomain.com

smtp.mydomain.com отклоняет его с другой ошибкой:

Recipient address rejected: Access denied

Я не уверен, какая часть цепочки вызывает проблему. Казалось бы, самое простое решение - убедиться, что почта отправляется с @ mydomain.com, а не с @ hostname.mydomain.com *, поскольку это то, что делают все другие почтовые клиенты, отправляющие на этот смарт-хост (в том же домене, что и о сервере тоже идет речь) - а как?

*Хотя получатель ошибка адреса отклонена странная

Здесь недостает того, что у Exim есть таблица перезаписи адресов:

/etc/email-addresses

Этот файл позволяет вам указать, какие адреса электронной почты вы хотите, чтобы каждый пользователь системы использовал в своем заголовке From:, в противном случае Exim будет использовать fqdn хоста в качестве домена (часть, следующая за @), из-за чего мой смарт-хост отвергайте их.

Поэтому я добавил в файл следующие строки:

root: username@mydomain.com
username: username@mydomain.com

Я также сделал dc_other_hostnames пустым и dc_hide_mailname = 'false', чтобы моя конфигурация Exim выглядела так:

disable_ipv6='true'
dc_eximconfig_configtype='smarthost'
dc_other_hostnames=''
dc_local_interfaces='127.0.0.1'
dc_readhost='mydomain.com'
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost='smtp.mydomain::587'
CFILEMODE='644'
dc_use_split_config='true'
dc_hide_mailname='false'
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'

Также обратите внимание, что там, где записи DNS / PTR разрешаются в разные имена хостов для smarthost (как в моем случае), вы должны поместить строку в свой /ext/exim/passwd.client для каждого из них, поскольку Exim может использовать канонический.

Затем я запустил update-exim4.conf и перезапустил Exim.