· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Linuxdoc Sgml/Sendmail-Address-Rewrite

sendmail address rewriting mini-HOWTO

sendmail address rewriting mini-HOWTO

Thomas Roessler, roessler@guug.de

v0.0, 6 May 1998 번역 : 정재영 cychong12@hanmail.net v0.0, 3 Aug 1999
이 문서는 집에서 dial-up을 통해 인터넷에 엑세스하는 사용자를 위해 sendmail을 설정하는 방법에 대해 간략하게 소개한다.

1. 소개글

우리는 사용자가 대학이나 온라인 서비스를 사용하는 것으로 보이는 가장 흔한 형태의 인터넷 엑세스 방법을 사용한다고 가정한다 : 즉 사용자의 서비스 제공자에게 다이얼 업으로 시리얼 연결(전화선)을 이용하여 PPP 접속을 한다. 사용자가 수신할 메일은 서비스 제공자의 POP나 IMAP 서버에 스풀되고, 사용자가 송신하는 메시지는 SMTP를 통해 전송된다. 사용자는 사용자만의 도메인을 가지고 있지 않고, 모든 것을 하나의 주소를 통해 처리해야 한다.

우리는 여러분들이 Eric Allman의 sendmail을 최근 버전으로 설치했다고 가정한다(이 글이 쓰여지는 현재 최신 버전은 8.8.8이다).

이 문서의 일부분에서는 Debian GNU/Linux 시스템의 특별한 특성에 대해 언급하고 있다. 다른 배포본 사용자는 이런 점에 유의해야 할 것이다

우선 다음과 같은 정보를 알고 있는지 확인해 본다

사용자가 사용하는 ISP의 메일 서버 사용자의 인터넷 메일 주소

우리가 계획한 설정은 다음과 같은 두가지 목적을 갖는다

  1. 여러 로컬 사용자간에 메일 전송이 가능해야 한다(MUST).
  2. 외부에서는 로컬 사용자의 로컬 메일 주소가 아닌 로컬 사용자의 ISP 메일 주소를 봐야 한다.
이 두 가지를 위해 우리는 sendmail의 genericstable 기능을 이용할 것이다.

2. 파일 로드맵

우리는 모든 sendmail의 설정 파일을 /etc 밑의 별도의 디렉토리, /etc/mail 에 둘 것이다. 대개 sendmail은 이 설장 파일들이 /etc 밑에 있을 것으로 기대한다. 그러므로 이러한 문제를 피하려면 /etc/sendmail.cf를 /etc/mail/sendmail.cf 에 심볼릭 링크시킨다.

/etc/mail에 둘 파일들은 다음과 같다.

? =20
aliases - 추가적인 로컬 주소들을 포함한다
genericsdomain - 사용자 로컬 호스트에 대한 설정 정보를 담고 있다.
? genericstable - 실제로 사용될 rewriting 규칙을 담고 있다
? sendmail.cf - sendmail의 설정 파일
? sendmail.mc - sendmail.cf의 원본
이 파일중 몇개는 .db 파일을 추가로 가지고 있다. 이 파일들은 sendmail이 직접 사용할 해쉬된 데이터베이스를 저장한다.

우리는 sendmail의 소스 중 cf 부분이 /usr/lib/sendmail.cf에 있다고 가정한다. Debian GNU/Linux의 경우가 그렇다. 다른 배포본의 경우 이 파일 은 다른 곳에 있을 수 있다. 이 경우 자세한 내용은 각각의 배포본에 포함된 문서를 참조하길 바란다.

3. sendmail 설정하기

3.1 주 설정 파일

Sendmail은 매우 복잡한 규칙을 사용하여 환경 설정을 한다. 이것들을 사용하여 다양한 작업을 할 수 있지만 sendmail.cf 파일을 처음부터 직접 작성하는 것은 일반적이지 않고 또 많은 시간이 걸린다. 굳이 이런 작업을 하고 싶다면 이 문서 읽는 것을 지금 멈추고 O'Reilly 에서 출판된 "Bat Book"을 읽는 것이 좋다.

우리는 이 규칙들을 직접 손으로 쓰지 않고 sendmail과 함께 배포되는 파일들로부터 m4 매크로 프로세서를 이용하여 설정 파일을 만들 것이다.

먼저 senamail.mc 파일의 첫번째 몇 줄을 보자


include(/usr/lib/sendmail.cf/m4/cf.m4)
VERSIONID(sendmail.mc - <url url="mailto: roessler@guug.de" name="roessler@guug.de">
OSTYPE(debian)
define(`ALIAS_FILE',`/etc/mail/aliases')

첫부분에서 cf.m4가 include되었다. 이 m4 매크로 파일은 파일의 나머지 부분에서 사용될 다양한 매크로 정의들을 포함하고 있다. 이때 파일의 경로 가 맞는지 확인해야 한다 - 여기서 사용하는 경로는 Debian GNU/Linux에서 사용하는 것들이다. OSTYPE 매크로는 몇몇 설정 값에 대해 ?淪?기본값을 지정해 준다. 만일 사용자가 Debian 시스템을 사용하지 않는다면 "debian" 을 "linux"로 바꾸는 것이 좋다. ALIAS_FILE은 sendmail이 alias 리스트 를 어디에서 찾아야 하는지 알려준다.

다음 부분은 sendmail에게 genericstable 기능을 사용하도록 지정하고 , 이때 필요한 설정 파일을 찾을 곳을 지정하고 있다.


FEATURE(masquerade_envelope) FEATURE(genericstable, `hash
-o /etc/mail/genericstable')
GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain')

masquerade_envelope 기능은 sendmail에게 메시지의 envelope sender 부분에 대해 header rewriting을 적용하라고 지시한다. 이것은 외부 메일 전송 시스템이 메일 전송을 실패했을 때 그 결과 보고와 경고 메시지를 전송할 메일 주소이다. generics* 파일들은 이글의 아래에서 설명한다.

이제 소위 smart host라고 불리는 것을 정의해야 한다. 이것은 사용자의 시스템을 위해 외부로 나갈 메일을 처리할 머신을 말한다. 이것은 사용자의 ISP의 POP이나 IMAP 서버와는 다를 것이다. 만일 의심스럽다면 ISP에 연락 하여 확인하는 것이 좋다. 주 설정 파일의 코드는 다음과 같다 :


define(`SMART_HOST',`mail-out.your.provider')

여기서 mail-out.your.provider 부분을 사용자의 ISP 호스트 머신 전체 이름으로 바꾸기 바란다.

마지막 두 줄은 sednamil이 다양한 메일 형태를 다루는 방법에 대해 알도록 하기위해 필요한 "mailer" 정의를 포함하고 있다 :


MAILER(local)
MAILER(smtp)

sendmail.mc로부터 sendmail.cf 파일을 만들려면 다음과 같이 입력한다 (root 권한으로):
# m4 sendmail.mc > _sendmail.cf
# mv -f _sendmail.cf sendmail.cf

여기서 m4이 결과를 임시 파일에 저장한 후 이 파일을 적당한 위치로 옮기는 방법에 유의한다. 이 방법을 쓰면 일부분만 저장된 설정 파일을 읽어 메일 이 전송되는 것을 방지할 수 있다.

3.2 Address rewriting

우리는 먼저 어떤 주소가 로컬로 간주되는지를 sendmail에게 알려줘야 한다. (이 주소들의 address rewriting의 대상이 된다) 이것은 매우 간단하다: 단지 사용자 머신의 호스트 이름을 /etc/mail/genericdomain에 적으면 된다 사용자 호스트의 전체 이름을 알려면 다음과 같이 입력하면 된다 :


$ hostname -f

이제 rewriting 테이블을 보자 : /etc/mail/genericstable. 이 파일은 공백으로 구분된 두 개의 열을 포함하고 있다. 첫번째 열은 로컬 주소이고 두번째 열이 로컬 주소 대신 사용될 이메일 주소이다. 이 파일은 다음과 같은 형식일 것이다 :
harry <url url="mailto: harryx@your.isp" name="harryx@your.isp">
maude <url url="mailto: maudey@her.isp" name="maudey@her.isp">
root <url url="mailto: fredx@your.isp" name="fredx@your.isp">
news <url url="mailto: fredx@your.isp" name="fredx@your.isp">

로컬 시스템에서 만들어진 메일이 올바른 헤더 정보를 가지고 전송되기 위해서는 로컬 머신의 각각의 계정마다 한개의 항목을 가져야 한다. (역자 주 : 각각의 로컬 계정에 대해 ISP 게정과의 연결이 있어야 한다)

Sendmail은 성능을 높이기 위해 텍스트 파일을 직접 사용하지 않고 해쉬된 버전을 사용한다. 해쉬된 버전을 만들어내려면 다음과 같이 입력 한다 :


# makemap -r hash genericstable.db < genericstable

이때 genericstable의 rewriting 규칙은 로컬 메일이나 외부로부터 수신한 메일에는 적용되지 않는다. 이 매핑은 오직 사용자의 로컬 시스템에서 사용자의 ISP를 통해 외부로 전송되는 메일에만 적용된다.

3.3 Aliases

aliases 파일은 로컬 메시지에만 유효한 추가적인 몇 개의 로컬 이름을 담고 있다. 이것은 사용자의 시스템으로부터 자동적으로 생성되는 메시지를 수신하는 루트 같은 관리자 계정에 유용하다.

/etc/mail/aliases는 다음과 같은 형태일 것이다.


root: fred
news: root
postmaster: root
mail: root
www: root
nobody: /dev/null
MAILER-DAEMON: nobody

이 예는 root, news, postmaster, mail 그리고 www 사용자의 로컬 메일을 root에게 포워딩하고, root의 메일은 fred에게 포워딩한다. (역자 주: 결국 root, news, postmaster, mail 그리고 www에게 수신되는 모든 메일은 fred가 수신하게 된다). 반면 nobody와 MAILER-DAEMON은 /dev/null에게 보내진다.

genericstable과 같이 aliases도 많은 항목을 담고 있을 수 있다. 그러므로 sendmail이 텍스트 파일을 직접 사용하는 것은 성능면에서 좋지 않다. genericstable 에서 사용한 것과 같은 방법이 aliases에도 사용된다. 즉 해쉬된 데이터베이스가 만들어진다. makemap을 직접 사용하는 대신 newaliases 명령어를 사용하면 된다. 이 명령어가 필요한 모든 작업을 자동으로 수행한다.

4. 더 읽어봐야 할 것

sendmail 소스 배포본은 많은 문서를 포함하고 있다. 특히 cf/README를 읽어보는 것이 좋다. sendmail의 다양한 설정 옵션에 대해 좀 더 알고 싶다면 O'Reilly에서 나온 "Bat Book"을 읽어보는 것이 좋다. Bryan Costales, Eric Allman, and Neil Rickert: "sendmail". O'Reilly, 1993


ID
Password
Join
He who has a shady past knows that nice guys finish last.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2003-08-10 11:52:30
Processing time 0.0022 sec