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의 설치 작업으로 넘어가기 이전에, 다음 주의사항을 반드시 숙지하기 바란다.
- Buffer Overflow 공격을 피하기 위해 반드시 3.x이나 4.x 버전을
가져온다. 기존 2.3, 2.4 버전을 쓰시는 분들께서는 이번 기회에 POP3
서버를 교체하는 편이 좋겠다. 버전 확인은 다음과 같이 하면 된다:
% telnet localhost pop3
Trying 127.0.0.1
Connected to localhost.
Escape character is '^]'.
+OK QPOP (version 3.0.2) at localhost starting.
- NFS로 디렉토리를 마운트시켜 사용할 경우 qpopper를 쓰면 위험할 수도 있다. 4.0.x에 들어와서는 환경 설정 파일에 no-atomic-open이라는 지시자를 지정하여 NFS locking 매커니즘을 사용할 수도 있지만 아직 베타 상태이므로 적용은 관리자 판단에 맡긴다.
패키지 풀기
다음과 같이 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를 지원하는 시스템은 다음과 같다:
- shadow password를 사용하는 Linux
- C2 보안체계가 설정되어 있는 Digital UNIX
- Trusted 모드로 동작하는 HP-UX
- shadow password를 사용하는 SunOS 4.x
위 네가지 시스템에서는 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에
저장된다고 할 경우 다음과 같은 디렉토리-파일 구조를 갖는다. 사용자가 많아질
경우 유리할 것이다.
- --enable-hash-spool을 지정하지 않았을 경우: /var/mail/jrogue
- --enable-hash-spool=1로 지정했을 경우: /var/mail/j/jrogue
- --enable-hash-spool=2로 지정했을 경우: /var/mail/j/r/jrogue
디버깅을 위한 코드를 생성할 필요가 있다. 이럴 경우 다음과 같은
선택 사양을 사용한다.
% 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_MACRO
Makefile에 추가할 몇가지 마크로를 표([Makefile에 관련된 마크로 이름과
설명])형태로 정리하였다. 자신의 환경에 맞추어 올바르게 설정해서 사용하기
바란다.
|
마크로 이름
|
설명
|
예
|
|
AUTH_SPECIAL
|
shadow password나 특수한 암호 프로그램으로 사용자 암호를 처리
|
-DAUTH_SPECIAL
|
|
SECURENISPLUS
|
NIS+를 사용할 경우
|
-DSECURENISPLUS
|
|
BULLDIR
|
POP3 사용자들에게 블루틴(bulletin) 기능을 제공하고 싶을 경우
|
-DBULLDIR=\"/var/spool/bulls\"
|
|
BULLDB
|
블루틴 관련 정보를 사용자 홈 디렉토리가 아닌 ndbm 파일에 저장할 경우
|
-DBULLDB
|
|
NEWBULLCNT
|
새로운 사용자가 최대한으로 받을 초기 블루틴 갯수
|
-DNEWBULLCNT=10
|
|
SERVER_MODE
|
POP3 서버를 서버 모드로 동작시킬 경우
|
-DSERVER_MODE
|
|
AUTHFILE
|
POP3 서버가 허가하는 사용자 목록이 담긴 파일 이름을 지정할 경우
|
-DAUTHFILE=\"/etc/authfile\"
|
|
NONAUTHFILE
|
POP3 서버가 허가하지 않는 사용자 목록이 담긴 파일 이름을 지정할 경우
|
-DNONAUTHFILE=\"/etc/nonauthfile\"
|
|
DEBUG
|
popper -d 명령으로 로그 파일을 남기고 싶을 경우
|
-DDEBUG
|
|
KERBEROS
|
Kerberos IV를 지원하고 싶을 경우, 반드시 Makefile에 -lkrb를 추가
|
-DKERBEROS
|
|
KUSEROK
|
Kerberos에서 kuserok 함수를 사용할 경우
|
-DKUSEROK
|
|
HASH_SPOOL
|
spool 디렉토리 및 파일 구조를 해쉬를 사용하여 지정하고 싶을 때
|
-DHASH_SPOOL=(1|2)
|
|
KEEP_TEMP_DROP
|
사용자의 .user.pop 파일을 지우지 않을 경우. 최종적으로 편지를 읽은 시간을 알 수 있다.
|
-DKEEP_TEMP_DROP
|
|
HOMEDIRMAIL
|
전자편지가 사용자의 홈 디렉토리에 spool될 경우
|
-DHOMEDIRMAIL=\".mail\"
|
|
AUTO_DELETE
|
자동으로 다운로드 받은 편지를 서버쪽에서 삭제하고 싶을 경우
|
-DAUTO_DELETE
|
|
SHY
|
qpopper의 버전 번호를 숨기고 싶을 경우
|
-DSHY
|
|
USE_PAM
|
PAM을 사용하여 인증할 경우
|
-DUSE_PAM=\"pop3\"
|
[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 파일을 다음과 같이 수정한다.
- services 의 hostnames 밑에 다음 라인을 추가한 다음 저장한다.
pop3 110/tcp # popper
- inetd.conf의 마지막 행에 다음 라인을 추가한 다음 저장한다.
pop3 stream tcp nowait root /usr/local/lib/popper popper -s
- pop3에 관련된 라인이 절대로 중복되어서는 안된다. 라인을 추가하기
전에 반드시 확인이 필요하다. 그리고 popper 명령을 제외한 각 공백은 탭 키를 눌러
널찍널찍하게 들여쓰기를 맞추도록 한다.
- pop이나 imap과 혼동해서는 안된다. 두 프로토콜과 pop3는 호환성이 없다.
- Linux의 경우 110번 포트가 pop-3라고 되어있다. 혼동을 막기 위해 아에
이를 주석처리하기 바란다.
- 만일 inetd.conf를 수정하였다면, inetd를 다음과 같이 죽였다 살린다.
# kill -HUP < inetd process id >
- AIX를 사용할 경우 다음과 같은 방법으로 inetd를 재시동할 수 있다.
# refresh -s inetd
inetd 대신 xinetd를 사용할 경우에는 다음 절차를 따르기 바란다.
- /etc/xinetd.d 디렉토리에 pop3라는 파일을 만든다. 이 파일에는 다음과 같은
내용이 들어있어야 한다. 여기서 server에서 지정하는 디렉토리는 상황에 따라
변동해야 한다.
service pop3
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/local/lib/popper
server_args = qpopper -s
port = 110
}
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의 명령행 선택 사양])에 필요한 요소를 정리해
두었다. 명령행 선택 사양은 컴파일시 정의된 기본값보다 우선 순위가 주어지므로
환경 설정시 필요할 때마다 참고하기 바란다.
사용법: popper [-B] [-b bulldir] [-c] [-D drac-host] [-d] [-e] [-k] [-R] [-S] [-s] [-T timeout] [-t trace-file] [-f config-file]
|
선택 사양
|
설명
|
|
-B
|
--enable-bulldb로 컴파일했을 경우, bulletin 데이타베이스를 열 수 없어도
작업을 진행하도록 허용한다.
|
|
-b bulldir
|
블루틴을 저장할 디렉토리를 지정한다.
|
|
-c
|
사용자 계정을 소문자로 변경하여 검사하도록 만든다.
|
|
-D drac-host
|
--enable-drac 선택 사양으로 컴파일 되었을 경우 drac 호스트를
지정한다. 기본값은 localhost이다.
|
|
-d
|
디버깅 로깅을 수행한다(-DDEBUG로 컴파일한 경우에만 적용).
|
|
-e
|
POP3 확장 모드로 동작한다.
|
|
-k
|
Kerberos를 지원한다(-DKERBEROS로 컴파일한 경우에만 적용).
|
|
-R
|
클라이언트의 IP 주소에 대한 역매핑을 하지 않는다.
|
|
-S
|
--enable-servermode를 지정하지 않았을 경우 서버 모드로 동작한다.
|
|
-s
|
통계를 위해 로깅을 수행한다.
Stats: randy 0 0 1 385 randy.example.org 192.168.2.4
Username----^ ^ ^ ^ ^ ^ ^
Deleted msgs----! ! ! ! ! !
Deleted octets-- ! ! ! ! !
Msgs left on server-! ! ! !
Octets left on server--! ! !
Name of client machine-----------! !
IP address of client machine---------------------!
|
|
-T timeout
|
qpopper의 종료시간을 지정한다. RFC의 기본값은 600초이나, 30에서 120초가 적합하다.
|
|
-t trace-file
|
디버그와 통계 파일을 위한 로그 파일 경로를 지정한다.
|
|
-f config-file
|
환경 설정 파일을 읽어서 여기에 지정한 옵션으로 동작하게 만든다.
환경 설정 파일 예는 qpopper 패키지 samples 디렉토리 아래 qpopper.config 파일을 참조하기 바란다.
대부분 명령행으로 설정할 수 있으므로 많은 옵션을 사용하는 경우가 아니라면 굳이 환경 설정 파일을 쓸 필요가 없다.
|
[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시나 마크로 설정을 통해 블루틴 기능을 지원하도록 컴파일했다면
다음 사항을 살펴본다.
- BULLDIR로 정의된 디렉토리가 존재하는지 검사한다. 만일 존재하지 않는다면
mkdir 명령으로 새로 만든다.
- 위 디렉토리의 접근허가를 살펴본다. 일반 사용자에게 읽기/찾기 권한이
부여되어 있는지 확인하고, 그렇지 않다면 chmod 명령으로 권한을 변경한다.
- RFC822 규약에 맞추어 블루틴에 올릴 편지 전문을 작성한다. 센드메일등의
MTA를 거치지 않으므로 MUA가 혼동을 일으키지 않게 하려면 관리자가 수작업으로
Date, From, Subject등의 SMTP 헤더를 규칙에 맞추어 추가해야 한다. 아래에
제시하는 편지를 기초로 필요한 부문을 고쳐서 사용하기 바란다.
From qpop Mon Jan 18 11:41:00 1999
Date: Mon, 18 Jan 1999 11:41:00 +0900 (KST)
From: "POP Administrator"
Subject: Example bulletin
This is a test bulletin using POP3 bulletin facility.
|
- 작성한 편지의 파일 이름을 정한다. 이름 규칙은 일련번호.제목으로
구성되며 일련번호는 디렉토리에 최대로 저장할 편지 개수 + 1까지를 포함할 수
있는 자리수를 가지도록 한다. 합법적인 이름의 예는 다음과 같다:
- 00000.Bulletin
- 00001.Shutdown
앞서 언급한 바와 같이 앞의 일련번호와 사용자 계정의 .popbull 파일의
일련번호를 비교하여 해당 사용자에게 메시지를 전달하므로, 파일 이름 결정은
언제나 신중해야 한다. 여기서 일련번호는 중복되지 않도록 하며 오름차순으로
부여하도록 한다.
- 만일 configure 시에 --enable-group-bulls 선택 사양을 붙였다면
이름을 다음과 같이 지정한다.
- 001.staff.new_program_installed
둘째 필드는 그룹 이름이며, 이상의 예와 같이 설정한 편지는 staff 그룹에게만
전달될 것이다.
하지만 편리한 블루틴 기능에도 다음 두가지 사소한 결점이 존재한다.
참고하기 바란다.
- pine이나 mutt등으로 UNIX에서 메일박스를 바로 읽어들일 경우 블루틴이
무용지물로 변한다. 이럴 경우 뾰족한 방법이 없다.
- 일련번호의 재사용(recycle) 기능이 아직 구현되어 있지 않다. 따라서
일련번호를 모두 사용한 이후에는 find 명령으로 각 사용자 디렉토리를 모두 뒤져
.popbull 파일을 삭제해야 하는 불상사가 생길지도 모른다.
- 새로운 사용자가 등록되었을 경우 기존의 모든 불루틴이 전달되는 문제는
--with-new-bulls를 사용하여 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 Shooting
qpopper의 테스트를 위해
% telnet localhost pop3
명령을 내렸을 경우 다음과 같은 메시지가 나올 수 있다.
- pop3: bad port number
- connect: Connection refused
- connect: Connection closed
이럴 경우 번호에 맞추어 다음의 경우를 차근차근 따져보기 바란다.
- services 파일에 POP3 포트 번호가 설정이 안된 경우: 직접 services 파일을
열어 pop3 설정을 확인한다. Linux의 경우 pop3 대신 pop-3라고 정의되어 있을
것이므로 이 행을 주석처리하고 새로 pop3라는 이름으로 설정하기 바란다.
- inetd.conf 파일에 POP3가 설정이 안된 경우: 직접 inetd.conf 파일을
열어 pop3 설정을 확인한다.
- popper daemon에 문제가 있는 경우: inetd.conf나 service 파일에 적힌
popper의 위치와 실행 파일 이름을 확인한다. 그리고 inetd를 다시 동작시킨다.
또한 inetd.conf에 110번 포트를 잡는 프로그램을 두 개 이상 등록하면
이런 현상이 생길 수 있다. 다음 코드에서 /usr/local/lib/popper를 마우스로
긁어서 ls -al 명령을 내려 qpopper 프로그램이 존재하는지 확인하기 바란다.
pop3 tcp /usr/local/lib/popper qpopper -s
접속이 잘되었더라도 사용자 계정과 암호를 주면 이를 거부할 때가 있다.
이럴 경우에는 다음 항목을 살펴본다.
- shadow password 사용시: configure를 --enable-specialauth 선택 사양을 주어
새로 돌리거나 Makefile에 AUTH_SPECIAL 마크로를 추가해서 새로 컴파일한다.
- AUTHFILE, NONAUTHFILE 마크로 정의시: 각각의 인증 목록 파일을 검사하여
해당 사용자가 인증이 거부되고 있는 상황인지 살펴보기 바란다.
하지만 사용자 인증까지 잘 넘어갔음에도 불구하고 임시 파일을 생성시킬
수 없다는 오류가 발생할 수 있다.
- -ERR System error, can't open temporary file, do you own it?
이럴 경우 다음 항목을 살펴본다.
- 각종 파일에 대한 소유주가 틀리게 설정된 경우: popper daemon의 소유주가
root인지 확인하며, 전자편지가 저장되는 디렉토리(예: /usr/mail)의
소유주가 root이고 그룹이 mail이며, 전자편지가 저장되는 디렉토리에 생성되는
임시 파일인 .username.pop의 소유주가 username인지 확인한다.
또한 전자편지가 저장되는 디렉토리의 접근허가를 살펴서 임시 파일인
.username.pop이 생성될 수 있는지 확인한다. 만일 디렉토리 접근허가에
문제가 있으면 다음과 같은 명령을 내려 전자편지가 저장되는 디렉토리의
접근허가를 drwxrwxrwt로 변경한다.
# chmod 1777 /usr/mail
이상의 경우를 모두 따져보았음에도 불구하고 원인을 제대로 파악할 수 없다면
Makefile에 DEBUG 마크로를 추가해서 새로 컴파일하여 inetd.conf의 popper
명령에 -d 선택사양을 주어 popper를 시동하도록 한다. syslog 파일에 popper의
활동상황이 기록되어 있으므로 이를 분석하여 문제를 해결한다.
또한 선택 사양을 잘못 설정하여 문제가 발생할 수도 있으므로, 이럴 경우
선택 사양을 지정하지 않고 순수하게 configure 명령만으로 popper를 만들어
테스트에 임하기 바란다.
기타
- 이 문서의 저작권 및 라이선스 방식은
삼바 설치 및 활용 가이드에 준한다.
- 의문 사항이 생길 경우 전자편지를 사용하여 질문하면 feedback을 받을
수 있을 것이다.
|