Posted
Filed under Linux

sendmail 구동시 권한 설정
chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue
chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue


본 자료 출처 : http://www.kjist.ac.kr/new/com-services/manual/manual_02.html





1. 자료 받기






2. 압축을 풉니다.




    shell> gzip -cd sendmail-8.10.1.tar.gz |tar xvf -



3. 문서 확인




    README Sendmail 에 대한 소개와, 각 디렉토리 내용소개. 유의할 점.
    INSTALL 설치방법에 대한 개괄.
    FAQ 자주 물어보는 질문들.
    RELEASE_NOTES 새로운 버젼이 나올 때마다 추가되는 사항에 대한 정보.
    KNOWNBUGS 알려진 버그에 대한 정보.



4. 컴파일




    shell> cd sendmail sendmail-8.10.1
    shell> sh Build --> sendmail compile
    shell> /etc/rc.d/init.d/sendmail stop shell> cd cf/cf --> cf/cf 디렉토리로 이동

cf/cf 디렉토리에서, generic-osname_version.mc 와 같은 형식의 file 들 중 , 자신의 os name 과 version에 가장 가까운 것을 선택하여 config.cf 로 복사한다.
(참고: % uname -a 명령으로 자신의 os 종류를 알수 있다. )

    shell> cp generic-linux.mc sendmail.mc shell> vi sendmail.mc
    shell> sh Build sendmail.cf -> sendmail.mc 를 바탕으로 sendmail.cf 를 만든다
sendmail.cf 와 컴파일된 sendmail 을 설치하기 전에, 만일을 대비해 이전에 사용하던sendmail 과 sendmail.cf 를 다음과 같이 다른곳에 복사해둔다.
    shell> cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.8.9.3 shell> cp /usr/lib/sendmail /usr/lib/sendmail.8.9.3
참고: OS 에 따라서, sendmail.cf 와 sendmail 의 위치가 다를수 있다. 일반적으로 sendmail.cf 는 /etc /etc/mail sendmail 은 /usr/sbin /usr/lib 등에 위치한다.
    shell> cp sendmail.cf /etc/mail/sendmail.cf shell> cd ../../sendmail shell> sh Build install
다음은 makemap 디렉토리로 이동하여 makemap 을 설치하는 과정이다. newaliases 등의 명령어로 aliases 등의 db file 들을 갱신할때 필요하다. sendmail 을 실행할때, "class hash not available" 등의 에러메세지가 나온다면, 대부분 makemap 의 문제로 makemap 을 새로 설치할 필요가 있다.
    shell> cd ../makemap shell> sh Build --> makemap 설치를 위한 컴파일
    shell> sh Build installshell> cd /etc/mail shell> touch access relay-domains
access파일은 spam relay를 IP나 HOSTNAME으로 제어하기 위하여 생성된 것이며
relay-domain은 domain name별로 제어하기 위해서다.
    shell> vi /etc/mail/local-host-names abc
    abc.domainname.com
    localhost
    shell> /usr/sbin/makemap hash access < access shell> chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue shell> chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue shell> newaliases shell> /usr/lib/sendmail -bi --> 제대로 설치되었는지 확인. /etc/mail/aliases: 3 aliases, longest 10 bytes, 52 bytes total
만일, /etc/sendmail.cf 를 찾는 err 가 나오면
    shell> ln -s /etc/mail/sendmail.cf /etc/sendmail.cf shell> /etc/rc.d/init.d/sendmail start



<sendmail 설정하기>

Sendmail에서 가장 중요하고도 어려운 부분이 sendmail.cf 파일의 설정입니다. O’Reilly사에서 Sendmail에 대한 전문서적이 나올 정도로 방대하고 다양한 기능을 가지고 있으며 사용법도 매우 다양합니다. Sendmail을 사용하기 위해 기본적으로 알아야 할 설정 파일들에 대해 살펴보겠습니다.





1. /etc/sendmail.cf
Sendmail의 가장 중요한 설정파일로 /etc 또는 /etc/mail 디렉토리에 자동으로 설치되어 있습니다. Sendmail.cf에 대한 자세한 내용은 Bryan Costales 와 Eric Allman이 집필한 O’Reilly의 Sendmail을 참고하십시요. 여기서는 간단히 메일서버를 관리하기 위한 몇 가지 설정에 대해서만 다루겠습니다.

    Fw/etc/mail/local-host-names

메일을 수신할 호스트 이름을 명시한 파일의 위치를 설정합니다.

    FR-o /etc/mail/relay-domains

relay-domains파일에는 Relay를 허용할 호스트의 이름을 설정합니다. 주석으로 처리하면 모든 IP에 대해서 Relay가 허용되므로 스팸메일과 같은 문제가 발생할 수도 있으므로 주의하시기 바랍니다.

    DnMAILER-DAEMON

Sendmail 서버가 에러메시지를 보내야 할 경우 보낸 사람의 이름을 결정합니다. 잘못된 메일이 되돌아 온 경우 FROM : Mail Delivery Subsystem <MAILER-DAEMON>과 같은 메시지를 보신적이 있을 것입니다.

    Kaccess hash /etc/mail/access

Relay를 허용하거나 거부할 특정 IP와 도메인을 설정하는 파일입니다. relay-domains보다 사용이 편리하므로 많이 사용됩니다.

    O ForwardPath=$z/.forward.$w:$z/.forward

여러 개의 메일을 가진 경우, 특정 메일계정으로 들어온 메일을 다른 메일로 곧바로 보내주는 포워딩 파일을 설정합니다.

사용자의 홈 디렉토리에 .forward라는 파일을 만들고 포워딩시킬 메일 주소를 입력하면 됩니다.

    # O MaxMessageSize=1000000

메일의 최대 크기를 결정합니다. 주석을 제거하면 설정한 크기(Byte단위)보다 큰 메일은 전송할 수 없게 됩니다. 지금 써준 1000000은 1메가로 제한한 메일 용량입니다.

    O QueueDirectory=/var/spool/mqueue

큐 디렉토리를 설정합니다.

    O Timeout.queuereturn=5d

메일을 보내려는 호스트에 문제가 생기면 메일은 큐 디렉토리에 저장됩니다. Sendmail 서버는 쌓인 메일을 상대방 호스트에 보내기 위해 주기적으로 접속을 시도하며, 일정한 기간이 지나면 메일을 다시 발송한 사람에게 되돌려 보냅니다. Sendmail이 메일을 보내려고 시도하는 기간을 설정하는 옵션으로 5d는 5일을 의미합니다.

    O Timeout.queuewarn=4h

큐 디렉토리에 쌓인 메일이 지정한 시간안에 전송되지 못할 경우 메일을 보낸 사람에게 경고 메일을 보냅니다. 기본값은 4h로 4시간안에 전송되지 못하면 보낸 사람에게 경고의 메일을 보냅니다.

Mlocal, P=/usr/bin/procmail, F=lsDFMAw5u:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
T=DNS/RFC822/X-Unix,
A=procmail -Y -a $h -d $u

사용자계정에 대문자가 있는 경우에도 메일을 받을 수 있도록 설정하려면 Mlocal로 시작하는 부분을 찾아 F= 부분에 'u'를 추가합니다.



 2. /etc/mail/access
 




스 팸메일을 방지하기 위해 Relay를 허용할 호스트의 IP와 도메인을 설정하는 매우 중요한 파일입니다. 먼저 vi에디터나 emacs를 사용해 /etc/mail/access파일을 열고 릴레이를 허용하거나 거부할 IP 주소를 아래와 같이 입력합니다.

203.243.88      RELAY -> 203.243.88 네트워크에 속하는 C클래스의 IP주소에 대해서는 메일을 [보내기/받기]를 할 수 있지만 다른 IP주소에서는 메일을 받을 수만 있습니다.

spam.com      REJECT -> spam.com 도메인에 속한 모든 호스트에서 오는 메일은 완전히 거부됩니다.
이와 같이 설정한 후에는 아래의 명령으로 DB파일(access.db)을 만들어 줍니다.

    # cd /etc/mail
    # makemap hash access < access

위의 작업은 access 파일을 수정할 때마다 해주어야 하며, Sendmail을 다시 시작할 필요는 없습니다.

[Relay에 대하여]
그럼 간단하게 Relay에 대한 개념을 알아보겠습니다.

예를 들어 A라는 사람은 IP주소가 203.243.88.21이라는 컴퓨터에서 aroma@mail.linuxul.com이라는 메일을 사용한다고 가정하고, B라는 사람은 IP주소가 168.211.106.34인 컴퓨터에서 nea@yahoo.co.kr 이라는 메일을 사용한다고 가정합니다.

B가 A에게 메일을 보내면 메일은 203.249.88.21로 가는 것이 아니라 mail.linuxul.com서버의 /var/mail 디렉토리 밑에 aroma라는 파일로 복사가 됩니다. 그러면 A는 MUA 프로그램을 사용해 메일을 확인할 수 있지요. 그런데 여기서 중대한 문제점이 생겨나게 됩니다. 아무나 주소를 맞게 보내면 그냥 /var/mail에 쌓이게 되는 것이죠. 그래서 하드디스크가 메일로 꽉 차버리거나, 네트워크 전송량의 증가로 네트워크가 마비되는 경우가 생겨나게 됩니다. 이 문제를 막기 위해서 고안된 방법이 바로 Relay라는 방법입니다.

Relay에는 두 가지 방식이 있습니다.

    o 첫 번째는 메일을 보내는[송신] 컴퓨터의 제한
    o 두 번째는 메일을 받는[수신] 컴퓨터의 제한

Relay로 주로 쓰이는 방법은 메일을 확인하는 컴퓨터는 제한하지 않고 메일을 보내는 것을 제한하는 것입니다. 즉, 위의 그림과 같이 /etc/mail/access파일에 203.243.88의 C클래스를 허용 가능하게 해주면 203.243.88.21 처럼 허용 그룹에 들어 있는 컴퓨터에서는 메일을 보내고/받을 수가 있지만, 그룹에 들지 않은 168.211.106.34 라는 컴퓨터에서는 메일을 확인할 수만 있습니다. 또한 spam.com이라는 도메인에 속한 호스트에서 오는 메일 은 보내기와 받기가 모두 거부됩니다.
/etc/mail/relay-domains을 사용해도 됩니다. 하지만, 차이점은 relay-domains을 사용하면sendmail데몬을 다시 실행시켜 주어야 하지만 /etc/mail/access파일을 사용하면 다시 실행할 필요 없이 makemap hash /etc/mail/access < /etc/mail/access라고 실행만 시켜주면 됩니다.




3./etc/mail/local-host-names
 




메일을 수신할 호스트의 이름을 입력하는 파일로, Sendmail 8.9.x 버전이하에서 사용되었던 sendmail.cw 파일의 명칭이 Sendmail 8.10.x 버전부터는 local-host-names로 변경되었습니다. Sendmail 서버는 이곳에 적힌 호스트 의 이름으로 메일이 들어오면 더 이상 다른 서버로 메일을 보내지 않고 자신의 메일박스에 저장합니다. 아래와 같이 메일서버의 호스트이름을 입력하거나 여러 개의 가상호스트를 사용한다면 모두 입력해야 합니다.




4. /etc/aliases
 




특정 사용자에게 온 메일을 다른 사람에게 보내주거나, 메일링리스트를 작성해야 하는 경우에 사용되는 파일로 보안에 주의하여 사용해야 합니다. aliases 파일을 열어보면 시스템 계정들이 아래와 같이 root로 alias되어 있습니다.
또한 특정 사용자를 다른 사용자로 alias 시킬 수도 있습니다.




5. 메일링 리스트 작성하기
 




메일링리스트란 동일한 메일을 여러 사람에게 보내야 할 경우 사용되며, 그룹을 지정해 구성원들의 목록을 써주거나 특정 파일을 지정하는 방법 등으로 사용됩니다. 예를 들어 aroma, bulpeng, bibi와 같은 사용자들을 test1라는 그룹으로 지정해 보겠습니다.

vi편집기로 /etc/aliases 파일을 열고 아래의 라인을 추가한 후 저장합니다. 앞으로 test1에게 메일을 보내면 지정된 모든 사용자들에게 메일이 도착하게 됩니다.

    test1: aroma, bulpeng, bibi
다른 하나는 특정파일을 지정해 주는 방법으로 include 지시자를 사용한 후에 파일의 경로와 파일이름을 입력합니다.

    test2: :include:/etc/maillist/test2

    # cat /etc/maillist/test2
    aroma
    bulpeng
    bibi


파일을 수정한 후에는 newaliases 명령으로 aliases.db를 만들어 줍니다

    .# newaliases
    /etc/aliases: 40 aliases, longest 28 bytes, 434 bytes total

이제 test1 또는 test2로 메일을 보내면 지정된 사용자들(aroma, bulpeng, bibi)이 모두 메일을 받아볼 수 있습니다.



< MAIL Server에서의 한글 지원문제>
 




메일에서 사용되는 SMTP프로토콜은 기본적으로 7bit문자만을 기반으로 제작되었습니다. 하지만 한글의 경우 EUC-KR로 표현하면 8bit를 사용하기 때문에 문제가 생길 수 있습니다. 따라서 메일에서 사용하기 위해 한글의 7bit 표현방법인 ISO-2022-kr(RFC 1557)이 만들어 졌고 메일의 본문에 사용되었습니다(헤더에는 EUC-KR을 B나 Q인코딩 방법으로 인코딩해서 사용했습니다.).

하지만 대부분의 프로그램에서는 한글을 8bit표현방법인 EUC-KR을 사용했으므로 이 두 표현간의 변환을 해 주는 프로그램이 필요했습니다. 이 작업은 크게 MTA, MDA, MUA에서 해 줄 수 있습니다. MTA에서 변환을 해 주는 대표적인 프로그램이 sendmail 8.6.12h2입니다. 이 프로그램은 프로그램으로부터 8bit표현을 입력으로 받아서 다른 곳으로 전송할때 ISO-2022-kr로 변환한 후 전송을 하고, 네트웍을 통해 받은 ISO-2022-kr로 표현된 메일을 EUC-KR로 변환 후 메일박스에 저장하도록 만들어 졌습니다. 그래서 몇년전까지만 해도 대부분의 메일서버에서 sendmail 8.6.12h2를 사용했었습니다.

하지만 SMTP 프로토콜이 8bit문자를 지원하는 ESMTP 프로토콜로 변하면서 본문에서도 ISO-2022-kr대신에 EUC-KR을 사용하도록 표준이 바뀌었습니다. 하지만 이 안을 정식 표준으로 공표하지 않았고, 아직까지 인터넷에는 ISO-2022-kr 로 표현된 메일이 돌아다니기 때문에 이 메일을 EUC-KR로 변환해 주는 작업이 추가적으로 필요하게 되었습니다.

ISO-2022-kr을 EUC-KR로 변환해 주는 프로그램들은 UNIX환경에서는 많이 만들어 졌습니다. hconv와 hmconv가 대표적인 프로그램입니다. 이제 관리자가 해 줘야 하는일은 sendmail이 받은 메일을 메일박스로 저장하기 전에 이 프로그램을 통과하게 만들어서 ISO-2022-kr을 EUC-KR로 변환만 해 주면 되게 되었습니다. 이렇게 필터링을 가능하게 해 주는 대표적인 프로그램이 procmail입니다.

여기에서는 procmail을 이용하여 한글 메일을 처리하는 과정을 설명드리겠습니다. 여기에서 알아두셔야 할 내용중에 중요한 내용으로 MDA에 대한 이해입니다. MDA(Mail Delivery Agent)는 MTA(Mail Transfer Agent, 대표적인 예는 sendmail입니다.)

가 받은 메일의 최종적인 도착지가 현재 호스트인경우(sendmail의 경우 sendmail.cw를 참고하여 결정합니다.) 메일을 MDA에게 넘겨줍니다. 보통 시스템의 기본적인 MDA는 /bin/mail입니다. procmail은 /bin/mail대신에 사용할 수 있는 프로그램으로 필터링 기능이 강력하여 한글처리에 이용할 수 있습니다.
또 잘못 이해하시는 분들중에 procmail자체가 한글 디코딩을 해준다고 알고 계신분들이 많습니다. 이것은 잘못된 것입니다.
실제로 procmail도 한글 디코딩을 위해 다른 프로그램(보통 hcode나 hmconv를 이용합니다.)을 이용합니다. procmail이 하는일은 단순히 어떤 헤더가 있을때 적당한 프로그램을 불러 한글 디코딩을 해 줍니다.

따라서 procmail뿐만 아니라 한글 디코딩을 위한 프로그램을 설치하셔야 합니다. 여기에서는 hcode를 사용하도록 하겠습 니다.

hcode는 ftp://ftp.kaist.ac.kr/hangul/code/hcode/에서 구할 수 있습니다.
가져온 프로그램을 적당한 디렉토리에 풀고 소스 디렉토리에서 단순히 make를 입력하면 컴파일이 완료됩니다. 컴파일 결과로 생긴 hcode를 /usr/local/bin 에 복사해 둡니다.(다른 디렉토리도 상관없습니다.)

그다음 procmail을 설치합니다. procmail은 대부분의 ftp서버에서 구할 수 있습니다.
프로그램을 구한 후 디렉토리에서 make를 입력한 후 메시지에 나온대로 대답하면 설치할 수 있습니다. 만들어진 procmail을 역시 /usr/local/bin에 설치합니다.

그런다음 /etc/procmailrc을 만들어 환경설정을 해준후 sendmail이 MDA로 procmail을 사용할 수 있도록 sendmai.cf를 적절하게 수정합니다.

%% 일반적으로 PC의 MUA(Mail User Agent)로 사용되는 프로그램인 Microsoft outlook, Netscape messenger이 한글처리를 자동으로 해주므로 유닉스 시스템용 MUA프로그램인 Mutt나 elm을 사용하지 않은 한 한글 메일을 송, 수신한데 불편은 없습니다. 




2009/09/02 17:40 2009/09/02 17:40