localhost가 아닌 MX 레코드를 통해 메일을 보내도록 sendmail을 어떻게 구성합니까?


8

MX 레코드에 지정된 서버로 메일을 전송하기 위해 sendmail을 얻으려고합니다. 서버가 me@domain.com으로 이메일을 보낼 때 localhost를 건너 뛰고 gmail로 바로 가고 싶습니다.

sendmail 문서를 살펴 보았지만 내 상황을 설명하는 방법을 이해하지 못합니다. 기본적으로 내 서버의 호스트 이름은 'www.domain.com'이지만 'me@domain.com'으로 이메일을 보내면 로컬 메일 스풀로 끝납니다.

디버그 모드에서 sendmail을 실행할 때 :

sendmail -bt
> $=w

나는 얻다:

www.domain.com
www.domain.com.
domain.com
localhost
[54.245.___.___] 

따라서 모든 발신 메일을 (으)로 가로 채고 domain.com있습니다. 나는 그것이 도착하기를 원하지 않습니다 localhost. Gmail 서버로 가고 싶습니다.

다른 주소로 묶인 모든 메일은 정상적으로 작동합니다. 또한 DKIM을 사용하도록 sendmail을 구성했습니다.

mailertable에 레코드를 추가하고 mailertable.db를 다시 작성하고 mc> cf 파일을 다시 컴파일했습니다.하지만 이것이 내가 필요한지 또는 올바르게 수행하고 있는지 확실하지 않습니다.

domain.com esmtp:[aspmx.l.google.com]

users@domain.com의 메일이 서버를 떠나도록하려면 어떻게해야합니까?

추가 정보 : 다음은 sendmail.mc 파일입니다.

divert(-1)dnl

include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for linux')dnl
OSTYPE(`linux')dnl

define(`confDEF_USER_ID', ``8:12'')dnl

define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST', `True')dnl
define(`confDONT_PROBE_INTERFACES', `True')dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl

define(`confTO_IDENT', `0')dnl

FEATURE(`no_default_msa', `dnl')dnl
FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl

FEATURE(local_procmail, `', `procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

FEATURE(`accept_unresolvable_domains')dnl
FEATURE(`relay_based_on_MX')dnl
FEATURE(`relay_entire_domain')dnl

LOCAL_DOMAIN(`localhost.localdomain')dnl

MASQUERADE_AS(`domain.com')dnl
MASQUERADE_DOMAIN(`localhost.localdomain')dnl

EXPOSED_USER(`root')dnl

FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl

INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')

MAILER(smtp)dnl
MAILER(procmail)dnl

1
질문의 논리에 완전히 결함이 있습니다. "Sendmail을 사용하여 메일을 보내고 싶지 않습니다. Sendmail이 기본적으로 메일을 보내는 방식과 정확히 일치하도록 추가 구성으로 Sendmail을 다시 구성하려면 어떻게해야합니까?"로 요약됩니다. 답 : 그대로 두십시오. 실제로 수행 하려는 작업을 수행 하려면 질문을 완전히 다시 작성 하거나 서버 구성에서 방해를 멈추고 중단하지 않고 수행하도록하십시오.
Sammitch

1
알았어 또는 서버가 아닌 서버에서만 전자 메일을 보내려면 어떻게 해야하는지 설명하십시오.
Octopus

답변:


8

나는 마침내 여기 에서 다소 포괄적 인 해결책을 찾았다 . 요약하면 여러 가지 옵션이 있습니다 (대부분 다른 답변에서 언급되었지만 특정 시나리오에서 작동하지 않은 이유는 무엇이든).

옵션 1 : / etc / mail / local-host-names에서 항목 제거

나를 위해이 파일은 이미 비어있었습니다

옵션 2 : mc 파일에서 LOCAL_DOMAIN 항목을 제거하십시오.

나는 아무도 없었다

옵션 3 : 센드 메일에 프로브 인터페이스를 알리지 않음

define(`confDONT_PROBE_INTERFACES', `true')dnl

내 경우에는 이것이 설정되었지만 문제가 발생한 호스트는 여전히 sendmail의 클래스 w에 있습니다.

옵션 4 : 서버 이름을 바꿉니다. 위에 제공된 외부 링크는 "w 클래스에서 whipple.org를 제거하려면 서버 이름을 frodo.whipple.org, www.whipple.org, elvis.whipple.org로 바꿀 수 있습니다"라고 말합니다.

나를 위해 이것은 충분하지 않았다. 호스트 이름이 www.domain.com 인 sendmails 클래스에는 여전히 www.domain.com과 domain.com이 모두 포함되어 있습니다 (재부팅 한 후에도)

옵션 5 :이 기능은 sendmail mc 파일에 LOCAL_RULE_0을 추가합니다.

LOCAL_RULESETS
LOCAL_RULE_0
R$* < @domain.com. > $*  <tab>$#esmtp $@ mail.domain.com $: $1<@domain.com.>$2

파일의 끝 부분에 들어가야 <tab>하며 실제 탭 문자 여야합니다.


옵션 5를 사용하고 bestmx맵을 사용하여 일반화합니다.
adamo

이것은 완벽하게 작동합니다. Octopus LOCAL_RULESETS LOCAL_RULE_0 R $ * <@ domain.com에 감사드립니다. > $ * <tab> $ # esmtp $ @ mail.domain.com $ : $ 1 <@ domain.com.> $ 2 파일의 끝 부분으로 이동해야하며 <tab> 실제로 탭 대신 키를 사용해야합니다 코드.
Vinodh Kumar

7

서버의 호스트 이름을 변경하십시오. 호스트 이름이 기본 도메인 이름과 동일한 유효한 이유는 없습니다.


예, 호스트 이름을 www.domain.com으로 설정하더라도 sendmail은 www.domain.com, domain.com 및 localhost에 대한 모든 것을 바인딩하려고합니다. 디버그 모드에서 sendmail을 실행하고 $ = w를 입력하면 알 수 있습니다. 나는 설명하기 위해 그 질문을 약간 바꾸었다.
Octopus

3

귀하의 질문에 대한 나의 이해는 다음과 같습니다.

  1. Sendmail을 설치하여 웹 사이트에서 전자 메일을 보낼 수 있습니다.

  2. Sendmail을 공용 DNS 네임 스페이스의 신뢰할 수있는 전자 메일 서버로 구성했습니다.

  3. Sendmail이 퍼블릭 DNS 네임 스페이스에 대한 권한을 갖기를 원하지 않습니다. 공개 DNS 네임 스페이스로 전송 된 이메일을 Google 호스팅 이메일로 전송하려고합니다.

해결 방법 : 공용 DNS 네임 스페이스에 대해 권한이 없도록 Sendmail을 재구성하십시오.


2
내 질문은 sendmail 구성에 관한 것입니다. 답변이 "Sendmail 재구성"보다 더 구체적 일 수 있습니까?
Octopus

0

sendmail 구성에 익숙하지는 않지만 MX 레코드와 관련하여 올바른 작업을 수행해야한다고 생각합니다. 그러나 DNS 조회의 우선 순위에서 sendmail이 먼저 로컬 호스트 파일을 참조 할 가능성이 있다고 생각합니다./etc/hosts DNS 서버를 사용하기 전에 대부분의 유닉스 기반 운영 체제 을 합니다. 이 경우 호스트 파일에 호스트 이름으로 설정 한 경우 컴퓨터를 domain.com으로 참조하는 항목이 호스트 파일에있는 경우 계속 진행될 수 있습니다. 이 특정 경우 항목을 수정하거나 새 항목을 추가하여 필요에 맞게 호스트 파일을 편집 할 수 있습니다.

또는 URL을 확인할 때 로컬 시스템 호스트 파일을 무시하도록 sendmail을 구성 할 수 있습니다. 어떻게 해야할지 모르겠습니다.


0

1) Sendmail은 자동으로 로컬 이메일 도메인 목록 ( $=w)을 채 웁니다 .

sendmail.mc에서 다음 줄을 사용하여 끌 수 없습니다.

define(`confDONT_PROBE_INTERFACES',`True')

/etc/mail/local-host-names파일에 "수동으로"로컬 이메일을 추가 할 수 있습니다 .
(이후 sendmail 데몬을 HUP하거나 ​​재시작해야합니다)

2) Sendmail은 "이 호스트 이메일 이름"( $j)을 로컬 이메일 도메인 목록에 추가 (자동 구성) 할 수 있습니다 .

"이 호스트 이메일 이름"을 정의 할 수 있습니다

define(`confDOMAIN_NAME',`hostname.example.net')

3) mailertable에 나열된 도메인으로의 배송에 대해서는 문의 하지 않습니다$=w .


그러나 define ( confDONT_PROBE_INTERFACES',True ')은 이미 활성화되어 있으며 항상 활성화되어 있습니다.
Octopus

따라서 귀하의 사례는 옵션 2로 다룰 수 있습니다.
AnFi

이것들은 모두 완전히 탐구 한 좋은 제안이지만 옵션 2는 local-host-names 파일에 호스트를 추가하는 것과 동일하다고 생각합니다. 이 경우 호스트를 포함하지 않는 호스트를 제외하고 싶습니다.
Octopus

0

메일을 보내는 코드, 전체 이메일 주소를 사용 중입니까, 아니면 서버가 로컬 계정을 통해 메일을 발송하고 있습니까? 때문에:

이것은 sendmail에게 모든 메일을 users@localhost.localdomain에 로컬로 전달하도록 지시합니다.

LOCAL_DOMAIN(`localhost.localdomain')dnl

그리고 이것은 sendmail에게 로컬 주소의 도메인을 domain.com으로 다시 쓰도록 지시하지만 로컬 배달은 변경하지 않습니다 .

MASQUERADE_AS(`domain.com')dnl
MASQUERADE_DOMAIN(`localhost.localdomain')dnl

알았어 또는 서버가 아닌 서버에서만 전자 메일을 보내려면 어떻게 해야하는지 설명하십시오.

1 단계 : 기본 구성으로 돌아갑니다.
2 단계 : 기본 구성을 사용하십시오.


예, 맞습니다 만, user@domain.com으로 보내겠습니다. 기본 설정에는 질문에서 설명한 것과 똑같은 문제가 있습니다.
Octopus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.