我有一台运行 Sendmail 的邮件服务器,它托管多个邮件域。例如,发往 @aaa.com 和 @bbb.com 的电子邮件都发往同一台服务器。这段时间我一直在/etc/mail/virtusertable
管理不同邮件域的不同用户到不同本地帐户的映射。
但现在我刚刚发现/etc/aliases
可能正在做类似的事情。
/etc/aliases
和 有什么不同的作用/etc/mail/virtusertable
?- 什么
aliases
能做但不能做virtusertable
,反之亦然?
我已经搜索过整个网络,但没有找到任何网站能够非常详细地比较差异。
答案1
virtusertable 与 sendmail 中的别名之间的主要区别
virtusertable
提供收件人地址的一对一映射。aliases
提供一对多映射(适用于邮件列表)。
aliases
映射“无域”收件人(本地电子邮件域中的收件人,电子邮件的域部分已被剥离)。virtusertable
映射完整的收件人地址。
virtusertable
处理“电子邮件域中所有其他/剩余地址”的重新映射。
可以使用“virtusertable 到别名”映射来获取一对多映射。
巫师等级提示:可以让 sendmail.cf 处理完整电子邮件(用户部分和域)的别名,但使用 sendmail.org 提供的 m4 文件生成的 sendmail.cf 无法处理它。实现它不会很复杂,但恕我直言,肯定会出现一些意想不到的“副作用” => 适当的测试期将是长的。
答案2
简短回答:
别名是将系统上的一个本地收件人名称转换为另一个本地收件人名称的过程,并且别名仅发生在本地名称上。这意味着,username
必须通过获取pwnam来自密码数据库:
例如本地密码文件 /etc/passwd、NIS 和 LDAP。
sendmailvirtusertable
功能支持虚拟用户,这意味着它映射非系统用户。
我引用了以下内容这里。解释得很好,请看一下。
/etc/mail/别名
此数据库文件包含扩展为用户、文件、程序或其他别名的虚拟邮箱列表。以下是一些条目来说明文件格式:
root: localuser ftp-bugs: joe,eric,paul bit.bucket: /dev/null procmail: "|/usr/local/bin/procmail"
冒号左侧的邮箱名称扩展为右侧的目标。第一个条目将根邮箱扩展为本地用户邮箱,然后在 /etc/mail/aliases 数据库中查找该邮箱。如果未找到匹配项,则将邮件发送给本地用户。第二个条目显示邮件列表。发给 ftp-bugs 的邮件扩展为三个本地邮箱 joe、eric 和 paul。远程邮箱可以指定为[电子邮件保护]。第三项显示如何将邮件写入文件(本例中为 /dev/null)。最后一项演示如何通过 UNIX® 管道将邮件发送到程序 /usr/local/bin/procmail。有关此文件格式的更多信息,请参阅 aliases(5)。
/etc/mail/virtusertable
此数据库文件将虚拟域和用户的邮件地址映射到真实邮箱。这些邮箱可以是本地邮箱、远程邮箱、/etc/mail/aliases 中定义的别名或文件。这允许在一台机器上托管多个虚拟域。
以下示例说明如何使用该格式创建自定义条目:
[email protected] root [email protected] [email protected] @example.com joe
此文件按第一个匹配顺序进行处理。当电子邮件地址与左侧的地址匹配时,它将被映射到右侧列出的本地邮箱。本示例中第一个条目的格式将特定电子邮件地址映射到本地邮箱,而第二个条目的格式将特定电子邮件地址映射到远程邮箱。最后,来自 example.com 的任何电子邮件地址如果未与任何先前的条目匹配,都将与最后一个映射匹配并发送到本地邮箱 joe。
现在对您的问题进行更详细的回答:
- 别名数据库文件包含扩展到用户、文件、程序或其他别名的虚拟邮箱列表。
- 此 virtuser 数据库文件将虚拟域和用户的邮件地址映射到真实邮箱。这些邮箱可以是本地邮箱、远程邮箱、/etc/mail/aliases 中定义的别名或文件。这允许在一台机器上托管多个虚拟域。
- 另一方面,sendmail virtusertable 功能配置了对虚拟用户表的支持。虚拟用户表将传入邮件映射到某些用户@主机到其他用户@其他主机。我们可以将其视为一种高级邮件别名功能,它不仅使用目标用户进行操作,还使用目标域进行操作。 关键部分(左侧)必须是完整地址(用户、主机和域名),或者是没有主机部分的地址(仅为域)。
答案3
我记得的主要区别是virtusertable
可能包含领域信息以及用户信息;即;[email protected]
和[email protected]
都是有效的和独特的中的左侧virtusertable
,但在中一起使用aliases
它们将产生duplicate alias name
错误。
这样仍然会留下一组可以合法进入的条目;我的感觉是应该aliases
尽可能地使用,只留下virtusertable
那些特定于领域的东西。
bangal(qv)指出了一些更重要的差异,例如向管道和文件发送电子邮件的能力。
答案4
尝试这个:
如果您的 MTA 服务器是一组域的主 MX,则您可以通过 virtusertable 路由它们。Virtusertable 允许您挑选单个目标电子邮件,例如“abuse@...”和“postmaster@”,并将其他所有内容转发到单个邮箱或完全具有不同名称的另一台服务器,但保留“@”的所有内容。例如:
[email protected]: helpdesk <--- which could be in /etc/aliases to a list
[email protected]: [email protected] <--- specific destination
@xyz.com: %[email protected] <--- route everything else to another host`
您的 /etc/aliases 文件实际上用于设置从一个用户到另一个用户或从一个用户到其他组的简单目的地:
root: [email protected] <--- route all root mail to sysadmin
sales: jdoe,mdoe,sone,[email protected],[email protected] <-- to a list
nobody: /dev/null <--- anything sent to "nobody" disappears forever
别名不太擅长处理多个域,而 virtusertable 却非常擅长。
您将需要适当设置您的 MX 记录等等。
干杯,大卫