AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 485505
Accepted
oz1cz
oz1cz
Asked: 2013-03-07 23:42:24 +0800 CST2013-03-07 23:42:24 +0800 CST 2013-03-07 23:42:24 +0800 CST

获取 postfix 转发 root 的邮件

  • 772

我有一个运行 postfix 的 Ubuntu 服务器。它不是我域的邮件服务器。

每当 cron 作业为 root 运行时,输出邮件不会在本地传递,而是通过主邮件服务器发送到 [email protected]。这不是我想要的。

我希望 root 的邮件在本地投递或转发到 [email protected]。

我试过同时修改~root/.forward和/etc/aliases(并运行 newaliases),但没有任何帮助(我猜这些文件仅在 postfix 尝试在本地传递邮件时才会被检查)。

我能做些什么?

这是/etc/postfix/main.cf:

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
append_dot_mydomain = no
readme_directory = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
myhostname = linux1.mydomain.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = linux1.mydomain.com, localhost.linux1.mydomain.com, localhost
relayhost = my.isps.relayhost.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only

编辑:

向 root 发送邮件时,这会进入/var/log/mail.log:

Mar  7 09:39:17 linux1 postfix/pickup[31381]: F3B9C98025E: uid=1000 from=<ct>
Mar  7 09:39:18 linux1 postfix/cleanup[31556]: F3B9C98025E: message-id=<[email protected]>
Mar  7 09:39:18 linux1 postfix/qmgr[28525]: F3B9C98025E: from=<[email protected]>, size=283, nrcpt=1 (queue active)
Mar  7 09:39:18 linux1 postfix/smtp[31558]: F3B9C98025E: to=<[email protected]>, orig_to=<root>, relay=my.isps.relayhost.com[<IP address omitted>]:25, delay=0.72, delays=0.19/0.02/0.27/0.25, dsn=2.0.0, status=sent (250 Ok: queued as A97F5D8126)
Mar  7 09:39:18 linux1 postfix/qmgr[28525]: F3B9C98025E: removed

名称“ct”是我的用户名。我通过这个命令生成了上面的文本:

echo test | mail -s test root

的内容/etc/mailname是:

mydomain.com

的内容/etc/aliases是:

root: [email protected]
postmaster:    root

[email protected] 是我希望将 root 的邮件转发到的地方。

内容/etc/hosts其实让我有点意外:

127.0.0.1 localhost
127.0.1.1 linux1.mylinux.mydomain.com linux1

其中“mylinux”是主机操作系统的主机名,linux1 在该操作系统下作为虚拟机运行。我不确定“mylinux”是怎么进来的。(但这真的是我的问题的原因吗?)

linux
  • 5 5 个回答
  • 55931 Views

5 个回答

  • Voted
  1. Best Answer
    Dom
    2013-03-09T00:04:50+08:002013-03-09T00:04:50+08:00

    像往常一样,检查你的日志。

    在您的情况下,后缀守护进程认为邮件不是发给它的,并且不使用/etc/aliases

    首先检查您的/etc/hosts文件:它应该有您的机器名称对应于127.0.1.1,如下所示:

    127.0.1.1  linux1.mydomain.com  linux1
    

    检查你的/etc/mailname,它应该是一致的。

    检查你/etc/aliases的根(用户)是否被发送给另一个用户,然后重做newaliases命令。

    它应该有效!

    • 15
  2. ColinM
    2015-04-24T19:47:39+08:002015-04-24T19:47:39+08:00

    如果mydestination为空或不包含$myhostname则将/etc/aliases被忽略,因为 postfix 认为电子邮件不是本地递送,因此不会应用本地别名。因此,保留mydestination默认值(postconf -d mydestination或将其从中删除main.cf),日志应显示to=<...>为您的别名地址。

    • 8
  3. Dale C. Anderson
    2017-07-21T10:39:17+08:002017-07-21T10:39:17+08:00

    在某些情况下(即所有邮件都被转发到外部系统),将MAILTOroot 的 crontab 中的变量设置为真实的电子邮件地址会更容易。这应该几乎绕过传统的交付到 root 并让它去你想要的地方。

    # Root's crontab
    [email protected]
    0 0 * * * /usr/bin/somescript
    
    • 4
  4. r2oro
    2019-01-09T09:49:22+08:002019-01-09T09:49:22+08:00

    通过 postfix 守护程序打开似乎存在一些问题/root/.forward,至少在强化系统上(我没有深入研究)。尽管:

    # ls -ld / /root /root/.forward
    dr-xr-xr-x. 18 root root  236 Dec  4 00:02 /
    dr-xr-x--x. 13 root root 4096 Jan  8 17:45 /root
    -rw-r--r--.  1 root root   30 Jan  8 14:51 /root/.forward
    

    后缀守护进程的子进程无法访问 .forward:

    7603  open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 16
    7603  fstat(16, {st_mode=S_IFREG|0644, st_size=1227, ...}) = 0
    7603  mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f86854fb000
    7603  read(16, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 1227
    7603  close(16)                         = 0
    7603  munmap(0x7f86854fb000, 4096)      = 0
    7603  geteuid()                         = 89
    7603  getegid()                         = 89
    7603  geteuid()                         = 89
    7603  setresuid(-1, 0, -1)              = 0
    7603  setresgid(-1, 0, -1)              = 0
    7603  setgroups(1, [0])                 = 0
    7603  lstat("/root/.forward", 0x7ffc03f84750) = -1 EACCES (Permission denied)
    

    我没有时间深入研究它...将条目附加到/etc/aliases后面newaliases可以正常工作。

    • 0
  5. Roland Pihlakas
    2020-08-22T10:40:36+08:002020-08-22T10:40:36+08:00

    如果您碰巧设置了目标域过滤,/etc/postfix/transport则需要将计算机的子域添加到允许的域列表中。如果您使用的是某些 VPS,并且托管服务提供商已为您的系统分配了一些自动内部域名,那么您可能也需要添加它。

    例如,如果您有:

    mydomain.com                :
    anotherdomain.com           :
    *                           discard:
    

    更新为:

    uvn-12-34.am01.hostingvs.eu :
    linux1.mylinux.mydomain.com :
    mydomain.com                :
    anotherdomain.com           :
    *                           discard:
    

    如果没有此更新,in 中的行 root: [email protected] 或 /etc/aliasesin 中的类似行将.forward 不会具有所需的最终效果,因为消息在转发之前被丢弃。

    • 0

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve