Linux
Exim:為本地域的使用者強制電子郵件身份驗證
我正在使用 dovecot 和 postgresql 為虛擬使用者配置 exim4,我遇到了一個我無法解決的問題,情況是這樣的:
我需要當“本地域”使用者嘗試向另一個“本地域”使用者或外國使用者發送電子郵件時,需要進行身份驗證,否則拒絕該操作。
實際上,我試圖避免任何類型的 smtp 開放中繼。
實際上 smtp 工作正常,只需要設置該要求,我找不到正確配置 exim 以獲得此行為的正確方法(是 acl 還是路由或傳輸規則?)
我怎麼能定義這個配置?
範例 1
220 我的伺服器 ESMTP Exim 4.84 2016 年 3 月 31 日星期四 22:26:28 +0000 ehlo 本地主機 250-我的伺服器你好本地主機 [192.168.1.X] 250 尺寸 52428800 250-8BITMIME 250-流水線 250-AUTH 普通登錄 250 幫助 郵件來自:a@my-server.com 250 好 rcpt 至:b@my-server.com 250 接受 數據 354 輸入資訊,以“.”結尾 單獨在一條線上 這一定不能發生,使用者 'a@my-server.com' 未經過身份驗證, 在使用之前,他必須不能發送任何消息 'auth login' 或 'auth plain' 因為是本地域的使用者。 . 250 確定 id=1all3Q-0004l2-V4
範例 2
220 我的伺服器 ESMTP Exim 4.84 2016 年 3 月 31 日星期四 22:58:56 +0000 ehlo 本地主機 250-我的伺服器你好本地主機 [192.168.1.X] 250 尺寸 52428800 250-8BITMIME 250-流水線 250-AUTH 普通登錄 250 幫助 郵件來自:a@anotherserver.com 250 好 rcpt 至:user@my-server.com 250 接受 數據 354 輸入資訊,以“.”結尾 單獨在一條線上 這已經有效。 . 250 OK id=1allZR-00050E-Sq
ACL RCPT-TO 配置文件
acl_check_rcpt: 接受 主機=: 控制 = dkim_disable_verify .ifdef CHECK_RCPT_LOCAL_LOCALPARTS 否定 域 = +local_domains local_parts = CHECK_RCPT_LOCAL_LOCALPARTS 消息 = 地址中的受限字元 。萬一 否定 域 = !+local_domains local_parts = CHECK_RCPT_REMOTE_LOCALPARTS 消息 = 地址中的受限字元 。萬一 接受 .ifndef CHECK_RCPT_POSTMASTER local_parts = 郵政局長 。別的 local_parts = CHECK_RCPT_POSTMASTER 。萬一 域 = +local_domains : +relay_to_domains .ifdef CHECK_RCPT_VERIFY_SENDER 否定 消息 = 失敗! !acl = acl_local_deny_exceptions !verify = 發件人 。萬一 否定 !acl = acl_local_deny_exceptions 發件人 = ${如果存在{CONFDIR/local_sender_callout}\ {CONFDIR/local_sender_callout}\ {}} !verify = 發件人/標註 接受 主機 = +relay_from_hosts 控制=送出/sender_retain 控制 = dkim_disable_verify 接受 認證 = * 控制=送出/sender_retain 控制 = dkim_disable_verify 要求 消息 = 中繼被拒絕! 域 = +local_domains : +relay_to_domains 要求 驗證 = 收件人 否定 !acl = acl_local_deny_exceptions 收件人 = ${如果存在{CONFDIR/local_rcpt_callout}\ {CONFDIR/local_rcpt_callout}\ {}} !verify = 收件人/標註 否定 message = 發件人信封地址 $sender_address 在這裡被列入本地黑名單。如果您認為這是錯誤的,請與 postmaster 聯繫 !acl = acl_local_deny_exceptions 發件人 = ${如果存在{CONFDIR/local_sender_blacklist}\ {CONFDIR/local_sender_blacklist}\ {}} 否定 message = 發件人 IP 地址 $sender_host_address 在這裡被列入本地黑名單。如果您認為這是錯誤的,請與 postmaster 聯繫 !acl = acl_local_deny_exceptions 主機 = ${如果存在{CONFDIR/local_host_blacklist}\ {CONFDIR/local_host_blacklist}\ {}} 接受 域 = +relay_to_domains 結束通道 驗證 = 收件人 接受
最後我自己解決了這個問題,我只需要將下一條語句添加到我的 acl 配置文件中:
接受 消息 = 必須授權 域 = +local_domains : +relay_to_domains 發件人=:正則表達式
這也可以通過條件語句和 perl 腳本來解決。
謝謝您的幫助。
只需確保 local_domains 不包含您想要要求身份驗證的任何主機。這將防止這些伺服器出現開放中繼情況。
但是,伺服器通過 MX 將電子郵件發送到 Internet 是很常見的。通常,在這種情況下您不希望要求身份驗證。
確保 relay_to_domains 為空,或僅包含您希望允許中繼到的域。(您是此列表中任何域的開放中繼。)
確保在接受 AUTH 請求之前需要 STARTTLS。否則,您的密碼將很容易被嗅探。