如何使 Postfix 使用 PostgreSQL 进行中继信息和接受域

How to make Postfix use PostgreSQL for relay information and accepted domains

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

我已经从 CentOS Plus 软件库安装了 Postfix,因此它可以在安装时支持 PostgreSQL。

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

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

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

基本思路是根据内部服务器和我的实验室环境中托管的电子邮件帐户的需要,使用域和目的地填充 table。

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 中修改哪些内容才能使后缀使用上述查询从数据库中实际读取

您需要在 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