為了封鎖郵件轉送活動,首先 MTA 必須能夠區分源自您站點的內部郵件和源自網際網路,並透過您的系統回到網際網路的外部郵件。前者是您要允許的郵件,後者是您要封鎖的郵件。可以在內送 SMTP 通道 (通常為 tcp_local 通道) 上使用 switchchannel 關鍵字區分這兩種郵件,依預設已設定此項。
switchchannel 關鍵字可讓 SMTP 伺服器查找與內送 SMTP 連線關聯的實際 IP 位址。Messaging Server 使用該 IP 位址以及您的重寫規則區分源自您網域內部的 SMTP 連線和來自您網域外部的連線。然後,可以使用此資訊來分離內部郵件通訊和外部郵件通訊。
下面描述的 MTA 配置是依預設設定的,在此配置下,伺服器可以區分內部郵件通訊和外部郵件通訊。
在配置檔案中,在本機通道的前面是帶有 noswitchchannel 關鍵字的 defaults 通道:
! final rewrite rules defaults noswitchchannel ! Local store ims-ms ... |
內送 TCP/IP 通道指定 switchchannel 和 remotehost 關鍵字,例如:
tcp_local smtp single_sys mx switchchannel remotehost TCP-DAEMON |
在送進的 TCP/IP 通道定義的後面是具有不同名稱的類似通道;例如:
tcp_intranet smtp single_sys mx allowswitchchannel routelocal tcp_intranet-daemon |
向通道重寫位址時,routelocal 通道關鍵字會使 MTA 嘗試使通過此通道的位址中所有明確的路由「短路」,從而阻斷經由明確來源路由的位址、以透過內部 SMTP 主機循環的方式進行的可能轉送嘗試。
使用上述配置設定,網域內產生的 SMTP 郵件將經由 tcp_intranet 通道進來。所有其他 SMTP 郵件將經由 tcp_local 通道進來。系統將根據郵件進來的通道區分內部郵件和外部郵件。
這是如何實現的?關鍵是 switchchannel 關鍵字。此關鍵字被套用至 tcp_local 通道。當郵件進入您的 SMTP 伺服器時,此關鍵字會使伺服器查找與送進的連線關聯的來源 IP 位址。伺服器將嘗試對送進的連線的實際 IP 位址進行反向訊息封重寫,以查找關聯的通道。如果來源 IP 位址匹配 INTERNAL_IP 對映表中的 IP 位址或子網路,則呼叫該對映表的重寫規則會使位址被重寫到 tcp_intranet 通道。
由於 tcp_intranet 通道標記有 allowswitchchannel 關鍵字,因此郵件會被切換到 tcp_intranet 通道並從該通道進入。如果郵件從其 IP 位址不在 INTERNAL_IP 對映表中的系統進入,則反向指向訊息封重寫可能會重寫到 tcp_local 通道,也可能會重寫到其他通道。但是,它不會重寫到 tcp_intranet 通道,並且由於其他通道依預設標記有 noswitchchannel,因此該郵件也不會切換到其他通道,而將保留在 tcp_local 通道中。
請注意,使用字串「tcp_local」的所有對映表或轉換檔案項目可能需要根據用法變更為「tcp_*」或「tcp_intranet」。