在此处运行全新的 CentOS8 安装,MTA 是连接了 Amavis 的 Postfix。我想让 Amavis 在(内部)DKIM 签名后将来自 ORIGINATING 的消息(从端口 587/Postfix 到 10026/Amavis 的传入提交)注入 Amavis(端口 10024) . 但是端口 10024 已经被分配用于监听来自 25/Postfix 的传入 smtp 连接,所以我不能将它添加为 SELinux 配置中的发送端口。
消息流:
- 25/smtp -> 后缀 -> smtp-amavis/10024
- 10024 -> Amavis:扫描 -> 10025
- 10025 -> 后缀 -> 交付
- 587/提交 -> 后缀 -> smtp-amavis/10026
- 10026 -> Amavis 发起:扫描和 DKIM 标志 -> smtp-amavis/10024
我遇到的问题是 SELinux 不允许我在端口 10024(Amavis 到 Amavis)将来自最后一个流的消息反馈到 smtp-amavis,因为该端口已被分配用于接收:
[root@services amavisd]# semanage port -l | grep 1002
amavisd_recv_port_t tcp 10026, 10024
amavisd_send_port_t tcp 10027, 10025
spamd_port_t tcp 783, 10026, 10027
有趣的是,当我分别添加到 amavisd_recv_port_t 和 amavisd_send_port_t 时,SELinux 并没有抱怨端口 10026、10027 已经分配给 spamd:
[root@services amavisd]# semanage port -lC
SELinux Port Type Proto Port Number
amavisd_recv_port_t tcp 10026
amavisd_send_port_t tcp 10027
我怎样才能解决这个问题?因为 SELinux 也不允许我添加 10024 作为发送端口:
[root@services amavisd]# semanage port -a -t amavisd_send_port_t -p tcp 10024
ValueError: Port tcp/10024 already defined
还是我完全走错了路,并且提交的消息根本不应该通过端口 10024 反馈到 Amavis(这使得这是一个 Amavis 而不是 SELinux 问题)?最初,Amavis 配置将提交的消息转发到端口 10027 以供 OpenDKIM 进行(外部)DKIM 签名,如您在此处看到的:
# forward to a smtpd service providing DKIM signing service
#forward_method => 'smtp:[127.0.0.1]:10027',
forward_method => 'smtp:[127.0.0.1]:10024',
所以最后一个流程最初是:
- 10026 -> Amavis 发起:扫描 -> OpenDKIM@10027:签名 -> 交付
但是 OpenDKIM 还不能用于 CentOS8(以前是通过 EPEL 存储库),而且 Amavis 现在支持我正在尝试使用的内部 DKIM 签名服务。
所以我看到有两种方法:
- 配置 SELinux,以便它可以将来自提交流的 DKIM 签名消息送回基本的 smtp 流(假设这个有点循环的设置有效)
- 保留原始的 Amavis 配置,这意味着必须在端口 10027 后面有一个服务来传递传出(即提交的)消息
走哪条路,怎么做?
事实证明,我监督了最明显的解决方案(遵循不正确的在线配方):将 Amavis ORIGINATING 流送回端口 10025 以通过 Postfix 交付(从而在 Amavis 单独处理后汇集 25/smtp 和 587/submission 流)。这也规避了 SELinux 问题,因为不再需要将来自 Amavis 的消息反馈给自身。
所以整个方案现在看起来像这样: