Sendmail: 로컬 및 비로컬 주소에 대한 캐치올

Sendmail: 로컬 및 비로컬 주소에 대한 캐치올

모든 메일(즉, 모든 사용자와 모든 도메인, 로컬이 아닌 메일까지 포함)을 허용하고 이를 단일 로컬 포괄 편지함에 넣는 테스트 환경을 위한 메일 서버 구성을 설정해야 합니다.

내가 가지고 있는 것은 Sendmail(8.14)이 포함된 SLES 11이며 /etc/mail/virtusertable을 다음과 같이 수정하려고 했습니다.

@ catchall

또는 좋아한다

@* catchall

하지만 아무 소용이 없습니다 - 대상 메일 주소(예:"[이메일 보호됨]")은 다시 작성되지 않습니다.캐치올@이므로 적절한 MX로 전달이 시도됩니다.

# sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,0 [email protected]
canonify           input: santa @ northpole . org
Canonify2          input: santa < @ northpole . org >
Canonify2        returns: santa < @ northpole . org . >
canonify         returns: santa < @ northpole . org . >
parse              input: santa < @ northpole . org . >
Parse0             input: santa < @ northpole . org . >
Parse0           returns: santa < @ northpole . org . >
ParseLocal         input: santa < @ northpole . org . >
ParseLocal       returns: santa < @ northpole . org . >
Parse1             input: santa < @ northpole . org . >
MailerToTriple     input: < > santa < @ northpole . org . >
MailerToTriple   returns: santa < @ northpole . org . >
Parse1           returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >
parse            returns: $# esmtp $@ northpole . org . $: santa < @ northpole . org . >

조회 테이블의 소스 도메인 부분에서는 와일드카드가 지원되지 않는 것 같습니다.

Sendmail로 이것을 어떻게 구현합니까?

편집하다:에 따라Andrzej의 코멘트나는 메일러 가능한 항목을 시도했습니다

. local:catch-all-outgoing

게다가

.. local:catch-all-outgoing

sendmail -bv두 경우 모두에 대해 동일한 출력을 받았습니다 .

# sendmail -d60.5 -bv [email protected]
map_lookup(dequote, root, %0=root) => NOT FOUND (0)
map_lookup(host, example.net, %0=example.net) => example.net. (0)
[email protected]... deliverable: mailer esmtp, host example.net., user [email protected]

(예, 루트입니다. sendmail루트가 아닌 사용자로는 실행할 수 없는 것 같습니다.)

편집하다:알고 보니 매크로 파일에서는 mailertable 기능이 활성화되어 있지 않았기 때문에 sendmail.cf에는 작동을 위한 적절한 재작성 규칙이 포함되어 있지 않았습니다.

답변1

여기서 겪고 있는 상황은 /etc/mail/virtusertable아웃바운드가 아닌 인바운드 이메일에만 국한되어 있다고 생각합니다.

mailertable 또는 SMART_HOST의 기본 경로를 사용하여 로컬이 아닌 모든 메시지를 하나의 로컬 사서함/별칭으로 전달할 수 있습니다.

mailertable entry:
. local:catch-all-outgoing

aliases:
catch-all-outgoing: some-local-account

점으로 시작하지 않는 LHS 항목은 표시된 전체 호스트 이름과 일치합니다. 점으로 시작하는 LHS 항목은 해당 도메인 이름으로 끝나는 모든 항목과 일치합니다(선행 점 포함). 즉, 비어 있지 않은 문자 시퀀스에 대해 선행 ".+" 정규식 패턴이 있는 것으로 생각할 수 있습니다.

RHS는 항상 "mailer:host" 쌍이어야 합니다. 메일러는 메일러의 구성 이름입니다(즉, sendmail.cf 파일의 M 행). "호스트"는 해당 메일러에 전달된 호스트 이름입니다.

(참조:센드메일 읽어보기, "메일러 테이블 사용" 섹션)

그래서 다음과 같습니다.

. local:catch-all-outgoing(단 하나의 점만Adrzej의 코멘트) /etc/mail/mailertable에 있으면 모든 domain.tld가 sendmail.cf에 정의된 로컬 메일러 구성으로 리디렉션됩니다. 별칭을 사용하여 호스트 이름을 잡아서 catch-all-outgoing로컬 이메일 주소로 만듭니다.

메일러 테이블이 작동하려면 구성에서 활성화해야 합니다. 첨가

FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl

구성을 생성하는 m4 매크로 파일에 추가하면 이를 처리해야 합니다.

또한 sendmail 사이트 도움말 파일에서:

우편물 발송 가능:

특정 도메인에 대한 라우팅을 무시하는 데 사용할 수 있는 "메일러 테이블"을 포함합니다.({w} 클래스에 속하지 않음, 즉 로컬 호스트 이름). FEATURE의 인수는 키 정의일 수 있습니다. 아무것도 지정되지 않은 경우 사용되는 정의는 다음과 같습니다.

해시 /etc/mail/mailertable

이 데이터베이스의 키는 정규화된 도메인 이름이거나 점이 앞에 오는 부분 도메인입니다(예: "vangogh.CS.Berkeley.EDU" 또는 ".CS.Berkeley.EDU").후자의 특별한 경우로서 "." 다른 키에 포함되지 않는 모든 도메인과 일치합니다.값은 메일러:도메인 형식이어야 합니다.

여기서 "mailer"는 내부 메일러 이름이고 "domain"은 메시지를 보낼 위치입니다. 이러한 맵은 메시지 헤더에 반영되지 않습니다.특별한 경우로, local:user 형식은 로컬 메일러를 사용하여 지정된 사용자에게 전달됩니다.

답변2

Sendmail: 로컬 및 비로컬 주소에 대한 캐치올

SMART_HOST로컬이 아닌 도메인과 MAIl_HUB로컬 이메일 도메인에 대해 정의할 수 있습니다 .

sendmail.mc:

define(`SMART_HOST',`local:some_existing_user')dnl
define(`MAIL_HUB',`local:some_existing_user')dnl
dnl optional part to list local users/mailboxes excluded from the redirect
dnl in /etc/mail/direct-users file (one user per line)
LOCAL_CONFIG
FL/etc/mail/direct-users
divert(0)

추신

echo '$=w' | sendmail -bt로컬 이메일 도메인 목록을 가져오는 데 사용합니다 . Sendmail은 기본적으로 자동으로 채워줍니다.

mailertable을 사용하여 일부 외부 도메인을 리디렉션에서 제외할 수 있습니다.

example.net %0

관련 정보