• 검색 결과가 없습니다.

21 25 2324 22

N/A
N/A
Protected

Academic year: 2022

Share "21 25 2324 22"

Copied!
28
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

E - M a i l은 우리가 본격적으로 웹 서핑을 하기 전부터 사용되었으며, 수많은서비스가 생겨나고 또 사라지는 중에도 늘 우리와 함께 해 온 서비스이다. 이런E-Mail 은어떻게 보내고 받는 것인지, 어떤 원리로 사용할 수 있는 것인지 알아보자. 또한D A U M (구 한메일)을필두로 현재는 수많은 사 람들이 수많은 서비스 업체를 통해 사용하는 웹 메일에 대해서도 알아보겠다.

21

웹서버만들기

22 만들기 23

FTP 서버만들기

24

만들기삼바서버

25

NFS 서버만들기

(2)

다른 메일 서버로 중계하는 경우이다. 이와 관련된 자료는 RFC 문서 821 SMTP를 보면알수있다.

M I M E는 웹 서버에서 설명한 것과 동일하다. 메일에 이진 문자열로 첨부되어 보 내진내용이원래어떤형식의파일인지를알려주는역할을한다.

I M A P과 P O P 3는 메일 서버에 질의하여 메일을 확인하는 규칙이다. 우리가 많이 사용하고 있는 메일 프로그램, 예를 들어 아웃룩, 넷스케이프 메일, 유도라 등의 프 로그램은 바로 이 규칙을 사용하여메일을 보여준다. 이프로그램은 직접 메일을 보 내는대신지정한메일서버를통해메일을보낸다.

메일 서버를 이해하기 위해서는 몇 가지 단어를 알고 있어야 한다. 그 단어는 M U A, M T A, M D A가 있다. M U A는 Mail User Agent로 메일을 작성하거나 받은 메 일을 보려고 할 때 사용하는 프로그램이다. 방금전에 설명한O u t L o o k과 /b i n/m a i l 이 가장 유명한 M U A이다. M D A는 Mail Delivery Agent로 내부에서 메일을 보내고 받는 경우에 사용되는 프로그램이다. 내부에서 내부로 메일을 보내거나 받을 때만 사용되고 보통은 M T A와 같은 프로그램이다. M T A는 Mail Transfer Agent로 외부와 메일을 주고받을 때 사용하는 프로그램이다. 수신자에계정 이름만 지정하면M D A 을 사용하고, 전체 메일 주소를 사용하면M T A를 사용한다. 외부 서버와 통신을 할 때에는S M T P가사용된다.

PC 통신 시절에도 이미 메일을 사용하는 사람은 많이 있었다. 인터넷이폭발적으 로 발전하면서 이런 메일은 급격히 발전하며 더욱 많은 이에게전파되어, 지금은메 일 주소가 없는 사람은아주 드물게 되었다. 명함에도보통의 전화번호와 주소 외에 홈페이지와 메일 주소가 포함되는 것이 당연시 되어버린 지금, 메일 서비스에 조금 이라도 관심이 있는 사람은 아마 s e n d m a i l이라는 이름을 들어본 적이 있을 것이다.

이 s e n d m a i l은메일을 주고받게 해주는역할을 하는것이다. 집주소를 알려주고메 일을보내기도하며받기도하는컴퓨터세상에존재하는작은우체국이다.

메일을 주고받기 위한 서버는 sendmail 외에도 다양하다. 동네마다서로 다른 우 체국이 있으며, 규모도 모양도 모두 조금씩 다르지만 기본적으로 작업하는 방식은 모두 비슷하며, 우체국을통해들어온 편지는 다시 배분되어 받는 사람 주소지의우 체국으로 전달되는 것과 마찬가지이다. 앞서말한sendmail 외에도Q m a i l, exim 등 수십 여종의 메일 서버가 있으며, 그중에서s e n d m a i l과 Q m a i l이가장많이 사용되 고있다.

메일을 주고받기 위해 정해진 규칙과 형식이 있다. 메일에 대한 규칙으로는 (E)S M T P가 있고 보조 규칙으로는M I M E과 I M A P, P O P 3등이 있다. 먼저 이들에 대 해잠시알아보자.

S M T P는 Simple Mail Transfer Protocol의 약자로 7bit 텍스트를 전송하는 규칙이 며 상당히 간단한내용이다. 하지만인터넷의 발전과 함께점차 인터넷 상에서 사용 되는 언어가 늘어나면서 동양권 문자를 비롯한 1 6 b i t(

2-B y t e

)문자를 송수신하기 위 해 E S M T P라는 이름으로 규칙을 확장하였다. E S M T P에 추가된 내용으로는8bit 문 자열을 전송할 수 있게 하고 메일이 정확하게 도착하였는지를 확인할 수 있는 배달 확인 기능(

RFC 1894

), 메일 제한기능(

RCC 1870

), 전송중에끊어진메일을다시전송 하게하는기능(

RFC 1845

)등이있다.

(E)S M T P가 사용되는 경우에는 메일을 다른 곳으로 발송하는 경우와 받은 메일을 이 부분에서는조금은 골치 아픈 이야기가 나올 지도 모르겠다. 그러나메일 서비스를 하기 전에, 꼭 필요한 메일 서버가 과연 어떤 원리로 어떤 일을 하는지 알아보는 것은 당연한 일이다. 조금재미없 더라도다음에나올설치와설정을기대하며계속분발해나가자.

메일 서버의개요

0 1

(3)

이 장에서는 일반적인 메일 서버를 구축하는 것은 물론 앞서 배운 웹 서버와 이 메일 서버를 연결하여 다음(

h t t p: / /w w w.d a u m.n e

t)과 같은 웹 메일 사이트를 만들어 볼 것이다. 이 장에 나오는 내용을잘 따라하면 실제로 사용할 수 있는 웹메일사이 트를구축할수있을것이다.

메일 서버를 설치하려면 우선 D N S에 메일 서버에 대한정보가 들어있어야 한다.

정확한 설정은 DNS 서버만들기 부분에서 다루었으니, 여기에서는메일과 관련 있 는부분만을보도록한다.

D N S에 등록되는 레코드 중 MX 레코드는Mail Exchange 레코드라고 하여 해당 주소에 대한 메일 서버가 어디인지를 알려주는 역할을 한다. 레코드의 형식은 다음 과같다.

도메인MX 우선순위메일서버 주소.

국내 통신망 중의 하나인 나우누리의 경우를 살펴보자. 나우누리 메일 도메인은 n o w n u r i.n e t이고 a d m i n이라는 사용자의E-Mail 주소는a d m i n@n o w n u r i.net 이다.

그리고 메일 서버의 주소는 m a i l.n o w n u r i.n e t이다. 주소가 이름으로 되어 있으므로 이서버의이름에대하여등록이되어있어야한다.

97 IN PTR mail.nownuri.net.

nownuri.net MX 0 mail.

D N S에서 메일에 대한 간단한 설정만을 살펴보았다. 첫 번째 줄에서 m a i l.n o w n u r i.n e t의 주소는2 0 3.2 3 6.1 2 8.9 7이므로 다른 곳에서m a i l.n o w n u r i.n e t에 연결하려 할 때마다 나우누리 D N S는 2 0 3.2 3 6.1 2 8.9 7이라는 IP 주소를 알려 줄 것이다.

a d m i n@n o w n u r i.n e t으로 메일을 보낼 때에도 우선 나우누리DNS 서버를 검색하여 M X로 지정된 컴퓨터를 찾을 것이다. M X에 m a i l.이라고 지정되어 있으므로 m a i l.n o w n u r i.n e t을 찾는데 0이라는 우선순위가 있다. 이 부분은 여러 메일 서버가 있을 때 어느 서버를 먼저 찾을 것인가를 알려주는 역할을 한다. 우선순위에들어갈 수 있는 수는 0부터6 5 5 3 5까지이다. 숫자가작을수록 먼저찾는다. 가장 빠른0으로 되어 있으므로m a i l.n o w n u r i.n e t이 메일서버임을알았다. DNS 서버에 물어본결과 가 2 0 3.2 3 6.1 2 8.9 7이므로이주소를가지고있는컴퓨터에서메일을보낼것이다.

메일 서버를 만들기 위해필요한것은 무엇일까? 재료가없으면 벽돌을 만들수 없고단서가없으면 결론을내릴수없다고셜록홈즈는말한바 있다. 메일서버를만드는데 꼭필요한재료, 필요한 내 용을잘확인하여제대로메일서버를만들어보자.

메일 서버에필요한요소

0 2

(4)

다음명령어로위의세가지 RPM 파일을설치하자.

[root@webmail /usr/src/redhat/RPMS/i386]# rpm -ivh sendmail-*

이 패키지를설치하는 것으로 기본설정은 끝났다. 이제세부적인 설정을 해보자.

가장 중요한 설정 파일은 /e t c/s e n d m a i l.cf 파일로, 리눅스의여러설정파일 중 가장 복잡하고 방대하여 다루기 힘든 것으로 알려져 있다. s e n d m a i l.c f는 m4 프로그램이 여러 개의 분리된 파일을 입력받아 처리하여 출력한 것으로 이 책에서는 중요한 부 분만확인하고넘어가겠다.

앞서 메일 서버 개요에서 가장 많이 사용하는 메일 서버가s e n d m a i l과 Q m a i l이라 고하였다. 이장에서는s e n d m a i l을설치해보겠다.

s e n d m ail 설치

s e n d m a i l은가장많이사용하는메일 서버로많은배포판에기본으로포함되어 있 다. 그래서 패키지를 설치하는 것만으로도 어느 정도 기본 설정이 되어 있어 간단하 게 메일 서버를 꾸밀 때 편리하게 사용할 수 있다. 여기서는 패키지와 소스 두 가지 모두를사용하여설치해보겠다.

s e n d m a i l은 매우 방대한 프로그램이다. s e n d m a i l을이용하여 제대로 튜닝된 메일 서버를 관리하려면s e n d m a i l의 설정 파일인s e n d m a i l.cf 에 대해자세하게 이해하고 있어야 한다. 하지만 일반적인 상황에서는 이 설정 파일의 세부 내용보다s e n d m a i l 의 편리한 기능과 최신의 보안 문제에 대해 익히는 것이 더 현실적이다. s e n d m a i l에 대한 최신 소식은 인터넷 홈페이지 h t t p: / /w w w.s e n d m a i l.o r g에서 확인할 수있다.

새로운소식이많이나오기때문에자주들러야할것이다.

s e n d m ail 패키지로 설치

s e n d m a i l을패키지로설치할경우에필요한파일은세가지이다.

sendmail-8.12.9-1.i386.rpm sendmail-cf-8.12.9-1.i386.rpm sendmail-doc-8.12.9-1.i386.rpm

실제 운영할 때에는 처음 것만 있어도 된다. 두 번째 파일은 설정 파일을 새로이 생성할 때 필요한 것이고 세 번째 파일은 설명서가 들어있는 파일이다. 데비안 사용 자는 .d e b인 파일로 설치하면 된다. 이 장에서는 레드햇 계열의 배포판을 기준으로 설명할것이다.

가장 널리 사용되는 s e n d m a i l을 설치해보자. 이부분이 끝날 때 쯤에는 자기 도메인으로메일 주소 를사용할수있을것이다.

sendmail 설치

0 3

Cwlocalhost.localdomain 이 부분은 서버의 별명을 입력하는 부분으로* @ l o c a l h o s t @

localdomain으로들어오는 모든 메일을 처리하라는의미이다.

V9/Berkeley 기본 설정이며 변경하지 않는다.

V9 형식의 파일이라는의미이다.

Cwlocalhost 이 부분은 위에서 설명한 것과같다.

*@localhost 주소도 받아들인다.

Fw/etc/mail/local-host-names 이 내용은Cw와 같으나 동일 내용이 파일로 존재한다는 뜻이

다. 위에 있는C w를 주석으로 하고 그 내용을 주어진 파일 /etc/mail/local-host-names에 입력해도 된다.

다음과 같이 호스트네임을한줄에 하나씩 입력한다.

CP. 도메인을자동으로 찾지 못하는 경우에이를 설정한다.

FR-o /etc/mail/relay-domains Relay를허용할 도메인의 목록 파일을지정한다.

DM masquerading을 사용하는경우에 그 도메인을 입력한다.

Kvirtuser hash -o /etc/mail/virtusertable.db

가상 사용자에대한 목록파일을 지정한다.

CPREDIRECT

Kaccess hash -o /etc/mail/access.db

서버로의 접근을 허용할 주소가들어있는DB를 지정한다.

DZ8.11.6 config의 버전을표시한다. 프로그램의 버전과거의 같다.

###############

# Options #

###############

[예제 22-1] sendmail.cf

local host

localhost.localdomain

(5)

여기부터중요한 설정이 들어있다. 자신의 시스템에 맞게 정확히 설정하자.

AliasFile=/etc/aliases Alias 파일의 경로를 지정한다.

MinFreeBlocks=100 파일시스템에최소 여유 공간의 크기를지정한다.

#MaxMessageSize=1000000 단일 메시지의최대 크기를 지정한다. 단위는byte이다.

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

Forward 파일을찾는 위치를 지정한다.

$w와$z는 내부 예약된변수이다.

기본설정값은 홈 디렉토리의.forward이다.

QueueDirectory=/var/spool/mqueue 메일큐의 위치를 지정한다.

SmtpGreetingMessage=$j Sendmail $v/$Z; $b

메일서버에 접속했을 때 나타나는배너의 형식을 지정한다.

이 배너를 보고 싶다면 메일 서버에서telnet localhost 25 명령 을 사용한다.

이 후에 나오는 내용은 인증과 관련된 내용이다.인증 부분은 보안과 직결되므로 세심하게 설정 하도록한다.

# AuthMechanisms=GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5 인증시에사용하는 방법들을나열한다.

각 알고리즘을 이용하여 인증하기 위해 먼저 해당 라이브러리 가 서버에설치되어 있어야 한다.

# DefaultAuthInfo=/etc/mail/default-auth-info

기본인증정보가 들어 있는 파일을지정한다. 이 정보는서버를 이용하여 메일을보낼 때 사용한다.

AuthOptions=A 인증 옵션을지정한다. A는 모든 것을 의미한다.

# CACERTPath= 인증 경로를지정한다.

# CACERTFile= 인증 정보가들어 있는 파일을 지정한다.

# ServerCertFile= 서버 인증에대한 파일을 지정한다.

# ServerKeyFile= 서버인증 비밀키가 저장되어 있는파일을 지정한다.

보통pem으로되어 있다.

# ClientCertFile= 클라이언트인증 파일을 지정한다.

# ClientKeyFile= 클라이언트인증 비밀키가 저장된 파일을지정한다.

# DHParameters DSA/DH를 사용할 때에만포함한다.

# RandFile OpenSSL 환경에서/ d e v / u r a n d o m을사용하지않을때지정한다 .

다음부분에서는 믿을 수 있는 사용자를지정한다. Ft는 해당 정보가 들어있는파일의 위치를 지정한다.

Ft/etc/mail/trusted-users

Troot Tdaemon Tuucp

#########################

# Format of headers #

#########################

다음에 등장하는 알아보기어려운 내용은 사실 헤더의형식이다.

$t, $i, $j 등은 변수로이미 앞에서 정의가 되어있다.

H?P?Return-Path: <$g>

HReceived: $?sfrom $s $.$?_($?s$|from $.$_)

$.$?{auth_type}(authenticated$?{auth_ssf} (${auth_ssf} bits)$.)

$.by $j ($v/$Z)$?r with $r$. id $i$?{tls_version}

(using ${tls_version} with cipher ${cipher} (${cipher_bits} bits) verified ${verify})$.$?u for $u; $|;

$.$b

H?D?Resent-Date: $a H?D?Date: $a

H?F?Resent-From: $?x$x <$g>$|$g$.

H?F?From: $?x$x <$g>$|$g$.

H?x?Full-Name: $x

H?M?Resent-Message-Id: <$t.$i@$j>

H?M?Message-Id: <$t.$i@$j>

이 이후는 메시지를 분석해서 처리하는 모습을 보인다.내용이 상당히 많아서 이 내용을 전부 분 석하려면 별도의 책으로 만들어도 될 정도이다.중요 포인트만 보도록 하겠다.모든 처리 규칙을 보려면/etc/sendmail.cf나/etc/mail/sendmail.cf(8.11.X이후)를 참고하기 바란다.

######################################################################

### check_rcpt -- check SMTP 'RCPT TO:' command argument

######################################################################

SLocal_check_rcpt Scheck_rcpt

R$* $: $1 $| $>"Local_check_rcpt"$1

R$* $| $#$* $#$2

(6)

R$* $| $* $: $1

# anything terminating locally is ok

R$+ < @ $=w > $@ RELAYTO

R$+ < @ $* $=R > $@ RELAYTO

R$+ < @ $+ > $: $>LookUpDomain <$2> <?> <$1 < @ $2 >> <+To>

R<RELAY> $* $@ RELAYTO

R<$*> <$*> $: $2

# check for local user (i.e. unqualified address)

R$* $: <?> $1

R<?> $* < @ $+ > $: <REMOTE> $1 < @ $2 >

# local user is ok

R<?> $+ $@ RELAYTOLOCAL

R<$+> $* $: $2

# anything originating locally is ok

# check IP address

R$* $: $&{client_addr}

R$@ $@ RELAYFROM originated locally

R0 $@ RELAYFROM originated locally

R$=R $* $@ RELAYFROM relayable IP address

R$* $: $>LookUpAddress <$1> <?> <$1> <+Connect>

R<RELAY> $* $@ RELAYFROM relayable IP address

R<$*> <$*> $: $2

R$* $: [ $1 ] put brackets around it...

R$=w $@ RELAYFROM ... and see if it is local

# check client name: first: did it resolve?

R$* $: < $&{client_resolve} >

R<TEMP> $#error $@ 4.7.1 $: "450 Relaying temporarily denied.

Cannot resolve PTR record for "$&{client_addr}

R<FORGED> $#error $@ 5.7.1 $: "550 Relaying denied. IP name possibly forged "$&{client_name}

R<FAIL> $#error $@ 5.7.1 $: "550 Relaying denied. IP name lookup failed "$&{client_name}

R$* $| $* $@ $>"Basic_check_rcpt"$1 SBasic_check_rcpt

# check for deferred delivery mode

R$* $: < ${deliveryMode} > $1

R< d > $* $@ deferred

R< $* > $* $: $2

R$* $: $>ParseRecipient $1 strip relayable hosts

# blacklist local users or any host from receiving mail

R$* $: <?> $1

R<?> $+ < @ $=w > $: <> <$1 < @ $2 >> $| <F:$1@$2> <U:$1@> <H:$2>

R<?> $+ < @ $* > $: <> <$1 < @ $2 >> $| <F:$1@$2> <H:$2>

R<?> $+ $: <> <$1> $| <U:$1@>

R<> <$*> $| <$+> $: <@> <$1> $| $>SearchList <+To> $| <$2> <>

R<@> <$*> $| <$*> $: <$2> <$1> reverse result

R<?> <$*> $: @ $1 mark address as no match

R<$={Accept}> <$*> $: @ $2 mark address as no match R<REJECT> $* $#error $@ 5.2.1 $: "550 Mailbox disabled for this recipient"

R<DISCARD> $* $#discard $: discard R<ERROR:$-.$-.$-:$+> $* $#error $@ $1.$2.$3 $: $4 R<ERROR:$+> $* $#error $: $1

R<$+> $* $#error $: $1 error from access db

R@ $* $1 remove mark

# authenticated?

R$* $: $1 $| $>RelayAuth $1 $| $&{verify} client authenticated?

R$* $| $# $+ $# $2 error/ok?

R$* $| $* $: $1 no

# authenticated by a trusted mechanism?

R$* $: $1 $| $&{auth_type}

R$* $| $: $1

R$* $| $={TrustAuthMech} $# RELAYAUTH

(7)

버전은위의 정보와 다소 차이가 있어도 상관없다. 또한o p e n s s l만설치되어있다 면 o p e n s s l-devel 패키지는없어도된다.

[root@server /tmp]$ rpm -qa | grep sasl | grep -v grep libsasl-1.5.24-4kr

일단 위와 같이 확인했을 때, o p e n s s l이 설치된 경우와 그렇지 않은 경우 s e n d m a i l의 설치에도 다소 차이가 있을 수 있다. 여기에서는 이런 두 가지 경우에 대해 R P M으로s e n d m a i l을설치해보겠다.

openssl 이설치되어 있을 경우

일단 각 배포판의 패키지 FTP 서버에서 자신의 배포본 버전에 맞는 sendmail 과 l i b s a s l의 소스 R P M을 받는다. 이미s a s l이 설치되어 있다면l i b s a s l은 받지않아도 된 다. 다운로드가 끝나면 자신의 서버의 환경에 맞도록 리빌드한다. 여기서는 s e n d m a i l의 예만 들 것이나, s a s l을 새로 설치할 때에는 sasl 을 먼저 리빌드하여 설 치한다음 s e n d m a i l을리빌드한다.

s e n d m a i l을 리빌드 하려면 d b 3-devel pacakge가 설치되어 있어야 한다. 지금은 거의 사용하지 않는 레드햇 6.x의 경우에는d b 1-devel package가 필요하다. 먼저 rpm -q 명령으로확인한다음필요하다면배포본C D에서설치한다.

# rpm --Uhv sendmail-8.12.4-2.src.rpm

# cd /usr/src/redhat/SPEC

# vi sendmail.spec

s e n d m a i l.s p e c을 연 다음 R e q u i r e s: libsasl >= 1.5.18 openssl >= 0.9.6이라는 내 용이 들어 있는 줄을 삭제한다. 물론버전 번호는 상황에 따라 다를 것이다. 패키지 를 설치하기 위해 필요한 라이브러리이지만 버전 충돌의 문제가 있을 수 있으므로 RPM 프로그램이자동으로판단할것이다.

# rpm -ba sendmail.spec

위의 명령을 실행하면s e n d m a i l이 환경에 맞는 새로운 패키지를 만들어 낼 것이 다. 새로 생성된 패키지는 /u s r/s r c/r e d a h t/R P M S/i 3 8 6에 저장되었으므로 이것을 설 치한다.

소스로 설치

s e n d m a i l이 8.1 0.X로 변화되면서 상당히 많은 내용이 추가되어 사전에 확인할 사 항이 많이 늘어났다. s e n d m a i l을 설치하기 전에 미리 설치해야 하는 프로그램들은 다음과같다.

• d b 3, d b 3-d e v e l

• l i b s a s l, l i b s a s l-devel 또는c y r u s-s a s l, c y r u s-s a s l-devel : 둘은 같은라이브 러리이나이름만다르다. 둘중하나만있으면된다.

• o p e n s s l, o p e n s s l-devel

일단 s e n d m a i l의 auth 기능을 사용하려면o p e n s s l과 s a s l이 있어야 한다. 먼저 자 신의시스템에o p e n s s l과 s a s l이설치되어있는지확인해보자.

[root@server /tmp]$ rpm -qa | grep openssl | grep -v grep openssl-0.9.6b-1kr

openssl-devel-0.9.6b-1kr

R$* $: <?> $&{client_name}

# pass to name server to make hostname canonical R<?> $* $~P $:<?> $[ $1 $2 $]

R$* . $1 strip trailing dots

R<?> $@ RELAYFROM

R<?> $=w $@ RELAYFROM

R<?> $* $=R $@ RELAYFROM

R<?> $* $: $>LookUpDomain <$1> <?> <$1> <+Connect>

R<RELAY> $* $@ RELAYFROM

R<$*> <$*> $: $2

# anything else is bogus

R$* $#error $@ 5.7.1 $: "550 Relaying denied"

이 줄을 활성화한 상태로 두어야 한다.그렇지 않으면open relay가 되어 스팸을 보낼 수 있는 서 버가 된다.찾는 방법은SLocal_check_rcpt을 찾은 뒤에Relaying로 네 번째 위치에 있다.나머지 세 개는 위로14번째에서12번째까지에 있다. bogus라는 문자를 검색하여 찾는 것이 더 빠를 것 이다

(8)

기타 s e n d m ail 설정

여기서 설정할 것은 실제로 계정은 없고 E-Mail 주소만 있는 가상 사용자와 SMTP auth, 릴레이설정이다. 먼저가상사용자에대하여알아보자.

가상 사용자는E-Mail 주소만 있을뿐 실제로 홈 디렉토리가 존재하지 않고비밀 번호도 없다. 따라서 사용자 계정이 존재하지 않는다. 하지만 그 주소로 보내면 누 군가 받게 되어 있다. 가상 사용자에 대한 내용은 a l i a s e s파일에 있으며 그 위치는 /e t c/m a i l에 있다. 파일의내용은 간단하다. 가상사용자의이름오른쪽에실제사용 자의이름을적어주면된다.

어느 회사나 홈페이지하단에보면 w e b m a s t e r@d o m a i n.c o m이라는E-Mail 주소 를 볼 수 있다. 하지만 대부분 실제로 이 계정이 존재하는 것은 아니다. 물론 그런 계정을 사용하는 회사도 있겠지만 대부분은 이 주소를 가상 사용자로 만들어 관리 자에게 메일을 포워딩하는 용도로 사용한다. 이 방법을 사용하면 관리자나 관리자 의 메일 주소가 바뀌더라도 바로바로 해당하는 사람에게 연락할 수 있다. p u k k i라 는사용자가있고 w e b m a s t e r로오는메일을관리한다고하면/e t c/m a i l/aliases 파일 에다음과같이적어준다. 정말간단하게설정할수있다.

webmaster pukki

때로는동보편지의 형식으로 보낼주소가필요할 수도 있다. 예를들어 대학교에 서는 학과 내 교수님들께 동시에 보내는 메일을 생각할 수 있다. 물론 회사에 있는 각부서장에게보내는메일도생각할수도있다.

p r o f라는 가상 사용자 주소로 메일을 보내면 이 대학의 모든 교수에게 동보 메일 을 보낼수 있다고 생각해 보자. 이학교의교수 메일은 모두p r o f 1, p r o f 2와 같은계 정을사용한다고생각하면다음과같이설정할수있을것이다.

prof prof1, prof2, prof3, prof4, prof5, ...(이하생략)

각계정을 , (

콤마

)로연결하여적으면된다.

o p e n s s l 이 설치되어 있지 않은 경우

f t p: / /m i r r o r.o o p s.o r g/p u b/L i n u x/R E D H A T/R P M S/에서 o p e n s s l, l i b s a s l, sendmail 패키지를받은다음openssl → libsasl → s e n d m a i l 순서대로 설치한다.

f t p: / /m i r r o r.o o p s.o r g에서 받은 s e n d m a i l의 경우에는smtp auth 기능이 구현 되 어 있으므로 설치 및 설정을 따로 할 필요가 없다. 괜히 이 책을 보고 smtp auth를 구현한다고m4 파일을새로생성하지말자.

먼저간단하게s e n d m a i l의 rpm file의구성을살펴보자.

sendmail-version.i386.rpm sendmail-cf-version.i386.rpm sendmail-doc-version.i386.rpm

실제로 우리가 메일 서버를 운영하기 위해서는s e n d m a i l-v e r s i o n.i 3 8 6.r p m만 있 으면 되며 c f와 d o c는 운영 및 변경에 필요한 문서들로 구성이 되므로 굳이 설치를 하지 않아도 상관없다. 직접 소스로 설치할 경우 여러 가지 까다로운 내용이 있기 때문에 설명하기 상당히 까다롭다. 간단하게 순서를 확인하고 싶다면 s e n d m a i l의 소스파일에서INSTALL 파일을참고하기바란다. 요약하면다음과같다.

1. D e v t o o l s/S i t e/R E A D M E를보고필요한파일을생성한다.

2. Sendmail 디렉토리에서sh Build 명령을수행한다.

3. c f/c f로 들어가서 현재 시스템에 맞는 mc 파일을 s e n d m a i l.m c로 복사하고 s h Build sendmail.c f를수행한다

4. 기존에 있는s e n d m a i l.c f와 s e n d m a i l을백업한다. 3단계에서생성된두개의파 일 s e n d m a i l.c f와 s u b m i t.c f를 /e t c/m a i l에 복사한다. sh Build install-c f를 하면 이작업을할수있다.

5. s m m s p라는 I D와그룹을만든다.

6. 다시sendmail 디렉토리로가서sh Build install을수행한다.

7. utility 디렉토리에서sendmail 관련유틸리티를설치한다.

이렇게하여최신의s e n d m a i l을설치하였다.

(9)

는 동안에도 사용자가 메일을읽을수 있는안전한 메일함이다. 또한그밖에도 여러 메일함방식을지원한다.

S i m p l i c i t y (간단함)

q m a i l은다른 M T A에비해프로그램의크기가상당히작은편이다. 위와같은장점 들을모두포괄하면서도작은용량으로서버를운용할수있는이유는다음과같다.

• 다른 M T A들은 전달, A l i a s i n g, 메일링리스트 메커니즘이 분리되어 있다. 하 지만 q m a i l은 직접 모든 기능을 수행할 수 있는 단순한 전달 메커니즘을 사 용한다.

• 다른 M T A들은 빠르고 불안전한 상황에서 느리고 큐잉(

Q u e u e i n g

)하는 가시 적인전송모드를지원한다. 하지만q m a i l은큐에서바로전송한다.

• 다른 M T A도 포함하고 있는 효율적인i n e t d에 의한 가시화된 감시를 일정한 시스템로드를 가지고 수행하지만q m a i l은 본래 i n e t d에 의해 안전하게 구동 된 q m a i l - s m t p d를사용하여시스템의로드를제한하도록만들어졌다.

s e n d m a i l 을 대체하는 메일서버

q m a i l은호스트, 유저마스커레이딩과완벽한호스트숨김, 가상도메인, n u l l 클라 이언트, list-owner rewriting, 릴레이 조절, 더블 바운스 기록, R F C 8 2 2를 따르는 주 소 목록, 호스트간의 메일링 루프(

L O O P

)인식, 수신자 단위의 체크 포인팅, 다운된 호스트를 위한 보류기능, 스케줄에 따른 메시지 재전송 기능 등을 지원한다. 또한 q m a i l은 기존의 어플리케이션들과의 호환을 위해 s e n d m a i l 바이너리를 대체하는 w r a p p e r를가지고있다.

역사

q m a i l은 댄 번스타인(

Dan Bernstein, http://cr.yp.to/

)이 만들었다. 첫 번째 공개 릴 리즈는 0 . 7 0 b로 1 9 9 6년 1월 2 4일에 발표되었으며, 첫번째 감마 릴리즈는0 . 9 0으로 1 9 9 6년 8월 1일에 발표되었다. 버전1 . 0은 첫 번째 공식 릴리즈이며1 9 9 7년 2월 2 0 일에 발표되었다. 현재는1 . 0 3으로 1 9 9 8년 6월 1 5일에 릴리즈 되었다. 다음 버전은 2 . 0으로 새로운 기능을 추가하는방향으로 진행될 것이라고 제작자는 홈페이지에서 소개하였다.

개요

q m a i l은유닉스를위한 인터넷기반의메일 전송프로그램이다. 이프로그램은것 은 다른 M T A처럼 메시지 교환을 위해 S M T P를 이용하며, 유닉스 시스템에서 가장 많이 사용하는s e n d m a i l을 효과적으로 대체할 수 있다. 그렇다면 먼저, 왜 기껏 설 치한 s e n d m a i l을 대신하여q m a i l을 설치하는지에대한 의문을 풀어보겠다. 이제부 터 q m a i l만의장점과특징을알아보자.

Se c u r i t y (안정성)

q m a i l은 높은 보안을 위하여 설계되고 구현되었다. 메일의전송은 매우 중요하고 반드시 전달되어야 하며, 완벽하고 안전해야 한다. 이 것이 q m a i l을 사용하는 대표 적인이유로 s e n d m a i l을비롯한다른 M T A의보안허점을보완하고자한것이다.

Pe rfo r m a n c e ( 효율성 )

펜티엄 시스템에서

B S D

운영체제를 사용하는환경에서q m a i l은 하루에2 0만개의 로컬 메시지를 손쉽게 처리할 수 있다. 이 수치는분리된 메시지를주입하고 메일박 스로 배달하는 실제 테스트를 바탕으로 한 것이다. q m a i l은 메시지를s e n d m a i l보다 빠르고 안정적으로 처리한다. 특히 수많은 메일을 동시에 배달해야 하는 메일링리 스트의 경우 가장 빠른 성능을 보였다. 예를 들어 1 0 0 0개 이상의 서로 다른 호스트 에메일을배달하는데단 7 6초밖에걸리지않았다.

Re l i a b i l i t y (신뢰성)

q m a i l의 단순한 전달방식의 철학은 메시지의 송신을 보장한다. 또한N F S환경에 서도 안전한M a i l d i r 형태의 메일함을제일 먼저사용하기도하였다. M a i l d i r 형태는 배달이 이루어지고 있는 동안에 시스템이 다운되더라도 파일시스템에 문제가 생기 지 않는 유일한 메일함이며, N F S 파일시스템에서 동시에 여러 개의 메일이 배달되 앞서 우리는 s e n d m a i l을 설치해 보았다. 대중적이고편리하지만 때로는“귀신의집”이라 불릴 만큼 수많은 보안허점이 발견되는 sendmail 대신, 조금까다롭지만 안전한 메일 서버를 운영할 수 있는 q m a i l을설치해보겠다.

qmail 설치

0 4

(10)

기능 리스트

설정

상이한 유닉스시스템에 자동으로 적응한다. 대부분의유닉스 시스템에서 별도의 포팅이없이 하나의 소스로 설치할수 있다. 또한 호스트마다설정이 자동으로 이루 어져빠른설치가가능하다.

안정성

주소들, 파일, 프로그램은명확하게 구분되어 있다. s e t u i d 코드와r o o t 코드가 최 소화되어 있어 안전하다. 다섯 가지의 믿을만한 파티션과 안전한 계통 옵션을 지원 한다.

메시지 구축(q m a i l - i n j e c t )

• 주소그룹을완벽하게지원한다.

• RFC822 포맷의구형스타일의주소변환을자동으로지원한다.

• 현재의유저에이전트(

M U A

)와호환되는sendmail 후크가있다.

• 헤더라인의길이는메모리에의해서만제한된다.

• 호스트및이용자 m a s q u e r a d i n g을지원한다.

• 자동적으로메일을따라서메시지를생성한다.

SMTP 서비스(q m a i l - s m t p d )

• RFC 821, RFC 1123, RFC 1651, RFC 1652, RFC 1854

• 8-bit clean

• 9 3 1/1 4 1 3/i d e n t/TAP callback(

t c p-e n v

)

• 릴레이제어: 인증되지않은외부사용자의릴레이방지(

c o n t r o l/ r c p t h o s t s

)

• 릴레이와앨리어스간의간섭없음

• 로컬IP 주소자동인식

• 버퍼별타임아웃지원

• 홉카운팅(

hop counting

)

• 병렬처리제한(

u c s p i-t c p/t c p s e r v e r, available separately

)

• 알려진스팸서버로부터의연결거부(

t c p s e r v e r

)

• 인증된클라이언트를위한릴레이와메시지재작성

• 선택적인R B L/ORBS 사용가능(

u c s p i-t c p/r b l s m t p d

) 많은 대형 인터넷 사이트들이q m a i l을 이용하고 있으며 이중 대표적인 사이트는

다음과같다. 이것만으로q m a i l이얼마나강력한지알수있을것이다.

• H o t m a i l의외부 전송메일(

비록 M i c r o s o f t는그들이 W 2 K로 옮겨가고 있다고생 각하지만사실은q m a i l을 사용한다.

)

• U S A . n e t의외부전송메일

• Address.com, Yahoo! mail, Network solutions, MessageLabs

• R e d i f f m a i l . c o m(

현재1천만사용자, 매일3만명추가중

)

• C o l o n i z e . c o m(

하루에1천 2백만통의메일처리

)

• l i s t s e r v . a c s u . b u f f a l o . e d u(

큰 리스트서버의 허브 서버로 1 9 9 6년이래로 q m a i l을

이용하고있다

)

• 오하이오주립대학(

가장큰미국의대학

)

• o n e l i s t . c o m(

e g r o u p s를 구매하는곳으로서, 또다른 큰 공짜메일링리스트서비

스이다

)

• Listbot, USWest.net(

미국서부지역의 I S P

)

• RIPE, Matchlogic, Telenordia, gmx.de(

독일 I S P

)

• N e t Z e r o(

공짜 I S P

)

q m a i l은 각 부분별 코드를 개개의 파일로 분할해서 코드를 축소하고 보안 허점이 발견되기 쉬운 s e t u i d 코드를 최소화하였다. 전체코드 중에서r o o t 권한이나s e t u i d 로 동작하는 코드는 약 1 0 %정도로 매우작다. 그렇기에1 9 9 8년에 1 . 0 3이 발표된 이 후 한번도 보안상의 허점이 발견되지 않았다. 저작자는 홈페이지에서 밝히기를 이 프로그램에서 보안상 잘못된 점을 발견하는 사람에게 거액의 상금을 지급하겠다고 공언하였다. 하지만아직까지 누군가 그 상금을 받았다고 하는 소식은 접힌 것이없 다. 관심이 있는 사람은 도전해 보자(

참고 URL: http://cr.yp.to/qmail/guarantee . h t m l

) .

전체코드 중에서 r o o t 권한으로 동작하는 파일은 q m a i l - s t a r t와 q m a i l - l s p a w n 두 가지 뿐이며, 이들은 전체 시스템을 시작하거나 내부 메일을 전송하기 위한 프로그 램이다. 또한s e t u i d로 동작하는 파일은 q m a i l - q u e u e로 새로운 메시지를 외부 발송 q u e u e에입력하는일을한다.

(11)

포워딩과 메일링 리스트(q m a i l - l o c a l )

• s e n d m a i l의.forward 와호환(

d o t-f o r w a r d

)

• hashed forwarding databases(

f a s t f o r w a r d

)

• s e n d m a i l의/e t c/a l i a s e s(또는/ e t c / m a i l / a l i a s e s)와호환(

f a s t f o r w a r d/n e w a l i a s e s

)

• 주소의와일드카드지원(

.q m a i l-d e f a u l t, .q m a i l-f o o-d e f a u l t 등

)

• 소유자를위한메일링리스트: 자동으로바운스를전환하고휴가메세지전송

• V E R P s : 메일링리스트바운스를위한자동적인수신자인식

• D e l i v e r e d-To : 메일루프방지

• 자동가입요청관리(e z m l m)

로컬 전송(q m a i l - l o c a l )

• 이용자가제어하는주소계층

• mbox 배달

• 신뢰되는NFS 배달(

m a i l d i r

)

• 이용자가제어하는전송프로그램: procmail 등(

q m a i l-c o m m a n d

)

• 선택적인새메일알림(

q b i f f

)

• 선택적인NRUDT 지원(

q r e c e i p t

)

• 선택적인필터링(

c o n d r e d i r e c t, b o u n c e s a y i n g

)

POP3 서비스(qmail-popup, qmail-pop3d)

• RFC 1939

• UIDL 지원

• TOP 지원

• APOP 후크

• 분리된암호인증프로그램(

c h e c k p a s s w o r d

)

Q m a i l과 함께 사용하는 부속 프로그램

• d o t-forward : s e n d m a i l의.f o r w a r d를처리하기위한프로그램

• fastforward : /e t c/a l i a s e s를처리하기위한프로그램

• Unix Client-Server for TCP(

u c s p i-t c p

) : 일반적인 유닉스 시스템에서T C P/

I P서버와 클라이언트를 만드는 프로그램으로, 여기서는 인터넷 수퍼서버인 i n e t d와 x i n e t d를대체하기위해사용

• daemontools : 패키지의 모니터, 컨트롤, 그리고로그를 수행하고 오랫동안

큐 관리(q m a i l - s e n d )

• 메시지를즉시큐에추가

• 병렬처리제어(

c o n t r o l/c o n c u r r e n c y r e m o t e, c o n t r o l/c o n c u r r e n c y l o c a l

)

• 큐디렉토리의분리: 큐가커지더라도속도에는변화없음

• 2차원의재시도스케줄: 오래된메시지는재시도빈도를낮춤

• 독립적인메시지재시도스케줄

• 자동적이고안전한큐잉(

q u e u e i n g

) : 시스템에문제가있더라도메일을보존

• 자동수신자별체크포인팅

• 자동큐청소(

q m a i l-c l e a n

)

• 큐보기(

q m a i l-q r e a d

)

• 자세한전송통계(

q m a i l a n a l o g

)

바운스(q m a i l - s e n d )

• QSBMF 바운스메세지: m a c h i n e-readable 과 h u m a n-readable

• HCMSSC 지원: RFC 1893 오류코드에서독립적

• 더블바운스는p o s t m a s t e r에게보내짐

• 도메인별라우팅(

q m a i l-s e n d

)

• 복수의로컬호스트이름지원(

c o n t r o l/l o c a l s

)

• 복수의가상도메인지원(

c o n t r o l/v i r t u a l d o m a i n s

)

• 도메인와일드카드지원(

c o n t r o l/v i r t u a l d o m a i n s

)

• 설정이가능한percent hack 지원(

c o n t r o l/p e r c e n t h a c k

)

• UUCP hook

SMTP 전송(q m a i l - r e m o t e )

• RFC 821, RFC 974, RFC 1123

• 8-bit clean

• 다운된호스트를위한배달지연

• 지능적인라우팅: s m a r t h o s t, l o c a l n e t, m a i l e r t a b l e(

c o n t r o l/s m t p r o u t e s

)

• 버퍼별타임아웃

• 수동SMTP 큐: S L I P/P P P를완벽지원(

s e r i a l m a i l

)

• A u t o T U R N 지원(

s e r i a l m a i l

)

(12)

서는 안 된다. 이 프로그램은 압축을 풀어놓은 디렉토리가 프로그램의 홈 디렉토리 가된다.

[root@webmail /usr/local/src]# ls checkpassword-0.90.tar.gz daemontools-0.76.tar.gz qmail-1.03.tar.gz ucspi-tcp-tar.gz

q m a i l의 압축을 풀고 소스 디렉토리로 이동하자. 소스 디렉토리에서c o n f - h o m e 파일을 열어보면 첫째 줄에 / v a r / q m a i l 이라고 적혀 있을 것이다. 이 곳이 q m a i l이 기본적으로 설치되는 디렉토리이다. 다른 곳에 설치하려면 이 부분을 편집한다. 설 치 디렉토리를 다른 곳으로 지정하였다면 해당 디렉토리를 만들어 놓는다. 이 책에 서는기본디렉토리에설치하는것으로하겠다.

기본 디렉토리를 사용하지 않고 설치하는 경우를 위해 $ Q M A I L이라는 환경변수 를 정의하겠다. 하지만 이 변수는 책에서만 사용할 것이다. 이후의 내용 중에서

$ Q M A I L이라고 하는 부분은 c o n f - h o m e에 적혀있는 디렉토리로 이해하면 된다. 현 재 $ Q M A I L의값은 / v a r / q m a i l이다.

q m a i l은 보안을 위해 8명의 사용자I D와 2개의그룹을 사용한다. 소스디렉토리에 보면 I N S T A L L . i d s 라고 하는파일이 있다. 이 파일의 내용중에서L I N U X 부분을 찾 아서 그 아래에 있는 내용을 그대로실행하면 된다(

다른 O S인경우에는 O S에 맞추어 실행한다

) .

리눅스에서실행할명령은다음과같다.

# groupadd nofiles

# useradd -g nofiles -d $QMAIL/alias alias

# useradd -g nofiles -d $QMAIL qmaild

# useradd -g nofiles -d $QMAIL qmaill

# useradd -g nofiles -d $QMAIL qmailp

# groupadd qmail

# useradd -g qmail -d $QMAIL qmailq

# useradd -g qmail -d $QMAIL qmailr

# useradd -g qmail -d $QMAIL qmails

수행되는프로그램의출력을처리

• qmailanalog : q m a i l의 로그를다양한방법으로 분석Russ Allbery(

러스 앨버

)는 t a i 6 4 n f r a c를 만들었고 이 프로그램은d a e m o n t o o l s가 생성한 초 단위 의기능적기록을 q m a i l a n a l o g에서분석할수있는형식으로변환

• rblsmtpd : 이 프로그램은R B L을 이용해서 스팸메일을 방지하기 위한 별도 의프로그램이었으나이제는u c s p i - t c p의일부가됨

• m e s s 8 2 2 : R F C 8 2 2에기반한메시지재작성도구

• e z m l m : q m a i l을이용한메일링리스트관리도구

• c h e c k p a s s w o r d : 적절한 이용자인지 검증하는 프로그램으로P O P 3 서버에 서사용

다른 M T A들과의 비교

설치 준비

우선 각 프로그램의 소스를 다운로드 하자. 인터넷을 검색해보면 R P M으로 만든 패키지도 발견할 수 있지만 이왕이면 내부를 정확하게 알 수 있도록 소스로 설치하 자. 다운로드할프로그램의이름과다운로드주소는아래와같다.

• qmail : http://cr.yp.to/software/qmail-1.03.tar.gz

• ucspi-tcp : http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz

• checkpassword : http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz

• daemontools : http://cr.yp.to/daemontools/daemontools-0.76.tar.gz

• oversize DNS patch, SMTP-AUTH 패치: h t t p : / / k l d p . o r g / ~ e u n j a e / q m a i l / p a t c h

이 파일을 모두 다운로드하였으면 적절한 디렉토리에 압축을 풀어놓는다. 단 주 의할점은 절대로d a e m o n t o o l s의 압축을/ r o o t(

root 유저의 홈 디렉토리

)에 풀어놓아

M T A 성숙도 보안 특성 효율성 s e n d m a i l과의 호환성 모듈화 q m a i l M e d i u m h i g h h i g h h i g h a d d o n s y e s s e n d m a i l h i g h l o w h i g h l o w X n o p o s t f i x l o w h i g h m e d i u m h i g h y e s y e s e x i m m e d i u m l o w h i g h m e d i u m y e s n o [표 22-1] 다른 M T A들과의 비교

(13)

D N S를이용할경우에는소스디렉토리에서다음과같이입력한다.

# ./config

위명령이실패하거나직접입력하려는경우에는 다음과같이입력한다.

# ./config-fast 호스트이름

어느방법을이용하건c o n t r o l /에있는 파일에그이름이들어간다. 입력된호스트 이름은 m e 파일에, 도메인 이름은 defaultdomain 파일에 들어간다. 1단계 상위의 이름이p l u s d o m a i n에들어가게된다.

예를 들어 m a i l . m a t h . u n i v . a c . k r라는 호스트에서 이 명령을 수행하면 me, locals, r c p t h o s t s에는 m a i l . m a t h . u n i v . a c . k r이 들어가고d e f a u l t d o m a i n에는 m a t h . u n i v . a c . k r 이, p l u s d o m a i n에는u n i v . a c . k r이들어간다.

m a i l . m a t h . u n i v . a c . kr의 e p s i l o n이라는 사용자는 e p s i l o n @ m a i l . m a t h . u n i v . a c . k r이 라는 E - M a i l 주소를 사용하게 되지만l o c a l s와 r c p t h o s t s 파일에m a t h . u n i v . a c . k r이라 고 입력하고D N S에서도 m a t h . u n i v . a c . k r의 M X를 m a i l . m a t h . u n i v . a c . k r이라고 등록 하면e p s i l o n @ m a t h . u n i v . a c . k r로사용할수있게된다.

Alias 설정

s e n d m a i l의 경우에는 a l i a s를 설정하기 위해 / e t c / m a i l / a l i a s e s 파일을 사용했다.

하지만 q m a i l에서는 a l i a s라는 사용자를 이용한다. 가상 사용자 p o s t m a s t e r와 M A I L E R - D A E M O N에게 보내지는 메일은 각각 ~ a l i a s / . q m a i l - p o s t m a s t e r와

~alias/.qmail-mailer-daemon 파일에 등록된 사용자에게 보내진다. 굳이 / e t c / m a i l / a l i a s e s를사용하고자한다면f a s t f o r w a r d를설치하여구성하면된다.

a l i a s를 설정하는 방법은 간단하다. ~ a l i a s로 이동해서 . q m a i l -가상사용자이름의 파일을 만들고 그 내용으로 실제 받을 사용자 이름을 입력하면 된다. 예를 들어 p o s t m a s t e r와 M A I L E R - D A E M O N으로 오는 메일을 모두 e p s i l o n이 받으려고 한다면 아래의명령을수행한다.

# echo epsilon > .qmail-postmaster

# echo epsilon > .qmail-mailer-daemon

이파일에다른계정을추가해서동시에여러명에게보내줄수도있다.

추가적으로r o o t에 대한 a l i a s를 설정하여야 한다. q m a i l은 보안상의 이유로 U I D 이상과 같이사용자와그룹을생성하였다면/ e t c / p a s s w d 파일을열어서 정상적으

로 등록되었는지 확인한다. 새로 생성한 8명의 사용자가 등록되어 있다면 U I D와 G I D가연속이아니더라도상관없다.

컴파일과 설치

컴파일하기전에프로그램을일부패치하여야한다. 소스디렉토리에서다음의명령 을수행한다.

[root@webmail /usr/local/src]# tar xvzf qmail-ej-cocktail-10.tar.gz [root@webmail /usr/local/src]# cd qmail-1.03

SSL 접속을지원할 경우

[root@webmail /usr/local/src/qmail-1.03]# patch -p1 < ../qmail-ej-cocktail-10/qmail-ej- cocktail-10.patch

SSL 접속을지원하지 않을경우

[root@webmail /usr/local/src/qmail-1.03]# patch -p1 < ../qmail-ej-cocktail-10/qmail-ej- cocktail-10-no-starttls.patch

모든 준비를 끝나고 바로 m a k e를 실행하면 컴파일이 진행된다. 진행되는동안에 별도로 확인할사항은없으며 에러가 생기지 않는지만확인하면 된다. 설치는m a k e setup check를 입력하면 되는데 검사할 필요가 없다면 c h e c k 부분을 삭제해도 된 다. 이 과정이 끝나면 $ Q M A I L 디렉토리에는 아래와 같은 구조의 디렉토리가 생성 될것이다.

$QMAIL +--alias/

+--boot/

+--control/

+--doc/

+--man/

+--queue/

+--users/

최소한의 환경설정

설치까지 완료되면 기본 설정을 해주어야 메일을 주고받을 수 있다. q m a i l은

$ Q M A I L / c o n t r o l /에 있는 파일을 참고하여 메일을 받아들이거나 거부하기 때문에 이작업을건너뛸수는없다.

$ Q M A I L / c o n t r o l /에 있는 파일에 내용을 입력하는 방법은 두 가지 방법이 있다.

한가지는D N S를 이용하여 자동으로 등록하는 방법이고 다른 한 가지 방법은 직접 파일에입력하는방법이다.

(14)

보자.

open(SPOOL,”</var/spool/mail/$username”)|| next;

가 0인 사용자에 대한 메일 수신을 거부한다. 그래서~ a l i a s / . q m a i l - r o o t라는 파일을 만들고그내용으로대신수신할사용자이름을입력해야한다.

사용자 스풀 설정

참고: 이과정은여기서설명을하지만실제설치시에는 a d d o n 프로그램의설치 가 끝난 후에 작업을 해도 되는 과정이다. 기존에s e n d m a i l을 운영하던 시스템에서 는 a d d o n 프로그램의설치가끝난후에이과정을수행하도록하자.

q m a i l에는 q m a i l - l o c a l이라는 L D A(

Local Delivery Agent

)가 포함되어 있다. S M T P 를 경유하여q m a i l - l o c a l에 전달된 메일은 기본적으로$ H O M E / M a i l b o x에 저장되게 되어있다. 따라서기존에s e n d m a i l을 사용하고있던 시스템에서는/ v a r / s p o o l / m a i l / u s e r n a m e을 ~ u s e r n a m e / M a i l b o x로옮기는작업이필요하다.

여기서 s e n d m a i l의 저장방식을 잠시 알아보면m b o x 형식으로 여러 계정의 메일 스풀을 한 디렉토리에 저장한다. 따라서 계정의 개수가 늘어날수록 수행능력은 떨 어진다. 이 디렉토리는 모든 사용자가 읽고 쓸 수 있어야 하며 동시에 안전하게 보 호되어야 하므로 보안허점이 생기기 쉽다. s e n d m a i l의 보안취약점이계속보고되고 있는 것도 바로 이것 때문이다. 또다른 문제점으로는 새로운 메시지를추가하는과 정에서 시스템이 다운되는 경우이다. 이때는추가하려던 메시지가 사라지고 일부의 메시지만메일박스에저장된다.

q m a i l은 M a i l d i r 방식을 제공하여 이러한 문제점을 제거하고 보안상의 허점을 최 소화하였다. M a i l d i r 방식에서는 각각의 메시지가 자신만의 파일로 저장된다. 이 방 식은 메시지를 사라지지 않게 보장한다(

메일을 저장할 때 문제가 발생하더라고 저장

하던 메시지만 사라진다

). 또한 아무리 많은 사용자가 있더라도 안전하고 정확하게

메일을받을수있다.

M a i l d i r을 사용하려면 다음의 과정을 밟으면 된다. 좀더 편리하게 작업하기 위해 러셀 넬슨(

Russel Nelson

)이 만든 다음의 스크립트를 이용하자. 이 스크립트는 펄로 만든 프로그램으로/ v a r / s p o o l / m a i l에 있는 메일박스를 분석하여 해당사용자의 홈 디렉토리에M a i l d i r 디렉토리로메일을옮겨준다. 이 스크립트를실행하기 위해서는 perl 5.6.X이상이필요하다.

메일 스풀이 있는 디렉토리가/ v a r / s p o o l / m a i l이 아니라면소스3 2번째줄을 살펴

#! /usr/bin/perl

# put into the public domain by Russell Nelson <nelson@qmail.org>

# NO GUARANTEE AT ALL; support is available for a fee from the author.

#

# Creates maildirs for everyone in /etc/passwd who receives mail.

# Copies all their mail in /var/spool/mail into their maildir.

# Assumes that nothing is trying to modify the mailboxes in /var/spool/mail

# This assumption could be removed by locking the mailboxes and deleting

# the mail after moving it.

# version 0.00 - first release to the public.

# Modified by Valerio Granato(contact@livenet.it)to create home dirs

require ‘stat.pl’;

# and to skip some users. This new version can be found at

# http://web.livenet.it/software/convert-and-create.zip

# ftp://ftp.livenet.it/pub/software/convert-and-create.zip

@skip =(‘bin’, ‘daemon’, ‘lp’, ‘news’, ‘uucp’, ‘games’, ‘man’, ‘at’,

‘postgres’, ‘lnx’, ‘mdom’, ‘majordomo’, ‘yard’, ‘wwwrun’,

‘nobody’, ‘squid’, ‘fax’, ‘gnats’, ‘empress’, ‘adabas’,

‘amanda’, ‘ixess’, ‘ftp’, ‘postfix’);

while(($name, $passwd, $uid, $gid, $quota, $comment, $gcos, $dir, $shell)=

getpwent()){

$skipping = 0;

foreach $sk(@skip){

if($sk eq $name){ $skipping++; last; }

[예제 22-1] 메일 박스 변경 스크립트

(15)

이 부분에 있는/ v a r / s p o o l / m a i l / 부분을실제스풀의위치로수정하면된다. 솔라 리스를사용한다면꼭수정해주자.

지금까지의 과정은 기존에 있는 사용자 계정에 대한 처리였다. 이후 새로운 계정 이추가될때에도 M a i l d i r을사용할수있도록다음과같은명령을수행하자.

[root@webmail /etc/skel]# /var/qmail/bin/maildirmake ./Maildir [root@webmail /etc/skel]# echo ./Maildir/ > .qmail

이는 a d d u s e r를 이용해서 새로운 사용자를 생성할 경우이고 별도의 과정은 그에 맞는기초계정자료가있는디렉토리에생성하면된다.

실행 스크립트의 생성 및 초기화( 1단계)

q m a i l을 설치하고 사용자에 대한 처리가 끝나면 실행스크립트를 생성하여야 할 것이다. / v a r / q m a i l / b o o t에 기본적으로 사용 가능한 시작스크립트들이 있다. 각 스 크립트들은다음과같다.

• b i n m 1 : / b i n / m a i l을사용하여 / v a r / s p o o l / m a i l / u s e r n a m e에메일을저장

• b i n m 1 + d f : 위와같으나. f o r w a r d파일을처리

• b i n m 2 : / b i n / m a i l . l o c a l을사용하여/ v a r / s p o o l / m a i l / u s e r n a m e에메일을저장

• b i n m 2 + d f : 위와같으나. f o r w a r d파일을처리

• b i n m 3 : b i n m 1과같으나리눅스에서제대로동작하지않음

• b i n m 3 + d f : 위와같으나. f o r w a r d파일을처리

• h o m e : $ H O M E / M a i l b o x에메일을저장

• h o m e + d f : 위와같으나. f o r w a r d 파일을처리

}

if($skipping == 1){ next; } if(!-e $dir){

print “warning: ${name}’s home dir, $dir, doesn’t exist, I’ll create it.\n”; mkdir $dir, 0700;

chown($uid,$gid,$dir);

}

chmod 0700, $dir;

$st_uid =(Stat($dir))[4];

if($uid != $st_uid){

print “warning: $name is $uid, but $dir is owned by $st_uid, skipping.\n”; next;

}

print “$name\n”;

$spoolname = “$dir/Maildir”;

-d $spoolname || mkdir $spoolname,0700 || die “fatal: mailbox doesn’t exist and can’t be created.\n”;

chown($uid,$gid,$spoolname);

chdir($spoolname)|| die(“fatal: unable to chdir to $spoolname.\n”);

-d “tmp”|| mkdir(“tmp”,0700)|| die(“fatal: unable to make tmp/ subdir\n”);

-d “new”|| mkdir(“new”,0700)|| die(“fatal: unable to make new/ subdir\n”);

-d “cur”|| mkdir(“cur”,0700)|| die(“fatal: unable to make cur/ subdir\n”);

chown($uid,$gid,”tmp”,”new”,”cur”);

open(SPOOL, “</var/spool/mail/$name”)|| next;

$i = time;

while(<SPOOL>){

if(/^From /){

$fn = sprintf(“new/%d.$$.mbox”, $i);

open(OUT, “>$fn”)|| die(“fatal: unable to create new message”);;

chown($uid,$gid,$fn);

$i++;

next;

}

s/^>From /From /;

print OUT || die(“fatal: unable to write to new message”);

}

close(SPOOL);

close(OUT);

}

endpwent();

(16)

다. 이경우에는아래의 명령을먼저수행해두자.

# mkdir -p $HOME/Maildir/new; echo ./Maildir/ > .qmail

여기서m y i d에는자신의i d나 M a i l d i r 디렉토리가만들어진사용자의 계정을입력 하면 된다. 여기서m y i d에 r o o t를 입력하면$ Q M A I L / a l i a s / . q m a i l - r o o t에 적힌 계정 으로 메일이 발송이 된다는 것을 기억하자. 약5초 뒤에~ m y i d / M a i l d i r / n e w에 새로 운 파일이 생성되었다면 메일의 발송이 성공한 것이다. 다음엔 에러 테스트를 위한 메일을발송해보자.

# echo to: nonexistence | $QMAIL/bin/qmail-inject

약 1 0초 정도뒤에 자신의 메일박스를 확인하면 방금 보낸 메시지가 반송되어 있 을 것이다. 여기까지 성공하였다면 이제 외부로 메일을 보내 보자. 방법은t o: 뒤에 외부메일 주소를 입력하면 된다. 약 1분에서 3분 정도 뒤에 외부 주소의 메일함을 확인하면내용과제목이없는메일이도착해있을것이다.

소스 디렉토리에 T E S T . d e l i v e r와 T E S T . r e c e i v e 문서가 있다. 위의 내용은 T E S T . d e l i v e r y 파일의 일부이고 나머지 테스트들을 해보자. 여기까지 모든 과정이 성공하였다면 이제 기존에 설치된 s e n d m a i l을 제거한다. 소스로 설치하였다면 / e t c / r c . d 안에 있는 파일 중에서 s e n d m a i l을 실행하는 부분을 찾아서 그 부분을 삭 제한다. R P M으로설치하였다면이과정없이다음과정으로 넘어간다.

현재 처리중인 메시지가 있는지m a i l q 명령으로 확인하고 존재하면“s e n d m a i l q”

를 수행한다. 이는 처리중인 메일을 모두 전송하라는 의미이다. 잠시 기다린 다음 다시 확인해서 존재하면 위과정을반복한다. m a i l q 명령에서아무메일도 없다는 것 이확인되면 s e n d m a i l 데몬을k i l l로처리한다.

다음엔 s e n d m a i l의 파일을 제거한다. s e n d m a i l 패키지를 제거할 때 의존성 때문 에 제거가 되지 않는다면 의존성을 무시하고s e n d m a i l만 제거한다. 제거된 후에는 / b i n / m a i l과 같은 기존에 쓰고 있던 M U A를 위해 q m a i l을 s e n d m a i l로 인식할 수 있 도록w r a p p e r를설치하자.

# ln -s $QMAIL/bin/sendmail /usr/sbin/sendmail

# ln -s $QMAIL/bin/sendmail /usr/lib/sendmail

/ b i n / m a i l 또는 / b i n / m a i l . l o c a l 파일이 있을 것이다. 이파일의권한을 0 0 0으로 수 정한다.

• p r o c : p r o c m a i l을사용하여/ v a r / s p o o l / m a i l / u s e r n a m e에메일을저장

• p r o c + d f : 위와같으나. f o w a r d 파일을처리

이중에서“+ d f”가 있는파일은d o t - f o r w a r d 패키지를 설치하였을 경우에 사용하는 스크립트로. f o r w a r d 파일을 사용할 경우에 사용한다. 여기서는이 패키지를 사용하 지않을것이므로이 5개파일은필요하지않는다.

여기서는h o m e파일을 이용하고M a i l b o x가 아닌 M a i l d i r 형식을 이용하는 것으로 바꾸어생성한다.

[root@webmail /var/qmail]# cp boot/home rc

/ v a r / q m a i l / r c가 생성되면 파일을열고 . / M a i l b o x 부분을. / M a i l d i r / 으로 변경한다.

뒤의 /를 입력하지 않으면 M a i l b o x 형식과 동일한 형식으로 처리되니 주의하자. 최 종 r c 파일의모습은 아래와같다. q m a i l의설치위치를다른곳으로변경을한경우에 는 / v a r / q m a i l / b i n 부분을$ Q M A I L / b i n으로변경하여저장한다.

다시 한번 이야기하지만. f o r w a r d를 이용하기 위해 d o t - f o r w a r d 패키지를 설치한 경우에는h o m e + d f를복사하고. / M a i l b o x 부분을. / M a i l d i r /으로변경하면된다. 이제 제대로설치되었는지확인해보자.

csh -cf ‘$ Q M A I L / r c’를 실행하고 프로세스를 확인한다. qmail-lspawn, qmail- clean, qmail-rspawn, qmail-send, splogger 의 다섯 프로세스가 동작중이면 제대로 설치된것이다.

이제 간단한 메일 전송을 시험해 보자. 우선 자신의 홈 디렉토리에M a i l d i r 디렉토 리와. q m a i l이정상적으로설치되었는지를확인한다음아래와같이수행한다.

# echo to: myid | $QMAIL/bin/qmail-inject

만약 이전 절을 실행하지 않은 경우에는 디렉토리와 파일이 존재하지 않을 것이

#!/bin/sh

# Using splogger to send the log through syslog.

# Using qmail-local to deliver message to ~/Mailbox by default

exec env -- PATH=”/var/qmail/bin:$PATH”qmail-start ./Maildir/ splogger qmail

[예제 22-2] /var/qmail/rc

(17)

이제t c p s e r v e r에서인식할수있는형식인 C D B파일로변환하자.

# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

# chmod 644 /etc/tcp.smtp

d a e m o n t o o l s 의 설치

d a e m o n t o o l s 역시 q m a i l을 구동하기 위한 애드온 프로그램으로유닉스의 서비스 를 관리/모니터하기위한 프로그램들로구성되어 있다. 이중에서중요한역할을 하 는것이 m u l t i l o g와 s u p e r v i s e와 s o f t l i m i t이다.

m u l t i l o g는 에러메시지를하나이상의 로그파일에 기록할 수 있게 해준다. 이프로 그램이 하는 일을 설명하면 표준입력으로 들어온 로그를 자체 필터를 거친 이후에 특정한로그파일에기록하는역할을한다. 사용법은다음과같다.

# multilog script

여기서s c r i p t는이프로그램의인수이다. 실제프로그램에multilog t /var/log/qm a i l - s e n d로작성되는데인수 t는 시간 표시형식(

t i m e s t a m p

)을 t a i 6 4 n(

표준 u n i x t i m e s t a

m p는 2 0 3 8년에 오버플로를 일으키는 문제가 있어 이를 개선한 방식이다

)으로 로그 앞

에 기록하라는 의미이고 뒤에 있는 / v a r / l o g / q m a i l - s e n d는 로그를 기록하는 디렉토 리이고 이 디렉토리에c u r r e n t라는 이름으로 기록을 하고 일정 시간이 되면 자동으 로로그파일을바꾸어기록한다.

s u p e r v i s e라는 프로그램은 각 서비스를 모니터해서 서비스 프로그램이 종료되면 다시시작하게한다. 이 프로그램의실행방법은아래와같다.

# supervise service

이때 s e r v i c e는 프로그램의 이름이 아니고 서비스를 실행하는 스크립트가 들어있 는 디렉토리이름이다. s u p e r v i s e는 s e r v i c e 디렉토리로 이동해서r u n이라는 이름의 스크립트를 찾아서 실행한 다음 실행된 프로세스를 모니터 하게 된다. 그런 다음 s u p e r v i s e라는 디렉토리를s e r v i c e 디렉토리에 만들고 모니터링을 위한 부가정보를 담은4개의파일을만든다. 이파일을사용해서로그처리와모니터를한다.

다음으로는/ e t c / i n e t d . c o n f에서 smtp, pop-3, pop3 부분을 찾아서 줄의 앞부분에

#를 붙여 저장하고i n e t d를 다시 시작하게 한다. x i n e t d를 사용하는 경우에는p o p 3 파일을제거한뒤에 x i n e t d를다시시작한다.

ADDONS(ucspi-tcp, daemontools, c h e c k p a s s w o r d )의 설치

u c s p i - t c p 의 설치

u c s p i - t c p는 q m a i l을 구동하기 위해서 필수적인 애드온 패키지이다. 역시 댄 번스 타인이 만든 것으로i n e t d를 대치하는 프로그램이다. 이중t c p s e r v e r는 클라이언트의 네트워크 연결을 기다리고 있다가 각각의 연결에 대해서구성된 연결정책에따라지 정된프로그램으로넘겨주는역할을한다.

u c s p i - t c p의 압축이 / u s r / l o c a l / s r c에 풀려있으므로 그 디렉토리로 이동한다. 컴파 일과 설치는 단순히 소스 디렉토리에서make setup만 수행하는 것으로 끝난다. 기 본적인 설치위치는/ u s r / l o c a l / b i n이고 도움말인m a n 페이지는/ u s r / l o c a l / m a n에 설 치된다. 이 역시 소스 디렉토리에 있는 c o n f - h o m e파일을 수정하여 바꿀수 있다. 프 로그램이설치되었다면이제환경설정을 시작한다.

t c p s e r v e r는 각 포트에 따른 정책을 분리해서 정할 수 있다. S M T P에 대한 정책은 / e t c / t c p . s m t p 파일에 지정할 것이다. 기본적으로 설정할 내용은 로컬 계정과 로컬 네트워크에서 메일을 배달이 가능하게 하는 것이다. 이 내용은 I P : a l l o w / d e n y , o p t i o n의 형식을 가지고 있다. I P는 단일 주소를 입력하면 해당 주소만 뒷부분의 내 용이 설정된다. 클래스 전체를 지정하려면 . (

D O T

)으로 지정한다. 예를 들어 1 6 5 . 2 4 6 . 1 2 1 . 1 ~ 2 5 4의 C 클래스전체를지정하려고한다면다음과같이지정한다.

165.246.121.;allow,RELAYCLIENT=””

일부주소에서는 사용을 하지 못하게 하려면a l l o w 대신에d e n y를 입력한다. 예를 들어 1 6 5 . 2 4 6 . 1 2 1 . 1 9 9에서보내는메일을발송하지못하게하려면위에입력된 줄바 로위에다음과같이입력한다.

165.246.121.199:deny

메일서버에서직접보내는경우를위해서아래줄을파일맨처음에입력하자.

127.:allow.RELAYCLIENT=””

(18)

c h e c k p a s s w o r d의 설치

c h e c k p a s s w o r d는 P O P 3를 위한 애드온이다. 사용자에 대한 인증을 해주는 프로 그램으로 사용자계정이 올바른 계정인지를확인해준다. 이프로그램의 컴파일/설치 는 make; make setup으로설치한다. 이렇게하면/ b i n에설치되므로변경하고싶다 면소스디렉토리에서c o n f - h o m e파일의첫째줄을변경하면된다.

실행 스크립트의 생성 및 초기화( 2단계)

이제 로그를 기록할 디렉토리를 만들고부팅스크립트를 작성하자. 시스템로그는 / v a r / l o g에 저장되므로 먼저 q m a i l을 위한 전용 로그 디렉토리를 그 안에 만들도록 하자.

# mkdir /var/log/qmail

# cd /var/log/qmail

# mkdir send smtpd pop3d

# chown qmaill /var/log/qmail /var/log/qmail/*

여기서주의할점은c h o w n의첫번째인수는끝에 l(

소문자L

)이두개다.

이제 보여줄것은예제실행스크립트이다. q m a i l 관련사이트에서이보다더최적 화된 스크립트가 있다면 그 스크립트를 사용하여도 좋다. 또한K L D P에서 구할 수 있는 q m a i l 관련 문서를 찾아보면 비슷한 스크립트가 있을 것이다. 그 스크립트를 사용하여도좋다.

하지만 여러 서비스를 위와 같은 방법으로 하기에는 불편한 점이 많기 때문에 별 도의 프로그램으로 서비스검색과 모니터링을 처리하는 프로그램이 포함되어 있다.

그 프로그램은s v s c a n이라는 프로그램으로SerVice SCAN의 약자이다. 이 프로그램 은 인수로 받은 디렉토리의 하위 디렉토리들을 검색해서 그 디렉토리를 인수로 s u p e r v i s e를실행한다.

예를 들어 / s e r v i c e / q m a i l - s m t p / r u n 파일이 하나의 서비스라고 하면 s u p e r v i s e 명 령은다음과같이실행한다.

# supervise /service/qmail-smtp

하지만s v s c a n 명령은다음과같이실행한다.

# svscan /service

s o f t l i m i t는 인수로 주어지는 프로그램이 사용할 리소스의 제한을 걸게 해주는 프 로그램이다. 이프로그램의사용법은아래와같다.

# softlimit opts child_program

o p t s에사용할수있는옵션을정리해보았다.

위에서 보는 것과 같이 어느 정도 운영체제에 대한 지식이 필요하지만 위와 같은 내용으로도이후에만들시작스크립트를이해하는데는충분하다.

옵 션 설 명

-m n 아래 4개의 값(-d -s -l -a)을 모두 n byte로 지정한다.

-d n 각 프로세스에 대한 데이터 세그먼트의 크기 -s n 스택 세그먼트의 크기

-l n 잠겨진 물리 메모리페이지의 크기 -a n 세그먼트의 합계

-o n 동시에 최대로 열 수 있는 파일이 n개로 제한된다.

-p n 각 u i d의 프로세스 개수가 n 개로 제한된다.

[표 22-2] opts에사용할 수 있는 옵션

#!/bin/sh

PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin export PATH

case “$1”in start)

echo -n “starting qmail: svscan”

cd /service

env - path=”$PATH”svscan &

[예제 22-3] qmail 실행스크립트

(19)

echo $! > /var/run/svscan.pid echo “.”

;;

stop)

echo -n “Stopping qmail : svscan”

kill `cat /var/run/svscan.pid`

echo -n “qmail”

svc -dx /service/*

echo -n “logging”

svc -dx /service/*/log echo “.”

;;

stat) cd /service svstat * */log

;;

doqueue|alrm)

echo “Sending ALRM signal to qmail-send.”

svc -a /service/qmail-send

;;

queue) qmail-qstat qmail-qread

;;

reload|hup)

echo “Sending HUP signal to qmail-send.”

svc -h /service/qmail-send

;;

pause)

echo “Pausing qmail-send.”

svc -p /service/qmail-send echo “Pausing qmail-smtpd.”

svc -p /service/qmail-smtpd

;;

}}

}}

{{{{cont)

echo “Continuing qmail-send”

svc -c /service/qmail-send echo “Continuing qmail-smtpd.”

svc -c /service/qmail-smtpd

;;

restart)

echo “Restarting qmail:”

echo “* Stopping qmail-smtpd.”

svc -d /service/qmail-smtpd

echo “* Sending qmail-send SIGTERM and restarting.”

svc -t /service/qmail-send echo “* Restarting qmail-smtpd.”

svc -u /service/qmail-smtpd

;;

cdb)

tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp chmod 644 /etc/tcp.smtp*

echo “Reloaded /etc/tcp.smtp.”

;;

help)

cat << HELP

stop -- stops mail service(smtp connections refused, nothing goes out) start -- starts mail service(smtp connection accepted, mail can go out) pause -- temporarily stops mail service(connections accepted, nothing leaves) cont -- continues paused mail service

stat -- displays status of mail service cdb -- rebuild the tcpserver cdb file for smtp

restart -- stops and restarts smtp, sends qmail-send an TERM & restarts it doqueue,alrm -- sends qmail-send ALRM, scheduling queued messages for delivery

(20)

q m a i l - s m t p d / r u n

#!/bin/sh

QMAILDUID = `id -u qmaild`

QMAILDGID = `id -g qmaild`

exec /usr/local/bin/softlimit -m 2000000 /usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb \ -u $QMAILUID -g $QMAILGID 0 smpt /var/qmail/bin/qmail-smtpd 2>&1

q m a i l - s m t p d / l o g / r u n

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd

q m a i l - p o p 3 d / r u n

#!/bin/sh

exec /usr/local/bin/tcpserver -v -R 0 pop3 /var/qmail/bin/qmail-popup FQDN \ /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1

위문장에서 F Q D N에는실제 사용하는주소를그대로입력한다.

q m a i l - p o p 3 d / l o g / r u n

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s25000000 /var/log/qmail/pop3d

스크립트가 완성되었다. 이제이 스크립트를 실행할 수 있도록 적절한 권한을 부 여하자.

# chmod 755 /var/qmail/supervise/*/run /var/qmail/supervise/*/log/run

그리고d a e m o n t o o l s에서인식할수있도록 / s e r v i c e에링크를만들어놓는다.

이제 로그가 저장될 디렉토리를 추가로 만들고 그 소유를 q m a i l l로 바꾸어 준다.

끝에l(

소문자L

)이두개다.

# cd /var/qmail/supervise

# ln -s * /service

이명령을수행하면 / s e r v i c e에 세개의링크가만들어진다. 잠시후에 프로세스를 확인하면1 3개의프로세스가 동작하고있을것이다. 이는d a e m o n t o o l s를설치할 때 i n i t t a b에 추가된 s v s c a n b o o t에 의해 생긴 프로세스이다. / e t c / i n i t t a b 파일을 열어서 이내용을/ e t c / r c . d / i n i t . d에 q m a i l이라는이름으로저장하고아래와같이실행한다.

# chmod 755 qmail

# ln -s qmail ../rc3.d/S88qmail

# ln -s qmail ../rc5.d/S88qmail

# ln -s qmail ../rc0.d/K10qmail

# ln -s qmail ../rc6.d/K10qmail

이제는 q m a i l의 서비스들을 모니터링하고 관리해주는 실행 스크립트를 작성해야 한다. 먼저서비스를관리할디렉토리인s u p e r v i s e 디렉토리를생성한다.

#mkdir -p /var/qmail/supervise/qmail-send/log

#mkdir -p /var/qmail/supervise/qmail-smtpd/log

#mkdir -p /var/qmail/supervise/qmail-pop3d/log chmod -t /var/qmail/supervise/*

이제부터 모두 6개의 스크립트를작성할 것이다. 아래에제시하는 스크립트를 그 대로저장한다.

q m a i l - s e n d / r u n

#!/bin/sh exec /var/qmail/rc

q m a i l - s e n d / l o g / r u n

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/send reload,hup -- sends qmail-send HUP, rereading locals and virtualdomains queue -- shows status of mail queue

HELP

;;

*)

echo “Usage: $0(start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue|help)”

exit 1

;;

esac exit 0

위코드의아래두줄은원래한 줄인데 길이가 너무 길어서 두 줄에 나누어 적은 것이다. 그대 로적어도되나한줄로적을경 우 \ ( B A C K S L A S H )를 제거하고 한줄에연결해적으면된다.

여기서 잠깐

참조

관련 문서

22 주어 cotton plants 뒤에 turned 가 있는 것으로 보아 빈칸 이 있는 문장은‘목화가 어떻게 직물로 바뀔까?’ 라는 의미의 수동태 의문문임을 알 수 있다.. 빈칸에는

플립플롭은 입력이 없어진 뒤에도 계속적으로 변화된 출력값을 유지하는데 이것을 플립플롭의 메모리특성

필수설비를 제공할 수 있는 기존 사업자 (기업 I) 가 존재하는 시장을 고려해 보자. 필수설비에 대한 개방규제가 전혀 없다면, 기업 I는 필수설비를 구축함으로써 독점적

[r]

Francis Medical.

김종식 완도군수는 분명한 점은 바닥에 있는 넙치판로에 완도생산자들이 단점을 누구 보다 잘알고 판단하고 있을것 이라면서 신뢰회복 기간을 단 축하고

… 사용자 프로세스가 인증서 서명 신청서를 제출하면 이를 검증하 고 공개키 인증서를 생성하여 보내 준다. … 사용자 프로세스가 어떤 사용자의 공개키

개구리나 사람의 전체적인 발생 과정은 대체로 비슷 한 경로를 겪게 된다... 흔히 난할과 세포분열을 서로 혼동해서 사용하지만, 엄밀히 말해