我在 CentOS (5.7) 上使用 Postfix (2.3.3)。现在,我的服务器似乎表现得像一个开放中继。如果我指定登录名,它工作正常,无论是非安全还是使用 TLS(然而 TLS 会提醒我证书无效,但我想我必须获得证书)。这就是我想要的,如果客户端不支持 TLS,则回退到非安全模式。
但是,如果我不提供任何登录,它似乎仍然会发送电子邮件。
这是我的 main.cf 配置文件:
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
myhostname = mail.valdron.ca
mydomain = valdron.ca
myorigin = $mydomain
mydestination = $myhostname, $mydomain
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.3.3/samples
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
virtual_alias_maps = hash:/etc/postfix/virtual
sender_bcc_maps = hash:/etc/postfix/bcc
mailbox_command = /usr/bin/procmail-wrapper -o -a $DOMAIN -d $LOGNAME
home_mailbox = Maildir/
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
broken_sasl_auth_clients = yes
smtpd_tls_key_file = /etc/pki/tls/private/mail.valdron.ca.key
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.valdron.ca.cert
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_session_cache_database = btree:/var/spool/postfix/smtpd_tls_cache
tls_random_source = dev:/dev/urandom
mailbox_size_limit = 0
notify_classes = bounce, delay, resource
smtpd_recipient_restrictions = reject_unauth_destination permit_sasl_authenticated permit_mynetworks check_relay_domains
smtpd_tls_security_level = may
此外,与第一个问题无关的是,iPhone 用户会收到以下错误(法语翻译):“由于不允许中继,服务器拒绝收件人”。我没有 iPhone 可以测试。ISP 是否可能像许多 ISP 一样阻止了端口 25 邮件服务器?
答案1
尝试将 smtpd_recipient_restrictions 行更改为以下内容:
smtpd_recipient_restrictions = reject_unauth_destination, permit_sasl_authenticated, permit_mynetworks, check_relay_domains
我试图查找语法,但我总是在值之间使用 , ,除非我将值放在单独的行上(在这种情况下,以下参数必须以空格开头),例如:
smtpd_recipient_restrictions = reject_unauth_destination
permit_sasl_authenticated
permit_mynetworks
check_relay_domains
编辑1
有一个不错的工具可以远程测试服务器是否真的是开放中继,使用它可以避免错误或“误报”。这个工具可以测试十几种不同的中继方式,如果其中任何一种有效,它都会向您报告。只需在框中输入您的 IP 地址,然后单击“测试”即可:
http://www.mailradar.com/openrelay/
答案2
nmap
对于第二个问题,您可以使用扫描主机来验证端口是否打开,或者简单地telnet hostname 25
。
如果 telnet 响应类似于的内容220 mailserver_name ESMTP
,则端口是开放的。