다음 이전 차례

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 명령어를 사용하면 된다. 이 명령어가 필요한 모든 작업을 자동으로 수행한다.


다음 이전 차례