SELinux 正在阻止從 Amavis 回到自身的連接:無法進出?
在這裡執行一個全新的 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 的消息回饋給自身。
所以整個方案現在看起來像這樣:
- 25/smtp -> 後綴 -> smtp-amavis/10024
- 10024 -> Amavis:掃描 -> 10025
- 10025 -> 後綴 -> 傳遞
- 587/送出 -> 後綴 -> smtp-amavis/10026
- 10026 -> Amavis 發起:掃描和 DKIM 標誌 -> 10025