인용하다

인용하다

저는 sendmail을 사용하여 텍스트 파일에서 매우 간단한 이메일을 보내고 있습니다. 다음은 텍스트 파일입니다.

to:[email protected]
from:[email protected]
subject:Testing

test test test

내가 보낸 것:

sendmail -t < mail.txt

내가 sendmail을 실행하고 있는 서버는 hostname.tld입니다. 이것은 /etc/hosts입니다:

12.34.56.78     hostname hostname.tld
127.0.0.1       localhost

여기서 hostname.tld는 서버의 FQDN이고 12.34.56.78은 서버의 공용 IP입니다. /etc/hostname에는 hostname.tld만 포함됩니다.

이메일을 받으면 다음 헤더를 받습니다.

Received: from hostname.tld (hostname.tld [127.0.0.1])

127.0.0.1은 필요 없고 공개 IP를 원하지만 무엇을 하든 sendmail에서 사용할 수 없습니다. 또한 다음 줄을 포함하도록 /etc/mail/sendmail.mc를 편집했습니다.

define(`confDOMAIN_NAME', `hostname.tld')dnl

그러나 그것은 아무것도 하지 않습니다.

사람들이 비슷한 문제를 겪고 있지만 해결책이 없는 것 같은 게시물을 많이 읽었습니다. 어떡해?

답변1

데몬 모드 및 MSP

위에서 언급한 IP 주소에 대한 설명은 실제로 sendmail서버 자체의 구성이 아닙니다. 최신 배포를 살펴보면 sendmail일반적으로 두 가지 구성 요소로 나뉩니다. 기존 서버(데몬 모드)실행 중인 다른 서버메일 제출자 모드(MSP). 간단한 명령으로 이를 확인할 수 있습니다 ps.

$ ps -eaf | grep send
root     24488     1  0 21:10 ?        00:00:00 sendmail: accepting connections
smmsp    24504     1  0 21:10 ?        00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue

첫 번째 줄은 데몬 모드의 sendmail이고, 두 번째 줄은 MSP 모드의 sendmail입니다. sendmail과 함께 제공되는 대부분의 배포판에는 더 낮은 권한을 가진 특수 사용자로 실행되는 MSP 변형이 있기 때문에 항상 구별할 수 있습니다. 이것은 내 CentOS 5.x 서버에서 사용자로 실행되는 것입니다 smmsp.

노트:이는 메시지 제출(MSP)과 메시지 전달(데몬 모드) 처리에 대한 책임을 분리하기 위해 수행됩니다. 사용자는 mail및 같은 명령을 사용하여 메일을 보낼 때 MSP 인스턴스에 로컬로 연결합니다 .mailx

CentOS와 같은 Red Hat 기반 배포판에서 sendmail을 처리할 때 구성 파일은 다음 위치에 있습니다 /etc/mail. 수정하려는 파일이 2개 있습니다.

  • /etc/mail/sendmail.mc
  • /etc/mail/submit.mc

첫 번째 파일은 데몬 모드 서버를 제어하고 두 번째 파일은 MSP 서버용입니다.

그런데 이러한 *.mc파일은 두 서버에서 직접 사용하는 실제 구성 파일이 아니며 일반적으로 sendmail구성이 복잡할 수 있습니다. 오래되고 다재다능하다는 점을 감안할 때 다양한 방법으로 구성할 수 있으므로 이러한 파일은 실제 구성 파일 *.mc로 "컴파일"할 수 있는 사전 구성된 파일입니다 . sendmail이러한 파일의 컴파일된 버전도 동일한 디렉터리에 있습니다.

  • /etc/mail/sendmail.cf
  • /etc/mail/submit.cf

.mc일반적으로 이 두 파일을 직접 변경하지 않고 해당 파일을 통해 변경하는 것이 좋습니다 . 일반적으로 .mc파일을 편집한 다음 디렉터리 내에서 명령을 실행합니다 make. /etc/mail내가 아는 한, 이것은 다시 redhat주의이므로 다른 배포판을 사용하면 상황이 달라질 수 있습니다.

노트:* 이 .mc파일은 다음과 같은 매크로 언어로 되어 있습니다.M4이므로 당연히 이를 컴파일하는 도구를 이라고 합니다 m4. 다음 명령을 사용하여 이러한 파일을 수동으로 컴파일할 수 있습니다.

$ m4 /etc/mail/submit.mc > /etc/mail/submit.cf

이것이 Red Hat이 카탈로그에서 제공하는 모든 부가 기능입니다 make.Makefile/etc/mail

Submit.cf에 대한 변경 사항

그렇다면 어떤 변화를 주어야 할까요? submit.mc파일 에 다음 줄을 추가해야 합니다 .

CLIENT_OPTIONS(`Family=inet, Address=<your ip here>, Name=MTA')dnl

나타나는 곳에 귀하의 IP를 추가하십시오 <your ip here>. 이렇게 변경한 후에는 submit.mc파일을 다시 생성해야 합니다 .

$ cd /etc/mail && make

파일을 다시 생성 한 후 .cf재부팅해야 합니다 sendmail.

$ /etc/init.d/sendmail restart
-or-
$ /etc/init.d/sendmail reload

완제품

위와 같이 변경하면 다음 헤더가 표시됩니다. 예를 들어 이 예에서 내 외부 IP 주소는 50.122.22.45입니다.

Return-Path: <[email protected]>
Received: from mail.sdom.com (mail.sdom.com [50.122.22.45])
    by sdom.com (8.14.3/8.14.3) with ESMTP id r5J188Gx018193
    for <[email protected]>; Tue, 18 Jun 2013 21:08:08 -0400
Received: (from root@localhost)
    by mail.sdom.com (8.14.3/8.14.3/Submit) id r5J15ua4018000;
    Tue, 18 Jun 2013 21:05:56 -0400
Date: Tue, 18 Jun 2013 21:05:56 -0400
Message-Id: <[email protected]>
to:[email protected]
from:[email protected]
subject:Testing
X-Spam-Status: No, score=-4.4 required=5.0 tests=ALL_TRUSTED,BAYES_00
    autolearn=ham version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on mail.sdom.com
X-Greylist: Sender is SPF-compliant, not delayed by milter-greylist-4.0 (sdom.com [127.0.0.1]); Tue, 18 Jun 2013 21:08:09 -0400 (EDT)

test test test

인용하다

답변2

이것이 내 해결책입니다.

/etc/호스트:

12.34.56.78     hostname.tld
127.0.0.1       localhost

/etc/mail/submit.mc:

FEATURE(`msp', `[12.34.56.78]', `25')dnl

(원래는 내 공용 IP 대신 127.0.0.1을 사용했습니다)

/etc/mail/sendmail.mc:

DAEMON_OPTIONS(`Family=inet,  Name=MTA-v4, Port=smtp, Addr=12.34.56.78')dnl
DAEMON_OPTIONS(`Family=inet,  Name=MSP-v4, Port=submission, M=Ea, Addr=12.34.56.78')dnl

(두 줄 모두 원래 127.0.0.1을 가지고 있었고 이를 변경하면 sendmail이 localhost 대신 공용 IP에서 수신 대기하게 됩니다.)

실행 명령:

make -C /etc/mail

보내는 이메일을 다시 로드하세요.

service sendmail reload

테스트 이메일을 보낸 후:

sendmail -t < mail.txt

지금 내가 좋아하지 않는 제목은 다음과 같습니다.

Received: from hostname.tld (hostname.tld [12.34.56.78])

헤더 어디에도 localhost 또는 127.0.0.1에 대한 언급이 없습니다.

관련 정보