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

Как настроить exim4 для отправки электронной почты куда угодно, но только от авторизованных пользователей?

Пытаюсь разобраться в различных элементах управления ретрансляцией в конфигурации 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 с разделенной конфигурацией. Однако этого должно быть достаточно, чтобы вы начали :)