Как исправить Postfix '' Relay Access Denied '?

54

Сегодня утром, чтобы исправить проблему с несоответствием имени в сертификате безопасности, я выполнил рекомендуемые шаги из Как исправить SSL почтового сервера? , но теперь при попытке отправить электронное письмо от клиента (в данном случае это Windows Mail), я получаю следующую ошибку.

Отклоненный адрес электронной почты был «email@gmail.com». Тема «Это тест. ', Учетная запись:' mail.domain.com ', Сервер:' mail.domain.com ', Протокол: SMTP, Ответ сервера:' 554 5.7.1: Доступ к ретрансляции запрещен ', Порт: 25, Безопасный (SSL): Нет , Ошибка сервера: 554, номер ошибки: 0x800CCC79

Изменить : я все еще могу получать электронные письма из этой учетной записи, и я отправляю электронные письма в другие учетные записи в том же домене. Я просто не могу отправлять электронные письма получателям за пределами нашего домена.

Я попытался отключить TLS, но без кубиков, я все еще получаю ту же ошибку.

Когда я проверяю файл mail.log, я вижу следующее.

Jul 18 08:24:41 company imapd: LOGIN, user=user_name@domain.com, ip=[::ffff:111.111.11.11], protocol=IMAP
Jul 18 08:24:42 company imapd: DISCONNECTED, user=user_name@domain.com, ip=[::ffff:111.111.11.11], headers=0, body=0, rcvd=83, sent=409, time=1
Jul 18 08:25:19 company postfix/smtpd[29282]: connect from company.university.edu[111.111.11.11]
Jul 18 08:25:19 company postfix/smtpd[29282]: NOQUEUE: reject: RCPT from company.university.edu[111.111.11.11]: 554 5.7.1 <email@gmail.com>: Relay access denied; from=<user_name@domain.com> to=<email@gmail.com> proto=ESMTP helo=<UserPC>
Jul 18 08:25:19 company postfix/smtpd[29282]: disconnect from company.university.edu[111.111.11.11]
Jul 18 08:25:22 company imapd: DISCONNECTED, user=user_name@domain.com, ip=[::ffff:111.111.11.11], headers=13, body=142579, rcvd=3289, sent=215892, time=79

Файл main.cfвыглядит так:

#
# Postfix MTA Manager Main Configuration File;
#
# Please do NOT edit this file manually;
#

#
# Postfix directory settings; These are critical for normal Postfix MTA functionallity;
#

command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix

#
# Some common configuration parameters;
#

inet_interfaces = all
mynetworks = 127.0.0.0/8
mynetworks_style = host

myhostname = mail.domain.com
mydomain = domain.com
myorigin = $mydomain

smtpd_banner = $myhostname ESMTP 2.4.7.1 (Debian/GNU)
setgid_group = postdrop

#
# Receiving messages parameters;
#

mydestination = localhost, company 
append_dot_mydomain = no
append_at_myorigin = yes
transport_maps = mysql:/etc/postfix/transport.cf

#
# Delivering local messages parameters;
#

mail_spool_directory = /var/spool/mail
mailbox_size_limit = 0
mailbox_command = procmail -a "$EXTENSION"

biff = no

alias_database = hash:/etc/aliases

local_recipient_maps =

#
# Delivering virtual messages parameters;
#
virtual_mailbox_maps=mysql:/etc/postfix/mysql_virt.cf
virtual_uid_maps=mysql:/etc/postfix/uids.cf
virtual_gid_maps=mysql:/etc/postfix/gids.cf
virtual_mailbox_base=/usr/local/virtual
virtual_maps=mysql:/etc/postfix/virtual.cf
virtual_mailbox_domains=mysql:/etc/postfix/virtual_domains.cf


#
# SASL paramters;
#
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s

smtp_tls_CAfile = /etc/postfix/ssl/smptd.pem
smtp_tls_cert_file = /etc/postfix/ssl/smptd.crt
smtp_tls_key_file = /etc/postfix/ssl/smptd.key

smtpd_tls_CAfile = /etc/postfix/ssl/smptd.pem
smtpd_tls_cert_file = /etc/postfix/ssl/smptd.crt
smtpd_tls_key_file = /etc/postfix/ssl/smptd.key

smtpd_sasl_auth_enable = yes

smtpd_sasl_security_options = noanonymous

smtpd_sasl_local_domain =

broken_sasl_auth_clients = yes

smtpd_sender_restrictions =
        permit_sasl_authenticated
        permit_mynetworks

smtpd_recipient_restrictions =
        permit_sasl_authenticated
        check_recipient_access hash:/etc/postfix/filtered_domains
        permit_mynetworks
        reject_unauth_destination

Как примечание, мой работодатель хочет иметь возможность отправлять электронные письма от клиентов (Thunderbird и Outlook) как внутри нашей локальной сети, так и за ее пределами.

Ной Гудрич
источник
6
Почему вы не принимаете?
Ладья

Ответы:

58

TLS просто включает шифрование в сеансе smtp и напрямую не влияет на то, разрешено ли Postfix передавать сообщение.

Сообщение об отказе в ретрансляции происходит из-за несоответствия правилам smtpd_recipient_restrictions. Чтобы разрешить прохождение сообщения, должно быть выполнено одно из этих условий:

smtpd_recipient_restrictions =
    permit_sasl_authenticated
    check_recipient_access hash:/etc/postfix/filtered_domains
    permit_mynetworks
    reject_unauth_destination

Чтобы объяснить эти правила:

permit_sasl_authenticated

разрешает аутентифицированных отправителей через SASL. Это будет необходимо для аутентификации пользователей за пределами вашей сети, которые обычно блокируются.

check_recipient_access

Это заставит postfix искать в / etc / postfix / Filter_domains правила, основанные на адресе получателя. (Судя по имени файла в имени файла, он, вероятно, просто блокирует определенные домены ... Проверьте, указан ли там gmail.com?)

permit_mynetworks

Это позволит узлам по IP-адресу соответствовать диапазонам IP, указанным в $ mynetworks. В файле main.cf, который вы разместили, $ mynetworks был установлен на 127.0.0.1, поэтому он будет ретранслировать только электронные письма, сгенерированные самим сервером.

В зависимости от этой конфигурации ваш почтовый клиент должен будет использовать аутентификацию SMTP, прежде чем ему будет разрешено ретранслировать сообщения. Я не уверен, какую базу данных использует SASL. Это указано в /usr/lib/sasl2/smtpd.conf. Предположительно, он также использует ту же базу данных, что и ваши виртуальные почтовые ящики, поэтому вы должны иметь возможность включить аутентификацию SMTP в своем почтовом клиенте и быть полностью готовым.

Brandon
источник
14
smtpd_use_tls = no

Вы отключили TLS, поэтому вам необходимо авторизовать вашу локальную сеть, добавив ее в mynetworks. Например,

mynetworks = 192.168.1.0/24 127.0.0.0/8

Это исправит отправку только из вашей локальной сети. Чтобы отправлять электронную почту из-за пределов вашей локальной сети, вам нужно, чтобы работала аутентификация TLS.

PGS
источник
Я установил smtpd_use_tls = yes, потому что мы должны иметь возможность отправлять электронную почту извне сети. Однако проблема сохраняется.
Ной Гудрич
Увеличьте smtpd_tls_loglevel до 3 и посмотрите, появится ли что-нибудь интересное в журналах (и не забудьте сбросить его до 1 или 0, когда вы закончите).
pgs
Также попробуйте установить для параметра smtp_use_tls значение no (для отправки внешней электронной почты). См. Postfix.org/postconf.5.html#smtp_use_tls
pgs,
1
-1 потому что не каждый может отключить тлс.
jgifford25
3
Я не говорю, что он должен отключить TLS; Я говорю, что, поскольку он уже отключил его, ему нужно настроить mynetworks. И что полное решение состоит в том, чтобы заставить TLS работать снова.
pgs
6

Я думаю, что вы пропустите свой domain.com в моем назначении, потому что по умолчанию relay_domains=$mydestination, так что вы можете добавить свою конфигурацию строки:

mydestinations = $mydomain, $myhostname, localhost, localhost.localdomain

или же:

relay_domains = $mydomain

Не забывайте перезапускать postfix server ( service postfix restart) каждый раз, когда вы редактируете файл postfix conf.

Wtower
источник
+1 для добавления «localhost, localhost.localdomain» в список хостов (часто проблема в некоторых системах, хотя неясно, почему это не проблема в других)
Iain Collins
2

У меня была та же проблема в Outlook (с dovecote и postfix backend), и я потратил два дня на поиски решения и настройку файлов конфигурации. Все, что мне нужно было сделать, это проверить «Сервер требует аутентификации» на вкладке «Исходящие» в настройках почты в outlook, и мои сообщения теперь отправляются в gmail. Подробную инструкцию о том, как найти настройки, смотрите здесь http://support.bluetie.com/node/440 .

Dee
источник
2

Эта проблема беспокоила меня некоторое время. Я пытался подключиться с server1.domain.com к server2.domain.com.

Вот как я это исправил -

#/etc/postfix/main.cf
mydomain = server1.domain.com
myhostname = $mydomain
virtual_alias_maps = hash:/etc/postfix/virtual
alias_database = hash:/etc/postfix/virtual
myorigin = /etc/mailname
mydestination = localhost.localdomain localhost $mydomain
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

Вам также необходимо убедиться, что вы правильно установили / etc / hosts и / etc / hostname и убедитесь, что после сетевых изменений вы выполните следующее:

sudo service networking restart

и следующее после постфикса изменений конфигурации

sudo service postfix reload
A23
источник
0

Для меня: я должен был добавить localhostк mynetworksнезависимо от того , 127.0.0.0/8был уже там. Итак, теперь это выглядит так:

mynetworks = 1.1.1.1/32, 127.0.0.0/8, localhost

Putnik
источник