강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
센드메일 / 이메일에 대한 힌트
조회 : 7,363  




번역 : 임종균[hermes44@secsm.org]
서울대학교 컴퓨터공학과
(원문 : http://www.informatik.uni-kiel.de/~ca/email/english.html)

 

들어가며

SMTP (역자주: Simple Mail Transfer Protocol, 이메일을 주고 받는 데 사용되는 표준 인터넷 프로토콜), 센드메일, 이메일(e-mail)에 대한 일반적인 기본 지식을 알고 싶다면, UnixWorld Online Tutorial의 8번 글을 읽으면 된다. 그 글은 센드메일 8.7을 설명하고 있다.
http://www.networkcomputing.com/unixworld/tutorial/008/008.txt.html

지금까지의 센드메일에 대한 가장 좋은 책은 “Sendmail” (http://www.ora.com/catalog/sendmail2/noframes.html; Costales, Allman, and Rickert: O’Reilly & Associates) 일 것이다. 그 책은 센드메일 8.8까지 설명하고 있다. 센드메일에 대한 또 다른 책은 “Sendmail: Theory and Practice” (http://www.vix.com/vix/smtap/)이다. 하지만 이 책은 센드메일 버전 8에 대한 내용은 없다.

이 글이 비록 1985년부터 쓰여졌지만, 센드메일의 버전업 과정을 잘 반영하고 있다.

센드메일: 설정/원본(sources)

이메일을 사용하기 위해 Sun을 설정하려 한다면, “까다로운 Sun 우편 시스템 설정하기”
(How to Fix a Cranky Sun Mail System, http://www.send-
mail.org/~ca/email/sun.sendmail.fix.html)를 읽어야 한다. 그 글은 SunOS 4와 SunOS 5.x (x<5; Solaris 2.x)을 위해 쓰여졌다. SunOS 5.5로 시작한다면, Sun이 센드메일 8(.6)을 같이 배포하기 때문에, 그 버전에 대해서는 이 글에서의 힌트 일부만을 사용할 수 있을 것이다. 즉 더 이상의 sendmail.mx는 없다. Sun은 센드메일을 8.8로 업그레이드 해주는 패치를 내놓았다.

그러나 가장 좋은 선택은 센드메일 8.9로 업그레이드 하는 것이다. 실제 버전(1998-07-02)은 센드메일 8.9.1이다. 다른 FTP 서버에도 이미 올라와 있다.

업그레이드를 위한 가장 중요한 두 문서는 “표준 Sun의 설정 파일들을 센드메일 버전 8에 맞게 변환하기” (http://www.sendmail.org/~ca/email/converting.sun.configs.html)와 “SMI-8.6에서 버클리 8.8로 전환할 때의 센드메일 문제들” (http://www.sendmail.org/sun-specific/migration.html)이다.

다른 문제들은 센드메일 버전 8의 FAQ (http://www.informatik.uni-kiel.de/~ca/faqs/sendmailv8.html)에 답이 있을 것이다. (Brad Knowles에 의해 오랫동안 관리되어 왔다; 원본은 센드메일의 개발자인 Eric Allman이 작성하였고 현재는 sendmail.org로 되돌아왔다). “센드메일 설치와 운영 가이드” (The Sendmail Installation and Operation Guide)는 센드메일 패키지에 들어있는 문서중에 하나이다. 그것은 센드메일에 대한 깊이 있는 설명을 해준다. 센드메일 배포본에 있는 cf/README 파일은 간단한 m4 설명 파일에서 특정 용도에 맞게 설정 파일을 만드는 법을 설명하고 있다.

클라이언트(client) - 모든 편지를 지정된 메일 호스트로 보낸다. - 의 sendmail.cf 파일은 자체적으로 전자 우편을 처리하지 않는 모든 호스트에서 사용되어 지기도 한다. 그 파일은 .mc 파일의 FEATURE(nullclient)를 사용하여 만들어 질 수도 있다.

comp.mail.sendmail에서 가장 빈번한 질문들
· 설정 오류: 메일이 되돌아 온다.

센드메일 버전 8의 FAQ에서
· 저는 다음과 같은 “Local configuration error”을 겪었습 니다

553 MX list for domain.net points back to relay.domain.net
554 <user@domain.net>... Local configuration error

어떻게 이 문제를 해결할 수 있습니까?

두 가지 방법이 있다

1. 당신은 도메인 (예를 들어, domain.net) 으로 보내지는 편지를 MX 항목(record)을 이용하여서 특정 호스트 (이 경우에는, relay.domain.net) 로 전달하도록 했지만, relay 기계는 스스로를 domain.net으로 인식하지 못하고 있다. domain.net을 /etc/sendmail.cw (FEATURE(use_cw_file)을 이용하고 있다면) 또는 “Cw domain.net”을 당신의 설정 파일에 추가하도록 한다.

2. 다른 방법은 relay.domain.net에서 그 편지들을 정말로 domain.net의 편지를 관리할 다른 호스트 mail.domain.net으로 보내는 것이다. 이 호스트가 SMTP로 접근 가능하다면 가장 좋은 (가장 낮은) 우선 순위를 가지고 mail.domain.net을 가리키는 MX 항목을 만들어야 한다. relay.domain.net이 정말로 스스로가 relay.domain.net임을 알 수 있도록 하여라. MX 항목을 설정한다면 relay.domain.net에 대한 정확한 이름을 사융해야만 한다.
만약 mail.domain.net이 다른 편지 전송 프로토콜(UUCP)로 접근 가능하거나 또는 외부에서 직접적으로 접근할 수 없다면, mailertable FEATURE를 보면될 것이다. 예를 들면, .mc 설정 파일에 다음과 같은 것을 사용하라

FEATURE(mailertable, ‘dbm -o /etc/mailertable’)

(또는 다른 데이타베이스 타입, makemap(8)을 보아라) 그리고 mailertable에 다음과 같은 줄을 추가하라

domain.net smtp:[mail.domain.net]

사각형 꺽쇠([ ])는 센드메일에서 mail.domain.net에 대한 MX 항목을 무시하라는 의미이다.

두 가지 힌트: MX 항목은 CNAME과 같아서는 안 된다. 그렇게 되면 많은 문제를 일으킨다. (그리고 RFC 974 - ftp://ftp.informatik.uni-kiel.de/pub/internet/rfc/rfc-0900-0999/rfc974.gz - 를 위반한다.) 그리고 src/READ_ME에는 다음과 같이 써 있다
MX 항목에 와일드카드를 쓰는 것은 안 좋다! 그 경우가 올바르게 동작할 수 있는 유일한 상황은 만약 두 가지의 DNS를 가지고 있는데, 실제 쓰이는 하나는 방화벽을 지시하는 와일드카드를 포함하고 다른 하나는 내부적으로 당신의 도메인에 맞는 와일드카드 MX 항목을 전혀 포함하지 않는 데이타베이스이면 된다. 그렇지 않다면 당신에게 두통만 줄 것이다!

중요: 설정 파일을 바꿨을 때, 반드시 센드메일 데몬(daemon)을 죽이고 다시 시작하도록 한다. (이번 경우만이 아니라 설정에 어떠한 변경에 대해서도)

kill `head -1 /etc/sendmail.pid`
sh -c “`tail -1 /etc/sendmail.pid`”

주의: 8.7.y 이전 구 버전에서는 ‘kill -1’이 동작하지 않는다.

관련된 질문은 다음 문단을 보아라.

만약 여전히 동작하지 않는다면, 다음 설명을 더 보아라:
http://www.informatik.uni-kiel.de/~ca/email/more.html#MLB

· 하나의 기계에서 다중 도메인을 어떻게 다루는가?

이 문제에 대해서는 많은 해결 방법이 있다. 아마도 가장 좋은 방법은 센드메일 사이트에서 찾을 수 있을 것이다. 센드메일 버전 8의 FAQ에는 이 문제 대해서는 하나의 항목만이 있다. 다른 해결책은 Robert Sanders와 Homer Wilson Smith가 제시한 것이 있다.
http://www.westnet.com/providers/maildomains.doc
http://www.amazing.com/internet/virtual-homer.html

센드메일 8.8은 가상 사용자/도메인에 대한 직접적인 지원을 하고있다.
http://www.센드메일.org/~ca/email/sm8.8.new.html#CF-VIRT

· 어떻게 user@host.my.dom.ain을 user@my.dom.ain으로 바꾸는가?

센드메일 버전 8
다시 센드메일 버전 8의 FAQ에서
· 어떻게 모든 나의 주소를 하나의 호스트인 것 처럼 보이게 하나?

버전 8의 설정 매크로를 이용한다면, 다음을 사용하라:

MASQUERADE_AS(my.dom.ain)

이는 모든 보내는 주소를 지정된 도메인에서 보낸 것 처럼 만든다.
만약 센드메일 버전 8.7을 이용한다면, 그리고 헤더(header) 뿐만 아니라 이 봉투에 써 있는 정보까지 숨기려면, 다음을 이용하라:

FEATURE(masquerade_envelope)

또한 만약 수신자를 감추려 한다면, 다음을 이용하라:

FEATURE(allmasquerade)

가능한 한 문제들에 대해서 조심하고 cf/README를 읽 어라.

cf/README의 다른 항목에서는 다른 호스트에 대해 마스커레이딩(masquerading)하는 방법에 대해 설명하고 있다. 대개 마스커레이딩하는 것은 w 클래스(class)의 모든 항목에 대해서 동작은 한다. 이 클래스에는 그 호스트에 대한 모든 지역(local) 이름을 포함된다. 하지만 더 많은 호스트들을 M 클래스 - 또한 마스커레이딩되는 것들 - 에 추가할 수 있다.

센드메일 8.8은 마스커레이딩에 대한 유연성 있는 방법을 제공한다.
http://www.센드메일.org/~ca/email/sm8.8.new.html#CF-MASQ

또한 genericstable FEATURE를 참고할 수도 있다.


Sun의 센드메일

만약 8.6이전의 Sun의 센드메일을 여전히 사용하고 있다면, 다음과 같은 규칙을 찾아라 (22번 규칙집합(ruleset)일 것이다.):

R$+<@$+>$* $@$1<@$2.$m>$3 tack on our domain

만약 $m이 올바르게 정의된 있다면, 그것을 다음과 같이 바꿔라

R$+<@$+>$* $@$1<@$m>$3 tack on our domain

만약 SunOS 5.x (x<5; Solaris 2.x와 동일) 이라면, 다음도 규칙을 바꿔야 한다.

R$+ $@$1<@$w.$m> tack on our full name

아래와 같이

R$+ $@$1<@$m> tack on our domain

· 원치 않는 도메인(사용자)로 부터의 전자우편을 거부하는 방법?

센드메일 8.8또는 8.9의 규칙(rules)을 이용

센드메일 8.8은 메일 게이트웨이(gateway)로서 당신의 기계를 사용하는 사람에 대한 검사를 할 수 있는 새로운 규칙 집합을 가지고 있다. “센드메일 8.8의 check_* 사용하기” (http://www.sendmail.org/~ca/email/check.html)는 이들 규칙 집합을 사용하는 방법에 대한 개략적인 사항을 설명하고 있다. 8.9에는 같은 효과를 갖는 표준 FEATURE들 (http://www.sendmail.org/~ca/email/chk-89f.html)이 있다.

senamail 8.x의 규칙을 이용

만약 센드메일 8.x (x<8)을 사용한다면, 원치 않는 도메인/사용자들로 부터의 편지를 거부하기 위해서는 다음과 같이 하면된마. 98 규칙 집합을 다음과 같이 지정하라: (이는 당신의 .mc 파일의 LOCAL_RULE_0이다.)

R$* < @$*$=K . > $* $#error $@ 5.7.1 $: “This domain is banned.”
R$* < @$*$=K > $* $#error $@ 5.7.1 $: “This domain is banned.”

그리고 K 클래스를 다음과 같이 정의하라

FK/etc/banned.domains

이 파일에 거부할 도메인 이름을 써 넣으면 된다.

예를 들면”

cyberpromo.com
quantcom.com
savetrees.com

특정 사용자를 지정하고 싶다면, 가장 처음 나오는 $*를 그 이름이나 클래스 이름으로 대치하면 된다.

tcp_wrapper 사용하기

다른 방법은 tcp_wrapper를 사용하는 것이다. 센드메일 8.7.x에는 센드메일에 그 기능을 넣어주는 패치(patch)가 있다.
ftp://ftp.informatik.uni-kiel.de/pub/sources/security/MIRROR.ftp.win.tue.nl/sendmail-tcpd.patch.gz
이런 방법을 사용하면, tcp_wrapper의 규칙에 기초하여 센드메일 데몬(daemon)에 대한 접근을 제한할 수 있다.

센드메일 8.8은 패치없이 이를 지원한다. 컴파일시 -DTCPWRAPPERS=1을 사용하고 -lwrap을 사용하여 적절한 라이브러리(library)를 추가하기만 하면 된다. 라이브러리에 잘못된 값을 넘겨주는 senamail 8.8.8에 대한 패치가 있다. 그 패치는 ftp://ftp.win.tue.nl/pub/security/에서 구할 수 있고, Lou Rinaldi에 의해 발견되었다.


checkcompat() 사용하기

세 번째 가능성은 checkcompat() 루틴(routine)을 이용하는 것이다. Kyle Jones는 다음 패치를 내놓았다. http://www.sendmail.org/~ca/email/checkcompat.txt 그것은 당신의 호스트를 통하는 모든 non-locale-mail을 막기 위한 것이다. 책임질 수는 없다.

· 안전하지 못한 맵 파일
/etc/mail/aliases (unsafe map file /etc/mail/aliases)

가장 최근의 센드메일에서 많은 사람들은 다음과 같은 에러 메세지를 보게 되었다:

unsafe map file /etc/mail/aliases

(또는 다름 맵 파일). 이에 대해서는 많은 이유가 있지만, 가장 공통된 이유는 alias 파일이 속한 디렉토리에 대한 권한을 잘못 주었기 때문이다. 다음과 같이 되어야 한다:

drwxr-xr-x 12 root staff 3072 Nov 20 10:47 /etc/
drwxr-xr-x 4 root staff 1024 Dec 21 16:40 /etc/mail/

즉, 디렉토리는 root의 소유가 되어야 하고, 그룹과 다른 이들에게는 쓰기 권한이 없어야 한다. alias 파일도 같은 권한을 가져야만 한다. 게다가, 만약 db 맵을 사용한다면, 결과 맵 파일을 - file.db - 을 만들고 makemap이나 newaliases를 실행해야 한다.

더 자세한 사항은 release notes를 보아라. /usr/lib/sendmail -bi -d44.4는 alias 맵에 대한 디버깅 결과를 보여준다.


[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=845


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
(주) 수퍼유저