Exim
Exim - 限制使用者可以發送的地址
預設情況下,exim 允許任何使用者使用他們希望的任何“發件人:”地址發送電子郵件,這可能導致使用者相互欺騙。如何限制每個系統使用者可以發送的地址?例如,使用者
james
應該能夠從 james@localhost 發送,但也可以從 me@my-domain.com 和 james@other-domain.com 發送。我希望所有系統使用者都能夠從他們的 SYSTEM_USER@HOSTNAME 發送電子郵件,但是如果他們嘗試從另一個地址發送,我想在文本文件中查找該地址以查看是否允許。
我目前有一個列表,但它是系統使用者將從哪些地址收到的。但它仍然可以工作。給定範例
me@my-domain.com
,數據儲存在/etc/exim4/virtual/my-domain.com
內容如下所示的文件中:me : james@localhost
如果我們可以重用現有的文件,那就太好了。但任何建議都會有所幫助。先感謝您。
Exim4已經對信封發送者
From:
和Sender:
本地送出的消息(參見受信任的使用者)進行了一些標準檢查。由於您想擴展此驗證,您應該:
- 對於通過
sendmail
(ieexim4 -bm
)送出的消息,在主配置部分添加:# allow untrusted users to set an envelope sender untrusted_set_sender = * # don't delete the Sender: header local_sender_retain = true # don't add Sender: header local_from_check = false
- 對於通過您送出的消息,
SMTP
您需要添加control = submission/sender_retain
修飾符。例如 Debian 在accept authenticated = * control = submission/sender_retain control = dkim_disable_verify
要配置您的支票,您需要
ACL
在郵件處理的不同階段添加一些規則。由於這些規則需要應用於不同的消息送出方式,您可以創建一個新的命名ACL
(我假設您的所有/etc/exim4/virtual/<domain>
文件都username@localhost
作為值返回):# Requires system user id in $acl_arg1 acl_check_sender: # Users with default domain accept condition = ${if eq{$sender_address}{$acl_arg1@$qualify_domain}} condition = ${if eq{${address:$h_from:}}{$acl_arg1@$qualify_domain}} condition = ${if match_address{${address:$h_sender:}}{:$acl_arg1@$qualify_domain}} deny ! condition = ${if and{\ {exists{/etc/exim4/virtual/${domain:${address:$h_from:}}}}\ {eq {${acl_arg1}@localhost}\ {${lookup {${local_part:${address:$h_from:}}}\ lsearch{/etc/exim4/virtual/${domain:${address:$h_from:}}}\ }}\ }\ }} message = Spoofed From: header. # Most messages don't have a Sender: header, but if it is not empty, check it. deny ! condition = ${if or{\ {eq {$h_sender:}{}}\ {and{\ {exists{/etc/exim4/virtual/${domain:${address:$h_sender:}}}}\ {eq {${acl_arg1}@localhost}\ {${lookup {${local_part:${address:$h_sender:}}}\ lsearch{/etc/exim4/virtual/${domain:${address:$h_sender:}}}\ }}\ }\ }}\ }} message = Spoofed Sender: header. deny ! condition = ${if and{\ {exists{/etc/exim4/virtual/$sender_address_domain}}\ {eq {${acl_arg1}@localhost}\ {${lookup {$sender_address_local_part}\ lsearch{/etc/exim4/virtual/$sender_address_domain}\ }}\ }\ }} message = Spoofed envelope sender. accept
有關字元串擴展的語法(充滿大括號),請查看Exim 文件的第 11 章。您可以使用它們來測試它們(信封發件人像mbox格式
exim4 -bem <message> <expansion_string>
一樣在消息中傳遞)。您可以將其應用於不同的情況:
- 對於通過 送出的消息,將以下規則
exim4 -bm
添加到ACL:acl_not_smtp
deny ! acl = acl_check_sender ${sender_ident}
- 對於經過身份驗證的使用者通過
SMTP
添加到acl_smtp_data
ACL 送出的消息,例如:deny authenticated = * ! acl = acl_check_sender ${authenticated_id}
- 一些程序使用未經身份驗證的
SMTP
連接來送出消息localhost
(或exim -bs
)。對於他們,您可以添加到acl_smtp_data
ACL:deny hosts = : localhost ! acl = acl_check_sender ${sender_ident}
並在伺服器上安裝一些identd。