![邮件服务器 Postfix + Dovecot](https://linux22.com/image/974446/%E9%82%AE%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8%20Postfix%20%2B%20Dovecot.png)
我在 Ubuntu 12.04 上运行邮件服务器,并且 box 有 Web 服务器 + 邮件服务器 (Postfix + Dovecot)。这是在 Windows Azure 云上设置的虚拟机。
问题:无法向外网发送电子邮件。以下是配置和日志。
后缀:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
inet_interfaces = all
mailbox_size_limit = 0
mydestination = abc.cloudapp.net, localhost.abc.cloudapp.net, localhost
myhostname = abc.cloudapp.net
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_transport = dovecot
鸽舍:
# 2.0.19: /etc/dovecot/dovecot.conf
# OS: Linux 3.2.0-65-virtual x86_64 Ubuntu 12.04.4 LTS ext4
auth_mechanisms = plain login
mail_location = maildir:/var/vmail/%d/%n/Maildir
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date ihave
passdb {
args = /etc/dovecot/dovecot-sql.conf.ext
driver = sql
}
plugin {
sieve = ~/.dovecot.sieve
sieve_dir = ~/sieve
}
protocols = " imap sieve pop3"
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
unix_listener auth-userdb {
group = vmail
user = vmail
}
}
ssl_cert = </etc/ssl/certs/mailserver.pem
ssl_key = </etc/ssl/private/mailserver.pem
userdb {
args = uid=vmail gid=vmail home=/var/vmail/%d/%n
driver = static
}
protocol lda {
mail_plugins = " sieve"
}
/var/log/mail.log
Jul 9 08:40:11 layfootak postfix/smtpd[44127]: connect from unknown[87.109.35.199]
Jul 9 08:40:12 layfootak postfix/smtpd[44127]: NOQUEUE: reject: RCPT from unknown[87.109.35.199]: 554 5.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[127.0.0.1]>
我能够正确配置 Mozilla Thunderbird 电子邮件客户端并接收电子邮件。它正确显示我的收件箱,但当我向其他电子邮件地址(如外部网络)发送电子邮件时,它会给出中继访问被拒绝;来自= 至= proto=ESMTP helo=<[127.0.0.1]>
请建议我。
在为 SMTP 中继配置设置以下 postfix 配置后,我解决了该问题:
sudo postconf -e smtpd_sasl_type=dovecot
sudo postconf -e smtpd_sasl_path=private/auth
sudo postconf -e smtpd_sasl_auth_enable=yes
sudo postconf -e smtpd_tls_security_level=may
sudo postconf -e smtpd_tls_auth_only=yes
sudo postconf -e smtpd_tls_cert_file=/etc/ssl/certs/mailserver.pem
sudo postconf -e smtpd_tls_key_file=/etc/ssl/private/mailserver.pem
sudo postconf -e smtpd_recipient_restrictions=" \
permit_mynetworks \
permit_sasl_authenticated \
reject_unauth_destination"
答案1
只有通过 Postfix 配置允许进行中继的 IP 和网络才可以将邮件发送到未托管在 Postfix 上的域(因此是外部邮件)。
在 Postfix 中,这是通过将这些允许的 IP 和网络提供给mynetworks
配置指令来实现的main.cf
。
在您的情况下,它显示只有 localhost 被允许在您的 Postfix 安装之外中继邮件。
为了允许您向外发送邮件而无需将您的服务器设为开放中继,您至少应该添加需要发送外部邮件的客户端的 IP。
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 A.B.C.D/32
注意/32
IP 地址后面的,这是为了确保 Postfix 不会允许整个子网而只允许特定地址。
如果所有客户端都在同一个子网上,您可以配置(例如:所有客户端都连接到 192.168.1.0 网络,以 255.255.255.0 作为掩码):
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.1.0/24
当然,如果您计划为用户安装基于 Web 邮件的软件,则唯一允许发送和中继邮件的主机将是 Web 服务器本身。在这种情况下,您不必修改 Postfix 的配置,但请确保您的 Web 邮件解决方案使用 127.0.0.1 作为 SMTP 服务器。