PostFix Relay Access Denied - não é óbvio porque

1

Eu li MUITOS lugares de pessoas tentando resolver este problema e nenhum deles trabalhou para mim. Eu tenho o seguinte script

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

msg = MIMEMultipart('alternative')
msg['Subject'] = "[Test Email]"
msg['From'] = "[email protected]"
msg['To'] = "[email protected]"

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 protected]","[email protected]", msg.as_string())
s.quit()

Quando executo o script no servidor a (chame-o de domain.com), tudo funciona conforme o esperado. Quando executo o script no servidor b (chame-o de domain.biz), recebo o Relay Access Denied. No servidor b eu tentei configurar minha própria instância de postfix para domain.biz (e não foi totalmente bem-sucedida), e algo pode estar errado com isso.

Tudo o que li diz que o servidor SMTP local não está permitindo a retransmissão para (ou de?) esse endereço. Alguém sugeriu que eu tenha certeza de que smtpd_recipient_restrictions inclui permit_mynetworks :

sudo postconf smtpd_recipient_restrictions

impresso:

smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination

Isso parece bom (o problema poderia ser rejeitar_valor_destino?).

Então eles disseram que o endereço IP está incluído em mynetworks, então:

sudo postconf mynetworks

quais impressões:

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

Como você pode ver, adicionei todos os domínios em que consegui pensar. (nota 55.55.55.55 não é o IP real).

A mensagem de erro diz:

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 protected]> size=565\r\n'
reply: '250 2.1.0 Ok\r\n'
reply: retcode (250); Msg: 2.1.0 Ok
send: 'rcpt TO:<[email protected]>\r\n'
reply: '554 5.7.1 <[email protected]>: Relay access denied\r\n'
reply: retcode (554); Msg: 5.7.1 <[email protected]>: 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 protected]","[email protected]", msg.as_string())
  File "/usr/local/lib/python2.7/smtplib.py", line 734, in sendmail
    raise SMTPRecipientsRefused(senderrs)
smtplib.SMTPRecipientsRefused: {'[email protected]': (554, '5.7.1 <[email protected]>: Relay access denied')}

Informações adicionais do 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

Eu também tentei:

sudo postconf relayhost
relayhost = [mail.$mydomain]

O log do postfix diz:

> 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 protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> 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

Alterei os endereços IP e os endereços IP.

ATUALIZAÇÃO:

Após semanas de tentativas de trabalhar, e graças à ajuda de todos, encontrei a solução. Eu estava tentando usar localhost como o relayhost, mas como esse é um servidor hospedado por godaddy, todos os relés devem passar por um relayhost designado. Tudo o que eu precisava fazer era mudar a localização do SMTP. A linha é agora:

s = smtplib.SMTP("dedrelay.secureserver.net")
    
por ajon 21.01.2014 / 19:44

1 resposta

1

Existem poucas áreas que você pode precisar configurar no /etc/postfix/main.cf. Se você estiver usando o servidor smtp do seu host como retransmissão, por exemplo, você deve procurar a seção "relayhost=".

De acordo com Qual método de entrega: direta ou indireta :

By default, Postfix tries to deliver mail directly to the Internet. Depending on your local conditions this may not be possible or desirable. For example, your system may be turned off outside office hours, it may be behind a firewall, or it may be connected via a provider who does not allow direct mail to the Internet. In those cases you need to configure Postfix to deliver mail indirectly via a relay host.

Examples (specify only one of the following):

/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)

The form enclosed with [ ] eliminates DNS MX lookups. Don't worry if you don't know what that means. Just be sure to specify the [ ] around the mailhub hostname that your ISP gave to you, otherwise mail may be mis-delivered.

Sua configuração padrão deve ter algo parecido com o acima. Escolha uma configuração válida com base na sua configuração e comente as outras.

Também sugiro que você consulte outras seções referentes a retransmissões e configuração de rede para ver se sua configuração está de acordo com as especificações: Configuração básica do Postfix

    
por 21.01.2014 / 21:06