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 / 问题 / 653737
Accepted
Marco
Marco
Asked: 2014-12-20 07:35:14 +0800 CST2014-12-20 07:35:14 +0800 CST 2014-12-20 07:35:14 +0800 CST

基于原点的后缀中继

  • 772

我有4台服务器。prod1.example.com、prod2.example.com、dev1.example.com 和 dev2.example.com。他们都将邮件发送到 smtp.example.com。该服务器进行中继。现在我希望 dev1 和 dev2 将他们所有的电子邮件发送到 devbox@example.com,但发送到 admin@example.com 的电子邮件除外。来自 prod1 和 prod2 的电子邮件不受任何限制地转发。

我在访问文件中读到,您可以定义服务器必须由过滤器处理,而不是简单的 RELAY(使用 FILTER foo:bar)。我找不到我需要如何以及在哪里定义这个 foo (运输)和 bar (目的地)。所有这些不同的参数都让我感到困惑。不同文件的处理顺序是什么?

有人可以帮帮我吗?

postfix
  • 2 2 个回答
  • 647 Views

2 个回答

  • Voted
  1. The Humble Rat
    2014-12-20T07:53:36+08:002014-12-20T07:53:36+08:00

    我不是这方面的专家,但我最近一直在弄乱 Postfix,至少可以把你推向正确的方向。

    使用后缀,您可以使用别名并将一个地址或一堆地址映射到另一个地址。您可能想要的是 recipient_canonical 映射:

    http://www.postfix.org/ADDRESS_REWRITING_README.html#canonical

    授予使用此方法意味着您必须将所有可能的地址放入文件中,以确保向 admin@example.com 以外的任何地址发送电子邮件到 devbox@example.com,但通过映射您可以使用正则表达式。

    https://superuser.com/questions/353488/regex-multiple-catch-all-setup-in-postfix

    我的建议是在 Stackoverflow 上询问一个简单的正则表达式来检查地址是否不等于 admin@example.com,然后发送到 devbox@example.com。这意味着所有其他地址都将通过此检查,因此会转到 devbox@example.com,而 admin@example.com 会失败,因此只会被发送到预期的地址。

    希望这可以帮助您朝着正确的方向前进,您的任何问题我都会尽我所能回答。

    • 1
  2. Best Answer
    masegaloeh
    2014-12-20T09:06:34+08:002014-12-20T09:06:34+08:00

    你的问题可以用这个伪代码来表达

    if (client == dev1 OR client == dev2)
        if recipient == admin
            pass it
        else
            redirect to devbox
    else
        pass it
    

    不幸的是,postfix 没有用于处理限制和转发的通用语言(例如用于清漆配置的 vcl)。因此,我们可以尝试使用 postfix 的哈希表功能来解决它​​。我有两个想法如何解决这个问题。

    多端口解决方案

    我假设,(默认情况下)您的开发和生产服务器使用相同的端口(端口 25)连接到 smtp.example.com。如果您可以修改代码并调整防火墙限制,那么 dev1 和 dev2 应该使用不同于 25 的端口(例如端口 2525)连接到 smtp.example.com,那么您可以采用简单的解决方案。如果这种情况不可行,您可以跳过这个想法并转到解决方案 2。

    要允许开发服务器通过端口 2525 连接到 postfix,请设置另一个 smtpd 实例并添加此行master.cf

    2525       inet  n       -       n       -       -       smtpd -o smtpd_client_restrictions=check_recipient_access,pcre:/etc/postfix/devbox
    

    现在,内容/etc/postfix/devbox

    /admin@example\.com/    OK
    /devbox@example\.com/   OK
    /.*/                   REDIRECT devbox@example.com
    

    现在,prod 服务器不会像上面那样得到过滤器,因为它们是通过端口 25 连接到 postfix 的。所以,它可以像以前一样通过 postfix。

    限制类解决方案

    如果第一个想法这样的场景是不可能的,那么你可以通过限制类来实现它。为此,您可以使用称为限制类的后缀功能。看

    • http://www.postfix.net/postconf.5.html#smtpd_restriction_classes
    • http://www.postfix.net/RESTRICTION_CLASS_README.html。

    在 main.cf 添加这一行

    smtpd_restriction_classes = devbox
    devbox = check_recipient_access pcre:/etc/postfix/devbox
    smtpd_recipient_restrictions = 
        ...
        check_client_access hash:/etc/postfix/emailrouting,
        ...
    

    内容/etc/postfix/emailrouting

    dev1.example.com    devbox
    dev2.example.com    devbox
    

    内容/etc/postfix/devbox

    /admin@example\.com/    OK
    /devbox@example\.com/   OK
    /.*/                   REDIRECT devbox@example.com
    
    • 1

相关问题

  • Postfix 在特定端口上接受邮件

  • 让 Postfix 以两种方式处理垃圾邮件

  • Postfix 或 exim:自动/程序化和转发电子邮件设置

  • 后缀电子邮件地址

  • 什么是最好的开源电子邮件解决方案包

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