如何將 Postfix 配置為在登錄時接受帶有“@”(at 符號)的本地使用者的 SMTP?
- 我有一個 Ubuntu 14.04 伺服器,
mydomain.com
其中有一群@domain
登錄的使用者,比如us.er@mydomain.com
.- 他們每個人都有一個
us.er-mydomain.com
具有相同 uidpasswd
和shadow
條目的“偽”帳戶。/etc/postfix/virtual
他們每個人在:中都有一個條目us.er@mydomain.com 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 <us.er@mydomain.com>: Relay access denied; from=<asdfasdf@asdfasdf.com> to=<us.er@mydomain.com> proto=ESMTP helo=<lalala@asdfasdf.com>
儘管它確實有一個 us.er@mydomain.com 帳戶。
我沒有也沒有
myhostname
設置mydomain
。如果我將它們設置為我的伺服器域,postmap 會開始拒絕帶有unknown user: "us.er"
消息的郵件。修復 SMTP 接收的最佳方法是什麼?這個設置有什麼問題嗎?
Imap 和 pop3 或多或少地工作。配置轉儲如下。
主機名
some-isp-vps
主機名 -f
mydomain.com
postconf -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
postconf -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
Postfix 拒絕中繼到 mydomain.com,因為它沒有被列為本地或虛擬域。第一步是定義域類(postfix.org/ADDRESS_CLASS_README.html)。myhostname 是機器名。mydestination 是一個包含託管域和在 passwd 上列出的使用者的列表。
您的 postfix smtpd 程序抱怨:
<us.er@mydomain.com>: Relay access denied
因為:
- mydomain.com未配置/辨識為本地最終目的地;
和
- postfix 未配置為將消息中繼到外部mydomain.com域;
因此,由於無法同時提供本地(如第 1 點)和遠端(如第 2 點),它會給出您面臨的“中繼訪問被拒絕”錯誤。
根據您的配置,您的問題是第 1 點:您希望您的 postfix 成為mydomain.com域的最終目的地,但 postfix… 仍然不知道這一點。你有兩種方法可以解決這個問題:
- A) mydestination指令:“…通過 $local_transport 郵件傳遞傳輸傳遞的域列表…”。不幸的是,您的配置將其設置為:
我的目的地 = $ myhostname, localhost. $ mydomain,本地主機,vp1.mydomain.com
不包括*$mydomain*單獨;
- B) virtual_mailbox_domains指令:“…Postfix 是指定域列表的最終目的地;郵件通過 $virtual_transport 郵件傳遞傳輸傳遞….”。(順便說一句:您的配置包含肯定與虛擬域託管相關的 virtual_alias_maps 指令,但可能您最初沒有正確配置引用的 /etc/postfix/virtual 文件)
一個非常重要的注意事項:您必須仔細選擇是否將您的託管域包含在“ mydestination ”或“ virtual_mailbox_domain ”中,因為它可能會產生嚴重的安全隱患,就您可能被迫在電腦上本地創建的 unix 帳戶而言。在您的留言中,您寫道:
“……他們每個人都有一個“偽”帳戶 us.er-mydomain.com 具有相同的 uid、passwd 和影子條目……”
所以你清楚地引用了/etc/passwd 和/etc/shadow。因此,它們是真實帳戶!
一般來說,如果您選擇“mydestination”路線,您通常會被迫將真實帳戶關聯到您託管的每個郵箱。如果您只託管自己的單個域,這可能不是一個嚴重的問題。
相反,當您託管多個域時,它很快就會變成一場噩夢。在這種情況下,您可能只為您的使用者提供電子郵件服務,並且……為他們每個人設置一個真正的 unix 帳戶肯定是太多了。
這就是從 Postfix 2.0開始添加virtual_mailbox_domains的原因。
最後:您已經解決了您的問題,將您的域添加到虛擬域列表中。還行吧。但是這個設置不需要定義真實的unix帳戶。
我建議您檢查一個非常清晰的範例: Postfix virtual MAILBOX example: separate domain, non-UNIX accounts