Пытаюсь разобраться в различных элементах управления ретрансляцией в конфигурации exim4.
Я могу отправлять электронную почту со своего сервера, я могу отправлять электронную почту из дома и с работы (потому что я явно добавил для этого подходящие сетевые блоки), но я не могу получить написанную мной программу для отправки электронной почты на адрес googlemail - я получаю реле 550 не разрешено.
Я стремлюсь к тому, чтобы иметь возможность отправлять электронную почту на любой (действующий) адрес электронной почты с любого сервера, при условии, что я предоставлю подходящее имя пользователя и пароль. Я подозреваю, что здесь играет роль SASL, но в настоящее время я не понимаю, для каких доменов я могу ретранслировать, и для компьютеров, на которые я могу ретранслировать.
Кто-нибудь сможет разгадать это?
[ПРИМЕЧАНИЕ: коробка Ubuntu, поэтому разделенная конфигурация в стиле Debian для exim4]
Это похоже на мою настройку exim. Изнутри своей сети я могу отправлять электронную почту в любой домен, но из-за пределов сети единственная почта, на которую exim будет доставляться, - это мой локальный домен, если только пользователь сначала аутентифицируется в eximʻe. Таким образом, я могу отправлять почту через свой почтовый сервер из любой точки мира, если я сначала аутентифицирую.
Критические разделы моей конфигурации:
domainlist local_domains = @ : example.com
domainlist relay_to_domains =
hostlist relay_from_hosts = 127.0.0.1 : 192.168.0.0/24 : 2001:111:1111::/64
Это в основном устанавливает мой локальный домен, для которого exim знает, что это «дом» для example.com
. Он также устанавливает диапазоны подсетей, для которых exim разрешено ретранслировать любую почту. relay_to_domains
пусто, потому что нет других доменов, на которые я буду ретранслировать, кроме example.com
.
tls_advertise_hosts = *
Я рекламирую доступность TLS, чтобы любой клиент мог аутентифицироваться через TLS.
acl_check_rcpt:
[...]
accept hosts = +relay_from_hosts
accept authenticated = *
require message = relay not permitted
domains = +local_domains : +relay_to_domains
Этот acl проверяет, куда идет почта и кто ее отправил, прежде чем принять решение о ретрансляции. Первая строка передает почту от хостов в ранее определенной внутренней сети. Вторая строка передает почту от любого аутентифицированного пользователя. Третий и четвертый требуют, чтобы, если какое-либо предыдущее условие не было выполнено, ретранслировать только мои локальные домены.
Последний раздел - это аутентификаторы, так что exim знает, как выглядит аутентифицированный пользователь. Мой выглядит так:
plain_saslauthd_server:
driver = plaintext
public_name = PLAIN
server_condition = ${if saslauthd{{$auth2}{$auth3}}{1}{0}}
server_set_id = $auth2
server_prompts = :
login_saslauthd_server:
driver = plaintext
public_name = LOGIN
server_prompts = "Username:: : Password::"
# don't send system passwords over unencrypted connections
server_condition = ${if saslauthd{{$auth1}{$auth2}}{1}{0}}
server_set_id = $auth1
Очевидно, для этого требуется сборка exim, в которой скомпилирована возможность sasl, а также рабочий демон SASL в системе. Я использую Cyrus SASLD и по памяти довольно просто установить и забыть.
На самом деле я запускаю это на OpenBSD, поэтому не уверен, как эти шаги точно будут переведены в систему Ubuntu с разделенной конфигурацией. Однако этого должно быть достаточно, чтобы вы начали :)