일부 도메인이 컴퓨터(Linux, Ubuntu 13.x)에 호스팅되어 있고 Postfix 2.10.2-1을 사용하여 해당 도메인으로 메일을 라우팅하려고 합니다. (저는 지난 10년간 sendmail을 사용해왔기 때문에 처음입니다.) 모든 MX
기록이 이에 맞춰 설정되어 있어서 외부 메일은 정상적으로 메일함에 도착합니다.
나는 다양한 온라인 튜토리얼을 따랐으며 내 구성에는 다음과 같은 관련 줄이 있습니다.
main.cf
-------
myhostname = foo.a.com
myorigin = /etc/mailname # this just has 'a.com' inside it
mydestination = a.com localhost.localdomain localhost
virtual_alias_domains = b.com c.org
virtual_alias_maps = hash:/etc/postfix/virtual
현재는 모든 도메인의 포스트마스터에게 전송된 모든 메일이 포스트마스터 계정으로 이동하고, 모든 도메인의 다른 사람에게 전송된 모든 메일이 연결된 계정으로 이동하기를 원합니다.
virtual
-------
[email protected] postmaster
@a.com userA
[email protected] postmaster
@b.com userB
[email protected] postmaster
@c.org userC
안타깝게도 이 도메인의 모든 사람에게 전송된 모든 메일은 다음 주소로 라우팅됩니다.사용자A. 자세한 로깅을 활성화할 때까지 가상 도메인이 존중되지 않는다고 생각했습니다. 그러나 자세한 로깅을 활성화하면 들어오는 모든 메시지에서 다음과 같은 현상이 발생합니다.
mail.log
--------
...
postfix/cleanup: maps_find: virtual_alias_maps: hash:/etc/postfix/virtual(0.lock|fold_fix): @b.com = userB
postfix/cleanup: mail_addr_find: [email protected] -> userB
postfix/cleanup: send attr request = rewrite
postfix/cleanup: send attr rule = local
postfix/cleanup: send attr address = userB
그러나 그런 다음 trivial-rewrite가 다시 실행되고(이 특정 메시지에 대해 약 80번째 동안) 결정합니다.사용자 B실제 최종 Unix 계정 수신자가 아니라 다음을 나타내는 이메일 주소입니다.근원성(또는 첫 번째 요소를 선택하는 것일 수도 있습니다.내 목적지...더 의미가 있을 것입니다).
postfix/trivial-rewrite: master_notify: status 0
postfix/trivial-rewrite: rewrite socket: wanted attribute: request
postfix/trivial-rewrite: input attribute name: request
...
postfix/trivial-rewrite: 'local' 'userB' -> '[email protected]' # <-- d'oh!
postfix/trivial-rewrite: send attr flags = 0
postfix/trivial-rewrite: send attr address = [email protected]
postfix/trivial-rewrite: master_notify: status 1
그럼 postfix/cleanup
인수해
postfix/cleanup: maps_find: virtual_alias_maps: hash:/etc/postfix/virtual(0.lock|fold_fix): @a.com = userA
postfix/cleanup: mail_addr_find: [email protected] -> userA
postfix/cleanup: send attr request = rewrite
postfix/cleanup: send attr rule = local
postfix/cleanup: send attr address = userA
그리고 결론을 내렸다:사용자A진정한 Unix 계정 수신자가 되십시오.
나는 Postfix에 대해 거의 아무것도 모르지만 로그를 보면 두 번의 재작성을 실행하고 두 번 연속으로 동일한 결과를 얻은 후에만 최종 수신자 주소를 결정합니다. 로컬 계정을 해석하지 못하도록 방지하는 방법사용자 B로서이메일 주소 사용자B@내 목적지[0]? 로컬을 찾는 즉시 중지하고 싶습니다.사용자 B그럼 그에게 주세요.
상장할 수 없나요?@mydestination[0]/etc/postfix/virtual에서? 이것이 내 현재 문제를 해결할 수는 있지만(이 사용자는 시스템의 실제 Unix 사용자이므로 메일이 올바른 위치로 이동하므로) Postfix는 여전히 생각합니다.[이메일 보호됨]최종 수신자입니다. 이것은 나에게 잘못된 것 같습니다. 그것은 단지 알아야만 한다사용자 B그것은 유닉스 계정이고 그게 전부입니다.
답변1
기술적으로 이것은 답변이 아니지만 아마도 얻을 수 있는 가장 좋은 답변일 것입니다. 나는 수년에 걸쳐 많은 sendmail 매핑을 사용해 왔습니다. 가장 좋은 방법은 그것을 분해하고 더 간단하게 만드는 것입니다. 지도에 도메인 중 하나만 포함하도록 만들고 해당 도메인에 와일드카드를 적용한 다음 거기에서 빌드하세요.
sendmail -bv 플래그와 같은 sendmail 진단 플래그를 사용하면 더 쉽게 만들 수 있습니다.
답변2
그래서 질문 끝에 제안한 방식으로 문제를 해결할 수 있었지만 가상 도메인을 피하는 것이 올바른 접근 방식일 수도 있다는 결론도 내렸습니다.
첫째, 원래 제안된 솔루션은 파일에 대한 참조를 a.com
제거하는 것입니다 .virtual
virtual
-------
#[email protected] postmaster
#@a.com userA
[email protected] postmaster
@b.com userB
[email protected] postmaster
@c.org userC
이 작업을 수행한 후 더미 번역 b.com
및 c.org
생성[이메일 보호됨]그리고[이메일 보호됨]역시 a.com
출품작 중 하나이므로 mydestination
,접미사/로컬실사를 통해 배송사용자 B이메일 주소 /var/mail/userB
및사용자C받는 사람 /var/mail/userC
.
물론 원래 질문에서 우려했던 것처럼 여전히 다음과 같은 결론에 이르게 됩니다.a.com이 모든 사용자의 최종 홈 도메인이 이상한 것 같아요. 그렇다면 확실한 해결책은 가상 도메인을 전혀 사용하지 않는 것입니다. 가상 도메인의 요점은 다음에서 메일을 수락하는 것입니다.아니요시스템의 실제 Unix 사용자입니다. 하지만 내 모든 포괄 사용자는예시스템의 실제 Unix 사용자이므로 로컬을 사용해야 합니다.별명:
/etc/aliases
------------
admin: postmaster
www: postmaster
@a.com: userA
@b.com: userB
@c.com: userC
virtual
도메인을 사용하지 않고도 포괄 주소를 가질 수 있습니다 .