【问题标题】:How to make Postfix use PostgreSQL for relay information and accepted domains如何让 Postfix 将 PostgreSQL 用于中继信息和接受域
【发布时间】:2018-09-03 08:41:20
【问题描述】:

我正在使用 CentOS 7、Postfix 和 MailScanner 构建邮件过滤设备。

我已经从 CentOS Plus 存储库安装了 Postfix,这样它就可以在支持 PostgreSQL 的情况下安装。

但是,我在弄清楚如何让 Postfix 从数据库中读取信息以及应该存在哪些表时遇到了一些麻烦。

我已经在 PostgreSQL 10.1 服务器上运行的数据库上创建了下表:

field          type
id             uuid
name           varchar(128)
destination    varchar(128)
relay_type     varchar(64)
created        timestamptz
updated        timestamptz
active         bool

基本想法是根据内部服务器和我的实验室环境中托管的电子邮件帐户的需要,在表格中填写域和目的地。

name          destination              relay_type   active
domain.com    mailserver.domain.com    smtp         1
domain.xyz    somewhere.domain.xyz     smtp         1
notme.io      notsend.notme.io         smtp         0

何时实际接受域的电子邮件并中继到目的地的条件将由以下 SQL 语句表示:

SELECT 1 FROM domains where name = '%s' and active = 1

然后要确定目的地,我需要使用以下语句组合 destinationrelay_type 列的值:

SELECT relay_type + ':' + destination AS transport FROM domains WHERE name = '%s' AND active = 1

实际的问题是我无法弄清楚要在/etc/postfix/main.cf 中修改什么来让 postfix 使用上述查询从数据库中实际读取

【问题讨论】:

    标签: postgresql postfix


    【解决方案1】:

    您需要在 main.cf 中使用代理查找

    virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
    

    然后在文件中您需要有关如何进行查找的信息,我的是 mysql,所以您必须使用 postgresql 设置,但这只是一个示例。

    user = postfixadmin
    password = postfixadmin
    hosts = localhost
    dbname = postfixadmin
    query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
    

    http://www.postfix.org/PGSQL_README.html

    【讨论】:

    • 添加 proxy: 让我更进一步。现在它说Recipient address rejected: User unknown in virtual alias table。我试过virtual_alias_domainsvirtual_alias_maps。当使用virtual_mailbox_domains 时,它会给出4.3.0, status=deferred (mail transport unavailable)。我认为这需要我在前面列出的查询 SELECT relay_type + ':' + destination AS transport FROM domains WHERE name = '%s' AND active = 1 中添加 virtual_transport = proxy:pgsql:/etc/postfix/pgsql-transport.cf 还是我错了?
    • 您打算使用哪种传输方式? dovecot-lda 还是 lmtp?别的东西?听起来你有很多事情要做。在使用 mysql 后端设置 postfixadmin 时,我使用了以下演练。 rosehosting.com/blog/…
    • 实际上它有点复杂,因为我需要使用smtp 传送到不同的内部主机,以便此设备充当传入电子邮件的边缘设备,然后在此处处理在发送到实际的邮件服务器之前。这样,我也消除了弹跳不存在的域或地址的负担。我会查看链接,看看它是否对我有进一步帮助
    • 您需要域上的传输映射来确定在哪里中继它们。传统方式是在 /etc/postifx/transport_maps 文件中,格式类似于domain.com smtp:[mx.domain.com]:25
    • 那么直接从 SQL 返回应该是一样的吗?
    猜你喜欢
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多