在这里运行新的 CentOS8 安装,MTA 是连接了 Amavis 的 Postfix。我想让 Amavis 在(内部)DKIM 签名后将来自 ORIGINATING 的消息(从端口 587/Postfix 通过 10026/Amavis 传入的提交)注入到 Amavis(端口 10024) 。但是端口 10024 已被分配用于侦听来自 25/Postfix 的传入 smtp 连接,因此我无法将其添加为 SELinux 配置中的发送端口。
消息流:
- 25/smtp -> 后缀 -> smtp-amavis/10024
- 10024 -> 阿马维斯:扫描 -> 10025
- 10025 -> 后缀 -> 投递
- 587/提交 -> Postfix -> smtp-amavis/10026
- 10026 -> Amavis 起源:扫描和 DKIM 签名 -> smtp-amavis/10024
我遇到的问题是 SELinux 不允许我将来自最后一个流的消息反馈到端口 10024 上的 smtp-amavis(Amavis 到 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 后面必须有一个服务来传递传出(即提交)消息
该走哪条路,又该怎么做?
答案1
结果我发现了最明显的解决方案(遵循错误的在线配方):将 Amavis ORIGINATING 流反馈回端口 10025,以便由 Postfix 交付(从而在 Amavis 单独处理后汇集 25/smtp 和 587/submission 流)。这也规避了 SELinux 问题,因为不再需要将来自 Amavis 的消息反馈回自身。
所以整个方案现在看起来像这样:
- 25/smtp -> 后缀 -> smtp-amavis/10024
- 10024 -> 阿马维斯:扫描 -> 10025
- 10025 -> 后缀 -> 投递
- 587/提交 -> Postfix -> smtp-amavis/10026
- 10026 -> Amavis 起源:扫描和 DKIM 签名 -> 10025