| POP3 daemon 설치와 활용 가이드 - 일곱째 판 (2001년 7월) | 작성일 : 2003/08/05 10:59 |
| 조회수 : 6655 |
POP3 전자편지 daemon의 기능일반 PC에 SMTP (Simple Mail Transfer Protocol)를 지원하는 서버를 설치하기에는 부담스러운 경우가 있다. 따라서, 대부분의 경우 기존 UNIX 기계에 sendmail MTA(Message Transfer Agent)를 설치하여 mail 서버로 삼고, PC쪽에서는 NS, Outlook, Eudora등의 MUA(Message User Agent)를 설치하여 서버쪽에 저장된 편지를 끌어당겨서 읽도록 한다. 이럴 경우, 클라이언트로부터 계정별 전자편지 요청을 받아들이기 위해 UNIX 서버쪽의 소프트웨어가 필요한데, 이 소프트웨어가 바로 POP3(Post Office Protocol version 3) daemon이다.이 문서는 POP3 최종 사용자를 위한 내용만을 담고 있으므로, POP3 환경에서 개발에 필요한 사항에 대해서는 해당 RFC(RFC1939)를 참고하기 바란다.
POP3의 설치방법POP3를 설치하기 위해서는 다음의 절차를 따른다.패키지 구하기Eudora로 유명한 Qualcomm(CDMA 로열티로 일약 부자가 된 회사이다. 최근 Eudora 개발 중단등의 좋지않은 루머도 들린다.)에서 qpopper4.0.3 버전을 가져온다. 화면에 이상한 글자가 쏟아질 경우 마우스의 오른쪽 버튼을 눌러 "다른 이름으로 저장(Sava Link As...)"을 수행하면 된다.
주의사항qpopper의 설치 작업으로 넘어가기 이전에, 다음 주의사항을 반드시 숙지하기 바란다.
패키지 풀기다음과 같이 uncompress와 tar 명령을 내려 패키지를 푼다. 시스템에 C 컴파일러가 설치되어 있는지 확인하고 만일 존재하지 않을 경우 gcc를 설치한다.% gzip -d qpopper4.0.3.tar.gz % tar xf qpopper4.0.3.tar % cd qpopper4.0.3
configure이상의 방법으로 압축된 tar 파일을 풀었다면 qpopper4.0.3 디렉토리로 들어가서 configure를 수행하자. 예전 버전과는 달리 2.5.x 버전부터는 configure script를 사용하여 자동으로 Makefile을 생성할 수 있도록 설계되어 있다. 3.1.2버전에서 공식적으로 지원하는 운영체제는 Solaris, HP-UX, IRIX, SCO, SunOS4.x, Linux, BSDI, FreeBSD, Digital UNIX(OSF/1), A/UX, NCR, NeXT등이다.% cd qpopper4.0.3 % ./configure 시스템의 여러 가지 환경을 체크하느라 화면에 글자가 올라가는 광경이 보일 것이다. configure가 성공적으로 끝나면 Makefile이 생성되어 있을 것이다. 경우에 따라서는 configure를 수행시킬때 선택 사양을 추가해야할 필요성이 생긴다. 현재 경로인 .이 PATH 환경변수에 없어 configure가 없다고 나올 경우를 대비해 ./을 configure앞에 붙인 것을 눈여겨 보자. 만일 shadow password를 지원해야 하는 상황에서 configure 명령을 내릴 경우 다음과 같이 선택 사양을 주어 자동으로 마크로를 Makefile에 추가하도록 한다. 물론 이후에 설명할 마크로 설정 방법을 사용할 수도 있으나, 아무래도 configure시에 미리 설정해두는 편이 편리하다.
% configure --enable-specialauth qpopper에서 shadow password를 지원하는 시스템은 다음과 같다:
위 네가지 시스템에서는 configure시 --enable-specialauth나 마크로 AUTH_SPECIAL을 명시적으로 정해주어야 shadow password를 인식한다. 하지만 다음에 나열하는 세가지 시스템은 기본적으로 shadow password를 사용하도록 설정되어 있으므로 configure 선택 사양을 마크로 정의등의 특별한 조치를 취할 필요가 없다.
만일 POP3 계정 사용자 전체에게 보내는 블루틴(bulletin) 기능을 지원하고 싶다면 다음과 같이 선택 사양을 주어 자동으로 마크로를 Makefile에 추가하도록 한다.
% configure --enable-bulletins=/var/spool/bulls /var/spool/bulls는 블루틴 메세지들이 축적될 기본 디렉토리 이름이다. 사용자를 위한 popbull 파일을 다른 경로에 저장하고 싶을 경우 다음 선택 사양을 사용한다. 만일 사용자의 홈 디렉토리에 .popbull 파일 대신에 데이타베이스를 사용하고 싶다면 --enable-bulletins 선택 사양 대신 다음과 같은 선택 사양을 사용한다.
% configure --enable-bulldb=/var/spool/bulls또한 새로운 사용자에게 최대로 한번에 받아볼 bulletin 갯수를 지정하려면 다음과 같은 선택 사양을 사용한다.
% configure --with-new-bulls=10 이상의 선택 사양을 지정하면 새로운 사용자는 최대 10개까지의 bulletin만을 받게 될 것이다. 특정 그룹에 대해서만 bulletin을 받도록 지정하려면 다음과 같은 선택 사양을 사용한다.
% configure --enable-group-bulls 블루틴 기능에 대해서는 활용 방안에서 별도 설명할 예정이다. 만일 POP3 서버를 서버 모드(Server Mode)로 동작시키고 싶다면 다음과 같이 선택 사양을 주어 자동으로 마크로를 Makefile에 추가하도록 한다. 서버 모드에 대해서는 활용 방안에서 별도 설명할 예정이다.
% configure --enable-servermode 만일 POP3 서버에 PAM 인증 기능을 추가하려면 다음과 같이 선택 사양을 주어 자동으로 마크로를 Makefile에 추가하도록 한다.
% configure --with-pam=servicename 기본 servicename은 pop3이다. 전자편지를 서버에 남기도록 설정하는 사용자가 있다. 물론 이러한 기능이 때로는 도움이 되지만 때로는 서버에 부하를 줄 수도 있으므로 3.0에 들어와서는 서버쪽에서 자동으로 다운로드 받은 편지를 삭제할 수 있는 방법이 생겼다.
% configure --enable-auto-delete qpopper의 버전 번호를 표시하는 기능이 때로는 보안에 구멍을 줄 수도 있다. 부가적인 정보를 감추기 위해서 다음의 선택 사양을 적용해보자.
% configure --enable-shy 각 사용자의 홈 디렉토리에 쿼터를 주고 있을 경우 전자편지 임시 파일을 사용자의 홈 디렉토리에 생성시킨다면, 전자편지의 크기를 제한할 수 있을 것이다.
% configure --enable-home-dir-mail=file이상의 선택 사양을 사용자의 홈 디렉토리에 file이라는 이름으로 spool 파일을 생성시킨다. 해쉬방식으로 spool 디렉토리를 지정할 수 있다.
% configure --enable-hash-spool=1 % configure --enable-hash-spool=2 1로 지정하면 계정의 첫째 글자를 사용하여 spool 하부 디렉토리를 생성시키며, 2로 지정하면 계정의 첫째와 두째 글자를 사용하여 spool 하부 디렉토리를 생성시킨다. 예를 들어, jrogue라는 사용자의 스풀 파일이 /var/mail에 저장된다고 할 경우 다음과 같은 디렉토리-파일 구조를 갖는다. 사용자가 많아질 경우 유리할 것이다.
디버깅을 위한 코드를 생성할 필요가 있다. 이럴 경우 다음과 같은 선택 사양을 사용한다.
% configure --enable-debugging 전자편지 drop 파일을 생성하기 위한 디렉토리를 지정할 필요가 있다. 이럴 경우 다음과 같은 선택 사양을 사용한다. 여기서 path 기본값은 spool 경로이다.
% configure --enable-temp-drop-dir=path 종종 temp drop 파일을 지우지 못하도록 할 필요가 있다. 이럴 경우 다음과 같은 선택 사양을 사용한다.
% configure --enable-keep-temp-drop HASH_SPOOL이나 HOMEDIRMAIL을 정의할 경우 예전 위치에서 .user.pop을 검사할 필요가 없다. 이럴 경우 다음과 같은 선택 사양을 사용한다.
% configure --disable-old-spool-loc 해쉬 spool 디렉토리를 검사하거나 만들지 않도록 하려면 다음과 같은 선택 사양을 사용한다.
% configure --disable-check-hash-dir 지정한 그룹에 있는 사용자에 대해서만 서버 모드로 동작하게 하려면 다음과 같은 선택 사양을 사용한다.
% configure --enable-server-mode-group-include=group 지정한 그룹에 있는 사용자에 대해서만 서버 모드로 동작하지 않게 하려면 다음과 같은 선택 사양을 사용한다.
% configure --enable-server-mode-group-exclude=group secure NIS+를 쓸 경우 다음과 같은 선택 사양을 사용한다.
% configure --enable-secure-nis-plus 효율을 높이거나 기타 사정이 있어 inetd를 쓰는 대신 독자적인 데몬으로 동작하려면 다음과 같은 선택 사양을 사용한다.
% configure --enable-standalone 이상의 --enable-standalone 선택 사양을 사용할 경우 inetd에서 시동하는 대신에 다음과 같이 독자적인 데몬으로 동작할 수 있다. 199.46.50.7은 허용하는 IP 주소이며 110은 포트 번호이다.
# popper 199.46.50.7:110 -S 모든 호스트를 허용하려면 다음과 같이 IP를 지정하지 않으면 된다.
# popper 110 -S -T600 만일 독자적인 데몬으로 수행할 경우 inetd에서 POP3 관련 설정을 모두 빼야 한다. 그리고 TCPWrapper와 같은 주소 필터링 프로그램을 사용할 경우에는 inetd를 반드시 써야 하므로, 이 기능을 활용할 수 없다. 파일에 열거한 사용자만 접근을 허용할 경우 다음과 같은 선택 사양을 사용한다. path에는 한줄에 하나씩 게정을 명기한다.
% configure --enable-auth-file=path 파일에 열거한 사용자만 접근을 허용하지 않을 경우 다음과 같은 선택 사양을 사용한다. path에는 한줄에 하나씩 게정을 명기한다.
% configure --enable-nonauth-file=path 컴파일러 최적화를 수행하지 않으려면 다음과 같은 선택 사양을 사용한다.
% configure --disable-optimizations 추가적인 컴파일러 오류를 보기 위해 다음과 같은 선택 사양을 사용한다.
% configure --with-warnings 유효기간이 지난 암호를 검사하지 않으려면 다음과 같은 선택 사양을 사용한다.
% configure --disable-check-pw-max Status나 X-UIDL 헤더를 변경하지 않으려면 다음과 같은 선택 사양을 사용한다. 이 선택 사양을 지정해두면, 매 세션마다 각 메세지를 다시 계산한다.
% configure --disable-status 예전 스타일(3.x 이전)로 UID를 생성하려면 다음 선택 사양을 사용한다.
% configure --enable-old-uidl 매 세션이 끝나면 인증, 초기화, 청소에 걸린 시간을 기록하려면 다음 선택 사양을 사용한다.
% configure --enable-timing 사용자 인증이 성공적으로 끝나면 결과를 기록한다. 연속되는 SMTP 세션에서 동일한 IP 주소에 있는 사용자에게 짧은 시간 동안 이 정보를 사용하여 인증이 가능하도록 만들어준다.
% configure --enable-log-login DRAC을 지원하려면 다음 선택 사양을 사용한다. DRAC은 SMTP_AUTH를 쓸 수 없는 환경에서 SMTP 세션 인증을 POP3 데몬으로 수행하는 규약이다. 여기서 lib-path는 DRAC 라이브러리를 설치한 경로이다.
% configure --enable-drac=lib-path SSL/TLS 지원을 위해 OpenSSL을 사용할 경우 다음 선택 사양을 사용한다.
% configure --with-openssl=path SSL/TLS 지원을 위해 SSL Plus를 사용할 경우 다음 선택 사양을 사용한다.
% configure --with-sslplus=path SSL/TLS 지원을 위해 Security Builder를 사용할 경우 다음 선택 사양을 사용한다.
% configure --with-sslplus-crypto=path 주의) SSL/TLS 지원은 결코 만만한 작업이 아니다. SSL/TLS 자체에 필요한 옵션을 설정해야할 뿐더러 qpopper 4.0.x에서 새로 도입한 환경 설정 파일을 지정해야 제대로 동작한다. SSL/TLS 자체에 필요한 옵션 정의(공개키와 비밀키 정의부터 파일 생성까지)는 OpenSSL 메뉴얼을 참조하고, 환경 설정 파일은 qpopper 패키지 samples 디렉토리 아래에 qpopper.config를 참조하기 바란다.
컴파일시 정의해야 하는 마크로 설정일반적인 환경에서 qpopper를 사용할 경우라면 configure에 의해 생성된 Makefile을 가지고 컴파일하면 별 다른 문제가 없다. 하지만 세상 일이 그렇게 쉽지만은 않다. 몇몇 특별한 환경에서는 Makefile에 마크로 정의를 해주어야 한다.마크로 정의를 위해서는 Makefile을 열어 DEFS = -DHAVE_CONFIG_H라인 뒤에 마크로를 추가해야 한다. 만일 MY_MACRO라는 마크로를 정의할 경우 위 라인을 다음과 같이 고쳐야 한다. DEFS = -DHAVE_CONFIG_H -DMY_MACROMakefile에 추가할 몇가지 마크로를 표([Makefile에 관련된 마크로 이름과 설명])형태로 정리하였다. 자신의 환경에 맞추어 올바르게 설정해서 사용하기 바란다.
컴파일만일 마크로 설정을 위해 Makefile을 수정했을 경우% make clean명령으로 혹시 남아있을지도 모르는 목적 파일을 모두 삭제해야 함에 유의하자. 이제 모든 준비가 완료되었으면 다음 명령을 내려 컴파일을 시도하자. % make컴파일이 끝나면 popper라는 실행파일이 만들어져 있을 것이다. 설치컴파일이 완료되었다면 popper를 설치한다. 시스템 관리자로 변신해서 파일을 복사하고 조절 파일을 수정하는 작업을 살펴보자.먼저 생성된 popper를 복사한다. 만일 /usr/local/lib 디렉토리가 없다면 mkdir 명령으로 생성시킨다. 디렉토리가 존재할 경우 mkdir 명령을 내릴 필요없이 복사 작업만 하면 된다. 기존에 popper가 설치되어 있다면, 비상시를 대비하여 이를 popper.old라는 이름으로 변경하여 보존한다. % su - Password:****** # cd /usr/local # mkdir lib # cp popper /usr/local/lib/이제 /etc 디렉토리 아래의 services와 inetd.conf 파일을 다음과 같이 수정한다.
inetd 대신 xinetd를 사용할 경우에는 다음 절차를 따르기 바란다.
POP3 서버의 테스트 방법POP3 서버가 설치된 호스트 이름이 localhost이며 계정 이름이 myname이라고 가정하면, 다음의 방법으로 서비스 유무를 손쉽게 확인할 수 있다. telnet을 수행한 다음 user 뒤에 계정 이름을, pass 뒤에 암호를 넣으면 된다. POP3의 규약에 의거하여 user 및 pass라는 명령어도 직접 타이핑해야 함에 유의하기 바란다.% telnet localhost pop3 Trying 127.0.0.1 Connected to localhost. Escape character is '^]'. +OK QPOP (version 3.1.2) at localhost starting. user myname +OK Password required for myname. pass ****** +OK myname has 0 visible messages (0 octets). quit +OK Pop server at localhost signing off. Connection closed by foreign host.위의 시나리오와 같이 banner가 나오고 사용자에 대한 편지 확인이 되면 qpopper가 정상적으로 설치된 것이다.
POP3 서버의 활용 방안POP3 서버를 컴파일하고 설치하고 테스트까지 완료되었다면, 이제 서버의 활용 방안에 대해 생각해보아야 한다. 구슬이 서말이라도 꿰어야 보배라고 하지 않았던가?먼저 서버를 동작시킬 경우에 있어 필요한 명령행 선택 사양부터 숙지하고 있어야 한다. 아래 표([qpopper의 명령행 선택 사양])에 필요한 요소를 정리해 두었다. 명령행 선택 사양은 컴파일시 정의된 기본값보다 우선 순위가 주어지므로 환경 설정시 필요할 때마다 참고하기 바란다.
블루틴(bulletin) 기능 사용하기센드메일과 POP 서버를 관리하다보면 동시에 여러 사용자에게 편지를 전달(동보 전송)할 필요성이 생긴다. 물론 메일링리스트를 만들어 이를 활용하더라도 큰 문제는 없으나 POP 서버를 사용할 경우 한가지 묘책이 있다. 바로 블루틴 기능이다.블루틴 기능은 관리자에 의해 만들어진 메시지가 센드메일등의 MTA(Message Transfer Agent)를 거치지 않고 모든 POP 사용자에게 자동으로 전달되는 메커니즘을 제공한다. POP3 서버는 개별 사용자 디렉토리의 ~/에 .popbull이라는 파일을 만들어두고 이를 참조하여 각 사용자가 어떤 블루틴까지 읽었는지 판단하게 된다. .popbull에는 정수값이 들어있으며 이보다 큰 값을 가진 블루틴이 BULLDIR에 존재할 경우 POP3 서버가 이를 자동으로 사용자의 지역 기계의 MUA(Message User Agent)에 보내준다. 만일 마크로 BULLDB를 정의해두면(혹은 --enable-bulldb 선택 사양으로 configure를 수행하면), 블루틴에 필요한 정보가 사용자 디렉토리가 아니라 BULLDIR의 bulldb.pag 및 bulldb.dir 파일에 중앙집권식으로 저장된다. configure시나 마크로 설정을 통해 블루틴 기능을 지원하도록 컴파일했다면 다음 사항을 살펴본다.
하지만 편리한 블루틴 기능에도 다음 두가지 사소한 결점이 존재한다. 참고하기 바란다.
서버 모드로 동작시키기POP3도 하나의 서버이다. 그러면 서버를 서버모드로 동작시킨다는 의미는 과연 무엇인가?POP3 서버를 사용하는 사용자가 늘어날 경우 능률이 급격하게 떨어지는 현상을 발견할 수 있다. 이럴 경우 POP3 서버에 접속하는 클라이언트만 메일박스를 읽어들인다고 가정할 수 있다면 서버 모드로 동작시키는 편이 월등히 유리하다. 서버 모드가 아닌 일반 모드에서 POP3를 동작시킬 경우 사용자 인증후에 사용자의 메일박스를 임시 파일(.username.pop)에 복사하며, 이후 사용자가 세션을 마칠때 삭제되지 않은 메시지들이 원래의 메일박스로 옮겨지게 된다. 하지만 모든 사용자가 세션 중에 모든 편지를 다 읽어서 삭제시킨다든지, 아니면 모든 사용자가 세션 중에 모든 편지를 삭제하지 않고 그대로 놓아둔다면, 이러한 불필요한 복사작업은 의미가 없어질 것이다. 서버 모드는 바로 이러한 오버헤드를 줄이기 위해 메일박스 자체에 락(lock)을 걸고 내용을 검사하고 다시 락을 푸는 방법을 사용한다. qpopper는 편지가 새롭게 도착하여 메일박스의 뒷부분에 붙기만 한다고 가정한다(즉, 중간에 다른 프로그램이 편지를 지우거나 하는 골치아픈 경우는 생각하지 않는다). qpopper는 남아있는 편지를 체크하기 위해 편지의 Status header와 UID 갱신 유무를 검사하여, 만일 변동이 있을 경우 메일박스를 고치며, 그렇지 않다면 메일박스를 그대로 둔다. 서버 모드의 장점은 불필요한 파일 복사를 최소화할 수 있다는 점이다. 요즘 같이 첨부파일이 많이 붙은 편지가 난무할 때 이러한 서버 모드의 장점은 더욱 두드러진다. 편지가 서버에 남아있거나 읽거나(고)/삭제되지 않았을 경우에는 임시 영역으로의 복사가 일어나지 않으므로 불필요한 디스크 접근이 줄어드는 것이다. 하지만 서버 모드를 사용할 경우 해당 호스트의 모든 사용자가 POP3 프로토콜만을 이용해서 메일박스에 접근해야 한다는 기본 가정이 존재함에 각별히 유의해야 한다. 블루틴과 마찬가지로 UNIX 터미날에서 mail등의 명령으로 메일박스에 바로 접근할 경우 문제가 생길 수도 있다. 서버 모드와 더불어 POP3 서버의 성능을 높이기 위해 또 한가지 방법이 존재한다. 바로 POP_DROP 마크로를 config.h에 정의하는 것인데, 메일박스를 임시 파일로 복사할 때 별도의 디렉토리를 지정할 수 있도록 하여 시스템의 능률을 향상시켜준다. 만일 1,000명 이상의 사용자를 지원해야 한다면 config.h 파일에 다음 마크로를 적용해서 qpopper를 새로 컴파일해보기 바란다. #define POP_DROP "/usr/spool/poptemp/.%s.pop" 보안 문제로 인해 /tmp 디렉토리를 POP_DROP의 기본 디렉토리로 정의하는 일은 피하기 바란다. 또한 POP_DROP 기본 디렉토리 (/usr/spool/poptemp)의 접근허가와 소유주를 메일박스가 저장되는 디렉토리와 동일하게 설정해두어야 하는 사실을 잊지말기 바란다.
특정 사용자만 POP3 서비스를 허용하기전자편지 서버를 관리하다보면 별의별 일이 다 생기게 된다. 경우에 따라 특정 사용자에게만 POP3 서비스를 열거나 닫아두는 기능이 필요할 수도 있다. 이럴 경우 앞서 마크로 설정에서 소개한 AUTHFILE, NONAUTHFILE 마크로가 특히 유용하다.AUTHFILE 및 NONAUTHFILE 마크로에 정의된 파일을 각각 열어 사용자의 계정 이름을 한줄에 하나씩 순서없이 열거하면 된다. 구분자(separator)가 없음에 유의하라. 만일 AUTHFILE 마크로를 설정해두었다면 모든 서비스 대상 사용자를 AUTHFILE에 넣어야 한다. 사용자가 많을 경우 다음과 같이 awk등으로 passwd 파일의 첫째 컬럼만 끊어서 초안을 작성하면 된다.
% awk -F: '{print $1}' /etc/passwd
NONAUTHFILE과 AUTHFILE에 사용자 이름이 동시에 들어가 있으면 어떻게 될까? NONAUTHFILE이 우선함을 명심하자. 즉 동시에 접근허가/거부를 설정하면 항상 거부가 접근에 우선한다. 경험에 의하면 AUTHFILE 마크로는 설정하지 않는 편이 좋겠다. 아주 부지런한 관리자가 아니고서는.
Trouble Shootingqpopper의 테스트를 위해% telnet localhost pop3명령을 내렸을 경우 다음과 같은 메시지가 나올 수 있다.
이럴 경우 번호에 맞추어 다음의 경우를 차근차근 따져보기 바란다.
접속이 잘되었더라도 사용자 계정과 암호를 주면 이를 거부할 때가 있다. 이럴 경우에는 다음 항목을 살펴본다.
하지만 사용자 인증까지 잘 넘어갔음에도 불구하고 임시 파일을 생성시킬 수 없다는 오류가 발생할 수 있다.
이럴 경우 다음 항목을 살펴본다.
이상의 경우를 모두 따져보았음에도 불구하고 원인을 제대로 파악할 수 없다면 Makefile에 DEBUG 마크로를 추가해서 새로 컴파일하여 inetd.conf의 popper 명령에 -d 선택사양을 주어 popper를 시동하도록 한다. syslog 파일에 popper의 활동상황이 기록되어 있으므로 이를 분석하여 문제를 해결한다. 또한 선택 사양을 잘못 설정하여 문제가 발생할 수도 있으므로, 이럴 경우 선택 사양을 지정하지 않고 순수하게 configure 명령만으로 popper를 만들어 테스트에 임하기 바란다.
기타
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|