我为客户的网站运行一个共享服务器(ubuntu 16.04)。我运行 exim 以允许网站发送电子邮件。它还充当我客户的电子邮件软件(或只是 gmail)的邮件转发器和 smtp 服务器,以允许他们从他们的转发器发送电子邮件。
我目前限制远程用户发送电子邮件,仅当“发件人”地址与他们的 smtp 用户名匹配时才允许该地址(以阻止一个客户端以另一个客户端的身份发送电子邮件)。远程 smtp 用户不是系统用户,他们只是存储在 passwd 文件中的凭据。效果很好。
本地用户发送的电子邮件仅来自 php 脚本。每个网站都以不同的用户身份运行。例如,example.com 以用户“example”身份运行,test.com 以用户“test”身份运行。我的问题是,如何限制本地用户帐户只能从一个域发送电子邮件?这样用户“test”就可以从[电子邮件保护]但无法发送[电子邮件保护]?
理想情况下,我希望测试脚本查找文件conf/env{USER}/allowed-from-domains
并测试字段的域From:
以确保它在该文件中。
答案1
以下配置分别使 exim 阻止来自用户的消息example
以及test
当邮件From
头不包含“@example.com”或“@test.net”时的消息。
我使用系统过滤器来检查From
标题行,只有在消息被接受后才可用。
exim.conf:
system_filter = /etc/exim/system_filter.conf
qualify_domain = mydomain.net
系统过滤器.conf:
if $sender_address is "example@$qualify_domain" and not $h_from contains "@example.com"
or $sender_address is "test@$qualify_domain" and not $h_from contains "@test.net"
then
seen finish
endif
测试本地用户的外发邮件test
测试.php
#!/bin/php
<?php
mail( "[email protected]", "Pass Test", "My message", "From: Me <[email protected]>" );
mail( "[email protected]", "Fail Test", "My message", "From: Me <[email protected]>" );
?>
Web 服务器注意事项
这一切都假设 php 以某种方式被客户端的用户帐户调用。您可能需要重新配置您的网络服务器才能执行此操作。例如,apache 网络服务器通常以用户“apache”而不是“test”或“example”的身份运行脚本,而这正是我们想要的。Apache 需要使用类似 mod_privileges.c 或 mpm-itk 的配置。
如果您的 Web 服务器配置为使用 CGI/FastCGI 模式,您可以通过向 php.ini 添加 [HOST=example.com] 和 [HOST=test.net] 部分来实现此目的。
参考: