邮件服务器 Postfix + Dovecot

邮件服务器 Postfix + Dovecot

我在 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

注意/32IP 地址后面的,这是为了确保 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 服务器。

相关内容