我有一个带有转发 mx 记录的 ubuntu 16.04 网络服务器。在服务器上,我安装了 sendmail。我有多个正在运行的 vhost。其中一个是“xxx-tele.com”。
现在我想设置 sendmail,所有邮件都发送到[电子邮件保护]应转发至[电子邮件保护]这是我的网络内不同邮件服务器上的邮箱。
首先我添加了一个 /etc/mail/virtusertable
[email protected] [email protected]
然后使用“makemap hash virtusertable.db < virtusertable”创建了哈希文件。在 /etc/mail/sendmail.mc 中,我添加了以下行
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
我运行
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
命令并使用“service sendmail reload”重新启动 sendmail。
现在,我尝试命令
sendmail -bv [email protected]
我刚刚收到回复: [电子邮件保护]... 用户未知
xxx-tele.com 附加在 /etc/hosts 和 /etc/mail/local-host-names 中
我如何设置 sendmail 仅转发此地址并拒绝所有其他地址?
命令:echo '$=w' | sendmail -bt 仅返回:
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> localhost.tele.com
web
xxx-tele.com
[internal.dmz.ip4.address]
localhost
web.tele.com
[127.0.0.1]
web.tele.com
[localhost.tele.com]
最好的,dwi
以下是提供的信息:1.) 的答案是
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> map_lookup: virtuser ([email protected]) returns [email protected] (0)
2.) 的答案是
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> canonify input: info @ xxx-tele.com
Canonify2 input: info < @ xxx-tele.com >
map_lookup(host, xxx-tele.com, %0=xxx-tele.com) => localhost.xxx.com. (0)
Canonify2 returns: info < @ localhost.xxx.com . >
canonify returns: info < @ localhost.xxx.com . >
parse input: info < @ localhost.xxx.com . >
Parse0 input: info < @ localhost.xxx. com . >
map_lookup(dequote, info, %0=info) => NOT FOUND (0)
Parse0 returns: info < @ localhost.xxx.com . >
Parse1 input: info < @ localhost. xxx.com . >
map_lookup(virtuser, [email protected], %[email protected], %1=info) => NOT FOUND (0)
map_lookup(virtuser, @localhost.xxx.com, %[email protected], %1=info) => NOT FOUND (0)
Parse1 returns: $# local $: info
parse returns: $# local $: info
第三个回应是:
> root@web:~# _res.options = 812c3, HasWildcardMX = 0
Enter <ruleset> <address>
> canonify input: info @ xxx-tele . com
Canonify2 input: info < @ xxx-tele . com >
Canonify2 returns: info < @ localhost . xxx. com . >
canonify returns: info < @ localhost . xxx. com . >
parse input: info < @ localhost . xxx. com . >
Parse0 input: info < @ localhost . xxx. com . >
Parse0 returns: info < @ localhost . xxx. com . >
Parse1 input: info < @ localhost . xxx. com . >
Parse1 returns: $# local $: info
parse returns: $# local $: info
我的主机文件如下:
127.0.0.1 localhost localhost.xxx.com xxx-tele.com
local.dmz.ip4.address web.xxx.com web xxx-tele.com
答案1
根据提供的调试输出, 域在 virtusertable 查找之前被主机映射查找重写
echo '3,0 [email protected]' | sendmail -d60.5 -bt
更改 /etc/hosts 条目应该可以解决这个问题
### Old Entry
# 127.0.0.1 localhost localhost.xxx.com xxx-tele.com
### New Entry
127.0.0.1 localhost xxx-tele.com
答案2
Sendmail:调试 virtusertable
1)检查 sendmail 是否可以访问 virtusetable 中的条目
以 root 身份执行:
echo /map virtuser [email protected] | sendmail -bt
2) 检查 sendmail 是否对电子邮件进行 virtusertable 查找。
以 root 身份执行:
echo '3,0 [email protected]' | sendmail -d60.5 -bt
-d60.5 跟踪(所有)地图查找,包括 virtusertable 查找
host
3)如果通过地图查找重写域前然后,virtusertable 查找 DNS 查询,并/etc/hots
使用以下方式发布条目xxx-tele.com
echo '3,0 [email protected]' | sendmail -d8.20 -bt