答案1
正如@masegaloeh 所建议的,我所做的是:
在 main.cf 中
smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf
check_sender_access
这告诉 postfix在发送邮件之前对每个发件人执行限制。mysql:/etc/postfix/mysql-virtual_sender.cf
包含执行检查所需的 SQL 查询。如果查询的结果是,"REJECT"
那么 postfix 将拒绝发送来自该发件人的邮件。所以我们想要创建一个数据库,添加一个访问表,并且对于我们想要禁止的每个发件人,我们将插入一行带有“REJECT”值的行。要解除禁令,我们将该值更新为“PERMIT”。另一个可能的值是“DEFER”。(见postfix 文档)
我正在管理一个显然使用 ISPConfig 配置的服务器,因此我已经找到了一个现成的数据库、表和配置文件。我刚刚插入了一个新行。
在 /etc/postfix/mysql-virtual_sender.cf 中
root@messagerie-test[10.10.10.26]/home/serveur # cat /etc/postfix/mysql-virtual_sender.cf
user = ispconfig
password = xxx
dbname = dbispconfig
table = mail_access
select_field = access
where_field = source
additional_conditions = and type = 'sender' and active = 'y' and server_id = 1
hosts = 127.0.0.1
root@messagerie-test[10.10.10.26]/home/serveur #
这为 Postfix 提供了执行查询所需的信息。数据库为dbispconfig
,要查询的表为mail_access
,要查询的字段(将保存"REJECT"
值的字段为)"access".
Postfix 将提供发件人的电子邮件,并将其与"source"
字段(WHERE
子句)进行匹配。
在dbispconfig.mail_access
表格中,这是我添加的内容
mysql> INSERT INTO mail_access (sys_userid,sys_groupid,sys_perm_user,sys_perm_group,server_id,source,access,type,active) VALUES (1,2,'ruid','ruid',1,'[email protected]','REJECT','sender','y');
Query OK, 1 row affected (0.04 sec)
mysql> select * from mail_access;
+-----------+------------+-------------+---------------+----------------+----------------+-----------+---------------------------+--------+--------+--------+
| access_id | sys_userid | sys_groupid | sys_perm_user | sys_perm_group | sys_perm_other | server_id | source | access | type | active |
+-----------+------------+-------------+---------------+----------------+----------------+-----------+---------------------------+--------+--------+--------+
| 1 | 1 | 2 | ruid | ruid | | 1 | [email protected] | REJECT | sender | y |
+-----------+------------+-------------+---------------+----------------+----------------+-----------+---------------------------+--------+--------+--------+
1 row in set (0.00 sec)
mysql>
其他字段(访问除外)的值是从其他表借用的,它们特定于 ISPConfig,与 postfix 无关。这里的重要字段实际上是源、访问、类型和活动。这些字段位于/etc/posftix/mysql-virtual_sender.cf
我们指示 postfix 使用的配置文件中check_sender_access
。