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

Доступ к ретранслятору PostFix запрещен - непонятно почему

Я прочитал МНОГО мест, где люди пытались решить эту проблему, и ни одно из них не помогло мне. У меня есть следующий сценарий

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

msg = MIMEMultipart('alternative')
msg['Subject'] = "[Test Email]"
msg['From'] = "email@domain.biz"
msg['To'] = "email@domain.com"

text = "sample Email"
html = "<html><body>sampleEmail</body></html>"
textPart = MIMEText(text, 'plain')
htmlPart = MIMEText(html, 'html')
msg.attach(textPart)
msg.attach(htmlPart)

s = smtplib.SMTP("localhost")
s.set_debuglevel(1)
s.sendmail("email@domain.biz","email@domain.com", msg.as_string())
s.quit()

Когда я запускаю сценарий на сервере a (назовите его domain.com), все работает, как ожидалось. Когда я запускаю сценарий на сервере b (назовите его domain.biz), я получаю отказ в ретрансляционном доступе. На сервере b я попытался настроить свой собственный экземпляр postfix для domain.biz (и безуспешно), и я мог что-то испортить.

Все, что я прочитал, говорит о том, что локальный SMTP-сервер не позволяет ретранслировать на (или от?) Этот адрес. Кто-то посоветовал мне убедиться smtpd_recipient_restrictions включает permit_mynetworks:

sudo postconf smtpd_recipient_restrictions

который напечатал:

smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination

Так что все выглядит хорошо (может быть проблема в reject_unauth_destination?).

Затем они сказали, что убедитесь, что IP-адрес включен в mynetworks, поэтому:

sudo postconf mynetworks

который печатает:

mynetworks = 10.0.0.0/16, 192.168.1.0/24, 127.0.0.0/8, 55.55.55.0/24, .domain.com, .domain.biz, .ip-55-55-55-55.ip.secureserver.net

Как видите, я добавил все домены, которые только мог придумать. (примечание 55.55.55.55 не настоящий IP).

В сообщении об ошибке говорится:

python2.7 emailTest.py
send: 'ehlo localhost.localdomain\r\n'
reply: '250-domain.biz\r\n'
reply: '250-PIPELINING\r\n'
reply: '250-SIZE 10240000\r\n'
reply: '250-VRFY\r\n'
reply: '250-ETRN\r\n'
reply: '250-ENHANCEDSTATUSCODES\r\n'
reply: '250-8BITMIME\r\n'
reply: '250 DSN\r\n'
reply: retcode (250); Msg: domain.biz
PIPELINING
SIZE 10240000
VRFY
ETRN
ENHANCEDSTATUSCODES
8BITMIME
DSN
send: 'mail FROM:<email@domain.biz> size=565\r\n'
reply: '250 2.1.0 Ok\r\n'
reply: retcode (250); Msg: 2.1.0 Ok
send: 'rcpt TO:<email@domain.com>\r\n'
reply: '554 5.7.1 <email@domain.com>: Relay access denied\r\n'
reply: retcode (554); Msg: 5.7.1 <email@domain.com>: Relay access denied
send: 'rset\r\n'
reply: '250 2.0.0 Ok\r\n'
reply: retcode (250); Msg: 2.0.0 Ok
Traceback (most recent call last):
  File "emailTest.py", line 122, in <module>
    s.sendmail("email@domain.biz","email@domain.com", msg.as_string())
  File "/usr/local/lib/python2.7/smtplib.py", line 734, in sendmail
    raise SMTPRecipientsRefused(senderrs)
smtplib.SMTPRecipientsRefused: {'email@domain.com': (554, '5.7.1 <email@domain.com>: Relay access denied')}

Дополнительная информация main.cf:

> sudo postconf mydestination
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, mail.$mydomain, www.$mydomain, ftp.$mydomain
> sudo postconf relay_domains
relay_domains = $mydestination
> sudo postconf mynetworks_style
mynetworks_style = subnet
> sudo postconf relayhost
relayhost = 
>sudo postconf mydomain
mydomain = domain.biz

Я также пробовал:

sudo postconf relayhost
relayhost = [mail.$mydomain]

Журнал Postfix говорит:

> sudo tail -10 /var/log/maillog
...
Jan 21 12:26:36 ip-50-62-42-49 postfix/smtpd[3875]: connect from localhost[::1]
Jan 21 12:26:36 ip-50-62-42-49 postfix/trivial-rewrite[3877]: warning: do not list domain domain.biz in BOTH mydestination and virtual_alias_domains
Jan 21 12:26:36 ip-50-62-42-49 postfix/smtpd[3875]: NOQUEUE: reject: RCPT from localhost[::1]: 554 5.7.1 <email@domain.com>: Relay access denied; from=<email@domain.biz> to=<email@domain.com> proto=ESMTP helo=<localhost.localdomain>
Jan 21 12:26:36 ip-50-62-42-49 postfix/smtpd[3875]: lost connection after RSET from localhost[::1]
Jan 21 12:26:36 ip-50-62-42-49 postfix/smtpd[3875]: disconnect from localhost[::1]

sudo postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 1
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
masquerade_domains = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, mail.$mydomain, www.$mydomain, ftp.$mydomain
mydomain = domain.biz
myhostname = domain.biz
mynetworks = 10.0.0.0/16, 192.168.1.0/24, 127.0.0.0/8, 55.55.55.0/24, .domain.com, .domain.biz, .ip-55-55-55-55.ip.secureserver.net
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
relayhost = [mail.$mydomain]
sample_directory = /usr/share/doc/postfix-2.6.6/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
virtual_alias_domains = domain.biz
virtual_alias_maps = hash:/etc/postfix/virtual

Я изменил IP-адреса и ip-адреса.

ОБНОВИТЬ:

После нескольких недель попыток заставить это работать и благодаря всеобщей помощи я нашел решение. Я пытался использовать localhost в качестве relayhost, но поскольку это сервер, размещенный Godaddy, все реле должны проходить через назначенный relayhost. Все, что мне нужно было сделать, это изменить расположение SMTP. Строка теперь такая:

s = smtplib.SMTP("dedrelay.secureserver.net")

Есть несколько областей, которые вам (возможно) потребуется настроить в /etc/postfix/main.cf. Если вы, например, используете smtp-сервер вашего веб-хоста в качестве ретранслятора, вам следует поискать раздел с «relayhost =».

В соответствии с Какой способ доставки: прямой или косвенный:

По умолчанию Postfix пытается доставлять почту напрямую в Интернет. В зависимости от ваших местных условий это может быть невозможно или нежелательно. Например, ваша система может быть отключена в нерабочее время, может быть защищена брандмауэром или может быть подключена через поставщика, который не разрешает прямую почтовую рассылку в Интернет. В таких случаях вам необходимо настроить Postfix для косвенной доставки почты через хост-ретранслятор.

Примеры (укажите только один из следующих):

/etc/postfix/main.cf:

relayhost =                   (default: direct delivery to Internet)
relayhost = $mydomain         (deliver via local mailhub)
relayhost = [mail.$mydomain]  (deliver via local mailhub)
relayhost = [mail.isp.tld]    (deliver via provider mailhub)

Форма, заключенная в [], исключает поиск DNS MX. Не волнуйтесь, если вы не знаете, что это значит. Просто не забудьте указать [] вокруг имени хоста mailhub, которое вам дал ваш провайдер, иначе почта может быть доставлена ​​неправильно.

В вашей конфигурации по умолчанию должно быть что-то вроде указанного выше. Выберите допустимую конфигурацию на основе ваших настроек и закомментируйте остальные.

Я также предлагаю просмотреть другие разделы, касающиеся реле и конфигурации сети, чтобы узнать, соответствуют ли ваши настройки спецификации: Базовая конфигурация Postfix