두 개의 Exim 서버 및 리디렉션

두 개의 Exim 서버 및 리디렉션

제가 해결하려고 노력하는 것은 약간 모호한 문제이므로 도움을 요청해야 합니다.

우리 사용자는 서로 멀리 떨어져 있는 두 개의 큰 건물로 나누어져 있으므로 두 개의 독립적인 메일 서버를 설정하여 각 서버가 해당 건물에 메일을 제공하도록 했습니다. 주요 목적은 연결이 끊긴 경우 외부 메일을 일시적으로 사용할 수 없더라도 사용자가 건물 내에서 동료에게 메일을 보낼 수 있다는 것입니다. 각 건물은 자체 메일 도메인을 사용합니다. 설정은 간단하고 잘 작동합니다.

스팸 방지 및 관리 목적을 위해 각 서버에 동일한 (전체) 사용자 테이블이 있지만 각 상자에는 해당 사용자가 위치한 건물을 나타내는 "B1" 또는 "B2"가 표시되어 있습니다. 우리는 사서함 테이블과 리디렉션 테이블을 SQL 테이블에 저장했으므로 exim 구성 라인에 "WHERE which_server='B1'" 조건을 추가하여 이를 구별하는 데 문제가 없었습니다.

예상치 못한 것은 리디렉션/별명과 관련하여 메일이 중복되는 것입니다. 예는 다음과 같습니다.

사용자라고 해보자사용자1~에건물 1사서함을 사용합니다[이메일 보호됨], 사용자 동안사용자 2~에건물 2사서함을 사용합니다[이메일 보호됨]. 지금까지는 문제가 없습니다. 서로 메일을 보낼 수 있고 외부 사용자도 메일로 연락할 수 있습니다.

이제 각 메일 서버에 일부 리디렉션을 추가한다고 가정해 보겠습니다. 이렇게 말해보세요:

[이메일 보호됨]->[이메일 보호됨],[이메일 보호됨],[이메일 보호됨]

지금부터 메일로[이메일 보호됨]로 이동[이메일 보호됨], server1의 메일 서버는 3개의 복사본을 만들고 3개의 별도 메시지로 추가로 보냅니다(두 개는 b2.domain.com 서버로 이동하고 하나는 Gmail 서버로 이동합니다). 이제 이러한 메시지가 b2.domain.com의 서버에 도착하면 자체 SQL 테이블을 사용하여 다시 리디렉션을 수행하므로 메시지가 복제됩니다.

이 문제를 해결하는 우아한 방법을 놓친 것 같으니 올바른 방법을 알려 주시겠습니까?

미리 감사드립니다!

답변1

별칭 테이블 확장을 분석할 때 사용하지 않는 강력한 지표가 하나 있습니다. 즉, 이메일이 외부에서 왔는지 아니면 다른 건물에서 왔는지(하나 이상의 호스트 이름 또는 IP)입니다. B1의 별칭 확장이 B2에서 전송될 때 중복된 방식으로 실패하는 것이 문제인 경우 소스가 B2이면 별칭 확장을 건너뜁니다. ACL에서는 이 작업이 로 수행되지만 hosts = !+B2귀하의 경우에는 이 결정을 내려야 하는 곳이 라우터입니다. 이를 위해 연결 ACL 또는 메일 ACL을 설정합니다.

warn hosts = +B2
     set acl_c_other_building = 1

그런 다음 별칭 라우터에서 다른 건물의 경우 false/no를 반환하는 조건을 추가할 수 있습니다.

condition = ${if eq{$acl_c_other_building}{1} {no}{yes}}

이 논리가 적용되면 아마도 다음 라우터가 사서함 배달을 처리하고 해당 메시지를 로컬로 배달하는 라우터일 것입니다.

예상대로 작동하면 다른 건물에서 반대 작업을 수행합니다.

답변2

주요 문제는 일관되지 않은 메일 환경인 것 같습니다. 한편으로는 두 서버를 동일한 내부 서버(동일한 별칭 규칙)처럼 취급하지만, 다른 한편으로는 하나의 도메인만 담당하므로 서로를 다른 원격 메일 서버처럼 취급하므로 리디렉션 중복이 발생하게 됩니다. .

MTA 라우팅 수준에서 이 분산 설정을 처리하는 대신 두 서버 모두에 동일한 도메인 구성을 제공하는 것이 좋습니다. 즉, 두 서버가 두 도메인을 모두 로컬로 처리하고 로컬 사서함에 전달한 다음 이러한 사서함을 두 서버 간에 복제하도록 하는 것입니다. 예를 들어 비둘기장을 사용하는 서버마스터-마스터 복제

관련 정보