![如何配置 Postfix 以接受登录时带有“@”(at 符号)的本地用户的 SMTP?](https://linux22.com/image/647404/%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%20Postfix%20%E4%BB%A5%E6%8E%A5%E5%8F%97%E7%99%BB%E5%BD%95%E6%97%B6%E5%B8%A6%E6%9C%89%E2%80%9C%40%E2%80%9D%EF%BC%88at%20%E7%AC%A6%E5%8F%B7%EF%BC%89%E7%9A%84%E6%9C%AC%E5%9C%B0%E7%94%A8%E6%88%B7%E7%9A%84%20SMTP%EF%BC%9F.png)
- 我有一台 Ubuntu 14.04 服务器,上面
mydomain.com
有一堆用户@domain
登录,比如[email protected]
。 us.er-mydomain.com
他们每个人都有一个具有相同 uidpasswd
和条目的“伪”帐户shadow
。- 它们每个都在
/etc/postfix/virtual
:中有一个条目[email protected] us.er-mydomain.com
。
(这些用户是从 CentOS 上的 Virtualmin 迁移过来的)。
我的服务器拒绝邮件并出现错误:
Dec 6 10:27:31 mydomain postfix/smtpd[8176]: NOQUEUE: reject: RCPT from lalala.asdfasdf.com[220.232.206.13]: 554 5.7.1 <[email protected]>:
Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[email protected]>
尽管它确实有一个[电子邮件保护]帐户。
我没有myhostname
或mydomain
设置。如果我将它们设置为我的服务器域,postmap 将开始拒绝带有unknown user: "us.er"
消息的邮件。
修复 SMTP 接收的最佳方法是什么?此设置有什么问题吗?
Imap 和 pop3 或多或少可以工作。配置转储如下。
主机名
some-isp-vps
主机名 -f
mydomain.com
后配置-n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
allow_percent_hack = no
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/lib/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailbox_size_limit = 0
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
message_size_limit = 30485760
milter_default_action = accept
milter_protocol = 2
mydestination = $myhostname, localhost.$mydomain, localhost, vp1.mydomain.com
mynetworks = 192.241.228.147,127.0.0.1
newaliases_path = /usr/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
sample_directory = /usr/share/doc/postfix-2.6.6/samples
sender_bcc_maps = hash:/etc/postfix/bcc
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
smtp_tls_note_starttls_offer = yes
smtp_tls_security_level = may
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,permit_auth_destination,reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks,permit_sasl_authenticated,permit_auth_destination,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = no
smtpd_tls_cert_file = /etc/ssl/certs/ssl.cert
smtpd_tls_key_file = /etc/ssl/certs/ssl.key
smtpd_tls_loglevel = 1
smtpd_tls_mandatory_ciphers = high
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
tls_random_source = dev:/dev/urandom
unknown_local_recipient_reject_code = 550
virtual_alias_maps = hash:/etc/postfix/virtual
后配置-M
smtp inet n - n - - smtpd -o smtpd_sasl_auth_enable=yes
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING
pickup fifo n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr fifo n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp -o smtp_fallback_relay=
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
submission inet n - n - - smtpd -o smtpd_sasl_auth_enable=yes
答案1
Postfix 拒绝中继到 mydomain.com,因为它未列为本地或虚拟域。第一步是定义域类 (postfix.org/ADDRESS_CLASS_README.html)。myhostname 是机器名称。mydestination 是托管域和 passwd 上列出的用户的列表。
答案2
你的 postfix smtpd 进程抱怨:
<[email protected]>: Relay access denied
因为:
- 我的域名未配置或未被识别为本地最终目的地;
和
- postfix 没有配置为将消息中继到外部我的域名领域;
因此,由于无法同时进行本地传送(对于第 1 点)和远程传送(对于第 2 点),所以会出现您所面临的“中继访问被拒绝”错误。
根据您的配置,您的问题是第 1 点:您希望您的 postfix 成为我的域名域名,但 postfix... 仍然不知道这一点。你有两种方法可以解决这个问题:
A)我的目的地指示:“...通过 $local_transport 邮件传递传输传递的域名列表...”。不幸的是,您的配置将其设置为:
mydestination = $myhostname, localhost.$mydomain, localhost, vp1.mydomain.com
不包括$我的域名独自的;
- B)虚拟邮箱域名指示:“...Postfix 是指定域列表的最终目的地;邮件通过 $virtual_transport 邮件传递传输进行传递....”。(顺便说一句:您的配置包含一个 virtual_alias_maps 指令,该指令肯定与虚拟域托管有关,但您可能最初没有正确配置引用的 /etc/postfix/virtual 文件)
非常重要的一点是:您必须仔细选择是否将您的托管域名包含在“我的目的地“ 或者 ”虚拟邮箱域名“因为它可能会带来严重的安全隐患,就 unix 帐户而言,您可能被迫在您的机器上本地创建。在您的消息中,您写道:
“...他们每个人都有一个具有相同 uid、passwd 和 shadow 条目的“伪”帐户 us.er-mydomain.com...”
因此您明确引用了 /etc/passwd 和 /etc/shadow。因此它们是真实的帳戶!
一般情况下,如果您选择“mydestination”路线,则您几乎必须将真实帐户与您托管的每个邮箱相关联。如果您只托管自己的单个域,那么这可能不是一个严重的问题。
相反,当您托管多个域时,它很快就会变成一场噩梦。在这种情况下,您可能只为用户提供电子邮件服务,并且……为每个用户设置一个真正的 unix 帐户肯定是太多了。
这就是为什么自 Postfix 2.0 以来虚拟邮箱域名已添加。
最后:您已经解决了问题,将您的域添加到虚拟域列表中。这样就没问题了。但是此设置不需要定义 real-unix-accounts。
我建议您查看一个非常清晰的例子: Postfix 虚拟 MAILBOX 示例:独立域、非 UNIX 帐户