Sendmail에서 로컬 배달 비활성화


31

Centos 서버에서 Sendmail을 사용하여 PHP 스크립트 용 이메일을 보내려고하지만 문제는 메일이 도메인의 MX 레코드에 지정된 것이 아니라 머신의 로컬 사서함으로 전달된다는 것입니다. 실제로 다른 머신을 가리 킵니다. 이메일에 사용합니다.

sendmail을 사용하여 컴퓨터가 설정된 도메인의 메일을 로컬로 배달하지 않으려면 로컬 배달을 비활성화하는 간단한 방법이 있습니까?

도메인이 local-host-names 파일에 없습니다.

나는 이미 많은 인터넷 검색을 수행했으며 다음을 살펴 보았습니다.

로컬 컴퓨터로 메일을 배달하지 않도록 Sendmail 구성

Sendmail에서 로컬 배달 비활성화

그러나 답이 없거나 적합하지 않습니다.

다른 서버로 릴레이하고 싶지 않습니다. 도메인에 관계없이 메일을 보내고 싶습니다.

예를 제공하려면 다음을 수행하십시오.

웹 서버에서 smtp 서비스를 사용하면 현재 example.com의 로컬 사서함으로 메일을 라우팅하지만 두 개의 서버가 있습니다. 하나는 mail.example.com의 메일 서버와 example.com 인 웹 서버입니다. mail.example.com의 사서함으로 이동해야합니다.

sendmail -bt의 출력 결과 :

주소 테스트 모드 (규칙 3은 자동으로 호출되지 않음)
들어가다  
> 3,0 info@example.com
canonify 입력 : info @ example. com
Canonify2 입력 : 정보 
Canonify2는 다음을 반환합니다. 
정식 반환 : 정보 
입력 구문 분석 : 정보 
Parse0 입력 : 정보 
Parse0는 다음을 리턴합니다. 
ParseLocal 입력 : 정보 
ParseLocal 반환 : 정보 
구문 분석 1 입력 : 정보 
Parse1은 다음을 반환합니다 : $ # local $ : info
파싱 ​​결과 : $ # local $ : info

stalkr.net/forum/… 내가 실제로 무엇을하고 있는지에 가장 가까운 것 같습니다. 특히 MAIL_HUB 설정이 언급되었지만 실제로 작동하지 않는 것 같습니다.

sendmail -bt를 입력 한 다음 3,0 user@domin.com을 입력하십시오. 많은 다시 쓰기 규칙이 제공되며 마지막 규칙은 사용할 릴레이를 제공합니다. 출력을 제공하십시오.
Francois Wolmarans

안녕 Francois, 나는 출력을 포함하도록 내 질문을 편집했습니다

답변:


37

로컬 전송을 사용 중지하기 위해 수행 한 작업 example.com 도메인을 사용하겠습니다.

요구 사항 :

  • example.com eth 인터페이스 중 하나에 지정된 IP 주소를 가리키는 항목입니다.
  • 위와 동일한 IP 주소에 example.com을 정의한 / etc / hosts
  • Google 서버를 가리키는 example.com MX 레코드 (ASPMX.L.GOOGLE.COM 등)
  • 기본 sendmail 설치 (우분투에 광산)

단계 :

vim /etc/mail/sendmail.mc

끝에 :

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

그리고:

sendmailconfig (or /etc/mail/make depending on your distro)
service sendmail restart

테스트 :

echo -e "To: user@example.com\nSubject: Test\nTest\n" | sendmail -bm -t -v
echo -e "To: user\nSubject: Test\nTest\n" | sendmail -bm -t -v

Google 서버에 연결되어 있고 메일이 Google받은 편지함으로 전달되는 것을 볼 수 있습니다.


3
이것은 완벽하게 작동했습니다. 도메인 이름 뒤에
Rodrigo

완벽하게 작동했습니다!
Filipe Pina

감사! 나는 이것을 잠시 동안 고치려고 노력했다. 나는 다음을했다; sendmail을 제거하고 다시 설치하고 실행 sendmailconfig하고 지정한 줄을 추가하고 sendmailconfig다시 실행 하면 a service sendmail restart가 작동합니다!
Liam Newmarch

@Rodrigo example.com. 끝에 점이있는 것은 표준 FQDN입니다. 점이없는 example.com은 상대적이므로 부정확합니다. 예를 들어 example.com.yourdomain.org를 의미 할 수 있습니다. OS 설정에 따라 이것은/etc/passwdetc/passwd
kubanczyk

4

sporker와 Pawel 덕분에이 문제를 해결하기 위해 올바른 방향으로 나를 안내했습니다.

내 원래 문제는 sendmail이 내 도메인 example.com 이메일 계정을 로컬 계정으로 고려하고 있다는 것입니다.

MX 링크를 무시하고 로컬 도메인으로 메일 보내기 (2 부) http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382.html http://objectmix.com/sendmail/ 367920-sendmail-ignores-mailertable-some-semilocal-domains.html

그러나 필자의 경우 FreeBSD 8.2를 사용하면 실제로 트릭은 무엇입니까?

# cd /etc/mail

# vim freebsd.mc

다음 두 줄을 추가하십시오.

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

직전 :

MAILER(local)
MAILER(smtp)

# make

--- 이것은 출력입니다 ---

 cp freebsd.mc host.example.com.mc
 /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.mc > host.example.com.cf
 cp freebsd.submit.mc host.example.com.submit.mc
 /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.submit.mc > host.example.com.submit.cf

--- 출력 끝 ---

# cp sendmail.cf sendmail.cf.bak

# cp host.example.com.cf sendmail.cf

# /etc/rc.d/sendmail restart

이것이 누군가에게 두통을 덜어주기를 바랍니다.


1

저는 sendmail 사람이 아니지만 sendmail이 저장된 도메인 /etc/mail/local-host-names을 로컬 도메인 이름으로 취급한다고 생각 합니다.
이 파일을 비우고 (삭제하지 마십시오) sendmail을 다시 시작하여 어떻게 진행되는지 확인할 수 있습니다.

편집
내가 실제로에서 설정 한 파일 이름 sendmail.cf과 당신이 설정되지 않을 수 있습니다 local-host-names
보면 /etc/mail/sendmail.cf대한

# file containing names of hosts for which we receive email 
Fw/etc/mail/local-host-names    

이것은 결코 테스트 된 사실이 아니라 단지 큰 소리로 생각합니다.


그렇기 때문에 이미 도메인을 언급 한 이유는 local-host-names 파일에 없습니다.

죄송합니다. 제대로 읽지 않은 질문에 대답하도록 가르쳐 줄 것입니다.
aussielunix

최근에 패치 된 Solaris 10 서버 세트 (100 정도 패치되었지만 소수의 문제 만 있음)에서이 문제가 발생했습니다. 이것이 수정이었습니다! 감사!
Signal15

0

이것은 당신이 찾고있는 해결책이 아닐 수도 있지만 문제가 "관리자"나 "루트"사용자가 많은 이메일과 큰 사서함을 받고 있다는 것이라면 사서함을 지우도록 크론 작업을 설정하는 것이 좋습니다 매주, 하루 등

우리는이 문제를 가진 여러 CentOS 서버를 가지고 있었지만 때로는 여러 가지 문제를 진단하는 데 도움이 될 수 있으므로 메일을 가끔 읽을 수 있기를 원했습니다.

해결책은 단순히 작업을 cron하고 상자를 한 번 닦는 것입니다.

우리가 문제를 발견하면 ... 우리는 cron 작업을 (일시적으로) 주석 처리하고 단서가 있는지 로그와 이메일을 읽습니다.

그냥 생각하고 ... 빠르고 쉬운 솔루션입니다.

그렇지 않은 경우 sendmail.mc 파일을보고 적절히 수정하십시오.


빠른 업데이트:

이것은 정확히 당신이 요구하는 것이 아니지만 몇 가지 아이디어를 제공하고 당신을 위해 일에 대해 약간의 조명을 비출 수 있습니다.

http://www.pettingers.org/code/sendmail-local.html


도움이되지 않아서 죄송합니다. 내가 원하는 것은 로컬로 메일을 전달하지 않는 것입니다. sendmail이 왜 그렇게 어렵게합니까?

0

저는 개인적으로 접미사를 더 많이 사용하지만 @ yourdomain.com에 대한 메일을 받도록 발신 서버를 구성한 것과 매우 비슷합니다. postfix에 전송 메커니즘과 동등한 sendmail이있는 경우, 서버간에 내부적으로 메일을 라우팅하는 데 사용됩니다.


centos sendmail 설치의 기본값이므로 너무 많이 구성하지 않았습니다.

0

Ruleset 3이 도메인 정보를 제거하는 것처럼 보입니다. 아래에 일반적인 문제 해결 단계가 포함되어 있습니다. 그래도 문제가 해결되지 않으면 sendmail.cf를 보내야합니다.

출력에서 example.com은 로컬 도메인으로 취급됩니다. nslookup을 수행하십시오.

q = mx로 설정

domain.com

이것이 로컬 컴퓨터의 IP 주소를 제공하면 dns를 봐야합니다. 또한 domain.com이 표시되지 않도록 / etc / hosts를 확인하십시오.

또한 @ domain.com을 제거하는 것 같습니다. user@stackoverflow.com과 같이 로컬 도메인으로 나열되어 있는지 확인하십시오.

sendmail.cf 파일에서 Cw 값도 확인하십시오.


Francois에게 감사합니다. 저는 sendmail 내부를 조금 더 이해하기 시작했습니다. 지금은 문제를 해결하기 위해 시스템의 호스트 이름을 변경하기로 결정 했으므로 example.com 대신 www.example.com이되었습니다. 즉 user@www.example.com의 로컬 배달을 수행하지만 not user@example.com-이것은이 단계에서 나에게 좋은 타협입니다.

0

아마도 원하는 것은 아니지만 SSMTP는 메일 허브를 지정할 수있는 아웃 바운드 전용 서버에 매우 좋습니다.


고맙지 만 SSMTP에 지금은 sendmail을 고치려고 노력할 것입니다.

0

로컬 주소로 배달을 시도 할 때 오류를 반환하려는 경우 액세스 맵과 같은 것을 사용할 수 있습니다.

@your.domain error:nouser 550 No such user here

전자 메일 메시지를 '전달'했지만 폐기하려는 경우 " @your.domain"에 대한 모든 항목의 별칭을 지정하는 virtusertable 항목을 설치할 수 있습니다 . rootcron 작업 등에서 전자 메일 보고서를받는 사람인 경우가 많으므로 로컬 에서 최소한 " " 을 (를) 계속 제공하는 것이 유용 할 수 있습니다 virtusertable.

root@your.domain local:root

@your.domain local:dev-null

dev-null메시지를 / dev / null로 경로 재지 정하는 로컬 별명을 사용하면 루트 전자 우편을 계속 전달하지만 다른 사용자에게 전달 된 메시지는 버려야합니다.


0

Pawel의 수정은 저에게 효과적이지만 sendmailconfig는 centos에 존재하지 않았으므로 실행해야했습니다.

cd /etc/mail    
m4 /usr/share/sendmail-cf/m4/cf.m4 sendmail.mc > sendmail.cf
service sendmail restart

구성을 업데이트하려면


그 두 번째 규칙이 작동하지 않음 / 내에 CentOS에 존재
솔솔

0

Pawel의 답변이 비슷한 문제를 해결했다는 것을 확인했습니다.

FreeBSD를 사용하지만 sendmail cf 파일 drudgery에 너무 관여하지 않으려는 사람은 Pawel의 예제에서 두 줄을 추가하는 데 다음 순서를 따릅니다.

cd /etc/mail
make conf (generates stock .mc/.cf files with the hostname as part of the 
filename - these will NOT be overriten during an upgrade)
vi hostname.mc
(add the two lines to the .mc file right above the last two "MAILER" lines)
make conf
cp hostname.cf sendmail.cf
/etc/rc.d/sendmail restart

0

나는이 제안들을 따랐고, pawel이 언급 한 단계를 추가하는 것,

"/ etc / hosts example.com을 정의하면 위와 동일한 IP 주소에 할당됩니다."기본적으로 서버 IP와 서버 이름을 /etc/hosts파일 에 추가 했습니다.

Google을 통해 이메일을 라우팅하고 내 이메일로 다시 돌아 오려면 충분했습니다.


0

Cpanel / WHM을 사용하여 서버를 관리하는 경우 자동 구성 검색 대신 Cpanel / WHM에서 원격 메일 교환기를 선택해야합니다. 원격 메일 교환기는 로컬 도메인을 포함하여 MX 레코드를 통해 모든 이메일을 보냅니다. 자동을 사용하면 로컬 도메인 이메일이 로컬로 직접 라우팅되며 MX 레코드에 정의 된 외부 서버로 전송되지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.