Qmail + vpopmail 은재 임
eunjea@kldp.org
v1.7, 2001년 2월 26일 v1.7 2001년 2월 26일 은재 vpopmail을 이용한 smtp 릴레이 기능 설명, FAQ, 팁 추가, 오타 수정 v1.4 2000년 11월 18일 은재 linuxdoc sgml에서 DocBook 으로 변환 v1.3 2000년 11월 18일 은재 vpopmail, qmailadmin 설명 추가 v1.0 2000년 8월 15일 은재 첫번째 문서 linuxdoc sgml qmail 이 문서는 sendmail을 대체하는 메일 전송 에이전트(MTA)인 Qmail 과 가상 도메인 POP 메일을 쉽게 관리할수 있는 vpopmail 과 qmailadmin 의 설치, 운영에 대한 글입니다.
소개 지금 당신이 sendmail (또는 다른 MTA)과 행복하게 잘 살고 있고, 다른 기능이 더이상 필요없다면 당신은 이글을 읽어볼 필요가 없다. 하지만... Qmail, vpopmail, qmailadmin 으로 무엇을 할수 있을까? 한개의 서버, 한개의 IP 에서 무한정(?)의 도메인, pop 메일 서비스를 해줄수 있다. 한개의 uid,gid 로 모든 버츄얼 도메인, pop 계정을 관리 하므로 불필요한 유저 생성을 피할수 있다. 각 도메인의 postmaster 는 웹 인터페이스로 pop 메일 유저 설정을 직접 할수 있다. 각 도메인마다 메일 계정, 메일링 리스트의 한계를 설정할수 있다. 유저 별로 quota 설정이 가능하다. 맛있는 비빔밥 이외에도 vpopmail 은 MySQL 을 이용한 사용자 관리, smtp 사용자들의 로밍 서비스 (고정 IP를 가지고 있지 않은 사용자에게 smtp 릴레이를 허용해주는)를 해줄수 있다. Qmail 에 대한 자세한 설명은 문서의 목적에 벗어나므로 더 자세히 알고 싶다면 해당 문서를 참고하라. 이 문서의 가장 최신 버젼은 http://kltp.kldp.org/eunjea/에 있다. 필요한 것들 qmail , ucspi-tcp , daemontools , rblsmtpd 위의 것들은 모두 http://www.qmail.org 에서 받을수 있거나 링크를 찾을수 있다. vpopmail , qmailadmin 이것들은 http://www.inter7.com/qmail/ 에서 받는다. inter7.com 에서는 이 문서를 참조해 직접 qmail을 설치하기 싫거나 무서워 하는 사람들에게 돈 받고 설치, 관리를 해준다. ;-) qmailadmin 은 vpopmail의 웹 인터페이스 이므로 모든 관리를 콘솔상에서 하고 싶은 사람은 설치하지 않아도 아무런 기능상의 제약은 없다. qmailadmin 을 설치하려면 autoresponder 와 ezmlm 도 설치한다. ezmlm 은 qmail 하에서 돌아가는 강력한 메일링 리스트로서 http://www.ezmlm.org/에서 ezmlm 과 ezmlm-idx 를 받는다. 내가 사용한 버젼들(또는 이글을 쓰는 당시 테스트해본)은 다음과 같다. qmail-1.03.tar.gz rblsmtpd-0.70.tar.gz ucspi-tcp-0.88.tar.gz daemontools-0.70.tar.gz autorespond-1.0.0.tar.gz qmailadmin-0.42.tar.gz vpopmail-4.9.tar.gz ezmlm-0.53.tar.gz ezmlm-idx-0.40.tar.gz qmailadmin을 사용하려면 당연히 웹서버가 필요하겠고, vpopmail 에서 MySQL 을 사용할 것이라면 MySQL 이 돌아가고 있어야 한다. Qmail 설치 자... 필요한 파일들이 모두 준비되었다면 일단 Qmail 을 설치한다. 이미 qmail(아무런 패치도 가하지 않은) 을 설치한 시스템 이라면 다음장인 vpopmail 로 넘어간다. 만약 당신이 열심히 sendmail 이 돌아가고 있는 서버에 설치를 해야 한다 해도 걱정할것은 전혀 없다. 이 문서를 끝까지 읽고 모든 설정을 마친후 sendmail 에서 qmail 로의 전환은 수초에 끝낼수 있으며, qmail 데몬을 시동하기 전까지는 아무런 영향도 미치지 않는다. 필자도 하루에 수만통을 배달하는 서버들을 qmail로 전환하는데 아무런 장애도 주지 않았다. 다음 순서대로 하면 되는데 하나라도 잊거나 틀리면 문제가 생기니 주의 하도록 qmail 컴파일, 설치 일단 타볼을 풀고 tarx qmail-1.03.tar.gz cd qmail-1.03 다음 디렉토리를 만든다. mkdir /var/qmail INSTALL.ids 를 편집한다. 다음과 같이 리눅스 항목들만 놔누고 명령어들을 언코멘트 시킨다음 저장. 리눅스가 아니라면 알아서 하세요 ;-) groupadd nofiles useradd -g nofiles -d /var/qmail/alias alias useradd -g nofiles -d /var/qmail qmaild useradd -g nofiles -d /var/qmail qmaill useradd -g nofiles -d /var/qmail qmailp groupadd qmail useradd -g qmail -d /var/qmail qmailq useradd -g qmail -d /var/qmail qmailr useradd -g qmail -d /var/qmail qmails sh INSTALL.ids 해주면 필요한 유저,그룹이 생성된다. (시간이 남아도는 사람은 위 명령들을 하나하나 입력해도 좋다 :-)) Qmail 컴파일 하기 make make setup check 다음 기본 control 파일들의 설정을 위해 ./config 이것이 정상적으로 실행 되었다면 /var/qmail/control/ 안에는 qmail이 정상적으로 작동하기 위한 설정 파일들이 생겨야 한다. 만약 그렇지 않다면 서버의 DNS 설정에 문제가 있는것이다. 더 자세한것은 qmail 문서를 참조하라 이쯤에서 qmail을 위한 몇가지 부수적인 프로그램들을 (ucspi-tcp , daemontools , rblsmtpd, autorespond)을 설치한다. 다음과 같이 간단하다. tar xzf ucspi-tcp-0.88.tar.gz cd ucspi-tcp-0.88 make make setup check tar xzf daemontools-0.70.tar.gz cd daemontools-0.70 make make setup check tar xzf rblsmtpd-0.70.tar.gz cd rblsmtpd-0.70 make setup check tar xzf autorespond-1.0.0.tar.gz cd autorespond-1.0.0 gcc -Wall -o autorespond autorespond.c cp autorespond /usr/local/bin/ 모두 이상없이 설치가 되었다면 다시 qmail 을 위해 파일을 만든다. vi /var/qmail/rc #!/bin/sh exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start ./Maildir/ splogger qmail 이 파일에 실행 퍼미션을 준다. chmod a+x /var/qmail/rc 다음은 큐메일 데몬을 위한 디렉토리와 파일들을 생성. mkdir -p /var/qmail/supervise/qmail-send/log mkdir -p /var/qmail/supervise/qmail-smtpd/log chmod +t /var/qmail/supervise/qmail-send chmod +t /var/qmail/supervise/qmail-smtpd /var/qmail/supervise/qmail-send/run 의 내용 #!/bin/sh exec /var/qmail/rc /var/qmail/supervise/qmail-send/log/run 의 내용 #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail /var/qmail/supervise/qmail-smtpd/run 의 내용 #!/bin/sh ALIAS_UID=`id -u alias` ALIAS_GID=`id -g alias` exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb \ -u $ALIAS_UID -g $ALIAS_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1 위와 같이 alias 의 UDI,GDI 를 사용 한다. /var/qmail/supervise/qmail-smtpd/log/run 의 내용 #!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd 이렇게 편집한 파일들에 실행 권한을 준다. chmod 755 /var/qmail/supervise/qmail-send/run chmod 755 /var/qmail/supervise/qmail-send/log/run chmod 755 /var/qmail/supervise/qmail-smtpd/run chmod 755 /var/qmail/supervise/qmail-smtpd/log/run 다음은 qmail-smtpd 를 위한 로그 디렉토리 만들기 mkdir -p /var/log/qmail/smtpd chown qmaill /var/log/qmail /var/log/qmail/smtpd 다음 파일에는 qmail smtp 데몬이 메일을 중계할 주소를 적어주는 것이다. 192.168.1.1 은 당연히 설치할 서버의 주소로 바꿔야 한다. 그외 메일을 중계 해줄 서버의 주소가 있다면 같은 형식으로 추가한다. /etc/tcp.smtp 의 내용 127.0.0.1:allow,RELAYCLIENT="" 192.168.1.1:allow,RELAYCLIENT="" 후에 이 파일에 변경이 있는 경우 다음의 qmail 부트 스크립트를 이용해 다음과 같이 한다. /etc/rc.d/init.d/qmail cdb 알리아스 설정 만약 주 도메인의 메일 계정들도 모두 vpopmail 로 관리할 것이 아니라면 (필자는 주 도메인의 메일 계정들도 모두 vpopmail 로 관리할것을 권장한다.) 몇가지 알리아스를 설정해 준다. 여기서 silver 는 root, postmaster 등으로 오는 메일을 받을 일반 계정이다. cd ~alias echo silver > .qmail-mailer-daemon echo silver > .qmail-postmaster echo silver > .qmail-root qmail 부트 파일 다음은 qmail 데몬의 부트 스크립트이다. #!/bin/sh # Comments to support chkconfig on RedHat Linux # chkconfig: 2345 80 80 # description: sendmail을 대체하는 빠르며, 안정적이고, 유연한 MTA # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin export PATH case "$1" in start) echo -n "Starting qmail: svscan" cd /var/qmail/supervise env - PATH="$PATH" svscan & echo $! > /var/run/svscan.pid echo "." ;; stop) echo -n "Stopping qmail: svscan" kill `cat /var/run/svscan.pid` echo -n " qmail" svc -dx /var/qmail/supervise/* echo -n " logging" svc -dx /var/qmail/supervise/*/log echo "." ;; stat) cd /var/qmail/supervise svstat * */log ;; doqueue|alrm) echo "Sending ALRM signal to qmail-send." svc -a /var/qmail/supervise/qmail-send ;; queue) qmail-qstat qmail-qread ;; reload|hup) echo "Sending HUP signal to qmail-send." svc -h /var/qmail/supervise/qmail-send ;; pause) echo "Pausing qmail-send" svc -p /var/qmail/supervise/qmail-send echo "Pausing qmail-smtpd" svc -p /var/qmail/supervise/qmail-smtpd ;; cont) echo "Continuing qmail-send" svc -c /var/qmail/supervise/qmail-send echo "Continuing qmail-smtpd" svc -c /var/qmail/supervise/qmail-smtpd ;; restart) echo "Restarting qmail:" echo "* Stopping qmail-smtpd." svc -d /var/qmail/supervise/qmail-smtpd echo "* Sending qmail-send SIGTERM and restarting." svc -t /var/qmail/supervise/qmail-send echo "* Restarting qmail-smtpd." svc -u /var/qmail/supervise/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 a TERM & restarts it doqueue -- sends qmail-send ALRM, scheduling queued messages for delivery reload -- sends qmail-send HUP, rereading locals and virtualdomains queue -- shows status of queue alrm -- same as doqueue hup -- same as reload HELP ;; *) echo "Usage: $0 {start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue|help}" exit 1 ;; esac exit 0 위의 것을 그대로 복사,저장 하거나 이곳에서 받는다. http://kltp.kldp.org/tmp/qmail.txt. 이것을 /etc/rc.d/init.d/ 에 qmail 이라는 이름으로 저장한후 실행 퍼미션을 준다. 다음 ntsysv 실행시키면 qmail 이라는 새로운 항목이 보일것이다. 리부팅 할때 qmail 데몬이 실행되도록 체크해준다. 당연히 sendmail 은 언체크. (redhat 이외 계열의 배포본은 알아서 하세요. 부팅할때 뜨도록 ;-)) qmail 설치 끝~ 복잡 한듯 싶지만 알고 보면 그렇지도 않다 ;-) 이쯤에서 잊은것이 없는지 처음부터 하나하나 다시 살펴보는 것도 좋겠다. 잘 설치된 qmail을 마지막 그 순간(?)까지 잘 놔두고 다음장으로 넘어가자. vpopmail 설치 vpopmail 은 가상 도메인 추가, 설정, pop 유저 설정과 pop3 데몬등의 기능을 한다. vpopmail 계정 추가 vpopmail이 제대로 작동하려면 vpopmail 이 사용할 유저와 그룹을 만들어야 한다. groupadd vchkpw useradd -g vchkpw vpopmail 이때 생성되는 vpopmail 홈 디렉토리에는 앞으로 추가할 도메인들의 모든 이메일 계정, 이메일들이 저장될 곳이므로, 공간이 넉넉한 파티션을 고르는 것이 좋겠다. 다른 파티션을 사용할 것이라면 다음과 같이 할수 있다. useradd -g vchkpw -d /원하는/파티션의/디렉토리를/지정 vpopmail smtp 릴레이 설정 vpopmail의 로밍서비스는 고정되어 있지 않은 IP사용자들이 smtp 릴레이를 원할때 사용할수 있는 기능이다. vpopmail은 먼저 POP 메일 유저의 암호를 확인한다음 얼마만큼의 시간동안 그 IP주소의 smtp 릴레이를 열어 놓게 된다. 사용자들에게 vpopmail의 로밍서비스를 이용한 smtp 릴레이를 허용할 것 이라면 다음과 같이 tcp.smtp 파일을 하나 만들어 둔다. echo "127.0.0.:allow,RELAYCLIENT=\"\"" > ~vpopmail/etc/tcp.smtp 이것은 가장 기본적인 설정이며, 다음과 같이 고정 IP(또는 대역)를 추가할수도 있다. 다음의 설정은 C class 10.1.1.x 대의 IP 주소로 부터의 릴레이를 허용한다. echo "10.1.1.:allow,RELAYCLIENT=\"\"" >> ~vpopmail/etc/tcp.smtp 마지막으로 crontab을 하나 설정해야 하는데, 이것은 주기적으로 열려 있는 릴레이 주소들중 3시간 이상된것들만 지워준다. 기본 3시간으로 설정되어 있는데, 이것은 vpopmail 설정 옵션중 --enable-relay-clear-minutes= 으로 바꿔줄수 있다. # crontab -e 40 * * * * /vpopmail-디렉토리/bin/clearopensmtp 2>&1 > /dev/null 이 로밍 서비스를 사용할 것이라면 밑에 컴파일시 ./configure 설정 옵션에 --enable-roaming-users=y 를 잊지 말고 넣어주어야 한다! 또한 qmail 시동 스크립트도 다음과 같이 vpopmail에서 조정하는 tcp.smtp 파일을 사용해야 하므로 다음과 같이 달라져야 한다. /var/qmail/supervise/qmail-smtpd/run 의 내용 #!/bin/sh ALIAS_UID=`id -u alias` ALIAS_GID=`id -g alias` exec /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -H -R -x /vpopmail 디렉토리/etc/tcp.smtp.cdb \ -u $ALIAS_UID -g $ALIAS_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1 컴파일 이제 vpopmail 을 설치하자. tar xzf vpopmail-4.9.tar.gz cd vpopmail-4.9 MySQL 사용하지 않을 경우 sql를 사용하지 않는다면 보통 다음 옵션만 주고 컴파일 하면 된다. ./configure --enable-default-domain=babo.org make make install-strip MySQL을 사용 할 경우 MySQL db를 사용하려 한다면, 컴파일 하기전에 먼저 vmysql.h 를 열어서 sql 서버를 억세스 할수 있는 user와 암호등을 설정해주어야 한다. 테이블을 생성/삭제 할수 있는 사용자 이여야 하므로 보통 root 나 해당 유저로 설정해 준다. ./configure --enable-default-domain=babo.org --enable-mysql=y make make install-strip 이때 --enable-large-site=n|y 옵션을 사용할수도 있는데 이것은, 디폴트로 vpopmail은 모든 도메인, 유저 정보를 한개의 테이블에서 관리한다. 만약 각각의 도메인에 매우 많은 메일유저가 있다면 y 로 설정하면, vpopmail은 도메인별로 테이블을 생성,유저정보를 관리한다. 만약 sql 헤더파일이나 라이브러리를 찾지 못한다며 컴파일에 실패한다면, --enable-sqlincdir= sql 헤더파일 경로. --enable-sqllibdir= sql 라이브러리 경로 등을 ./configure 할때 추가 해준다. 위의 예에서 babo.org 는 주 서버의 도메인 이름이다. 이것을 설정하면 주서버의 메일 계정도 모두 가상 도메인의 메일 계정과 동일하게 관리 할수 있다. (이렇게 하는 것을 권장한다) 설치가 되었다면 ~vpopmail 안에는 bin doc domains etc include lib users 등의 디렉토리과 필요한 바이너리들이 생겼을 것이다. pop3 데몬 시동 파일 vpopmail 의 pop3 데몬 시동 파일을 만들자. #!/bin/sh env - PATH="/var/qmail/bin:/usr/local/bin" \ tcpserver 0 pop-3 /var/qmail/bin/qmail-popup babo.org \ /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir & babo.org 는 주서버의 도메인이다. vpopmail 설치시 --enable-default-domain 를 주고 설치했다면 더 안전하게 pop3 데몬을 vpopmail 유저 권한으로 실행시킬수 있다. #!/bin/sh VPOP_UID=`id -u vpopmail` VPOP_GID=`id -g vpopmail` env - PATH="/var/qmail/bin:/usr/local/bin" \ tcpserver -u $VPOP_UID -g $VPOP_GID 0 pop-3 /var/qmail/bin/qmail-popup babo.org \ /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir & 위 와 같이 만든 시동파일을 vpop3_start 등의 이름으로 저장후, 실행 퍼미션을 주고 부팅시 실행되도록 /etc/rc.d/rc.local 등에 적어 놓는다. 도메인, 메일 계정 추가하기 ~vpopmail/bin 디렉토리 안에 가상 도메인 관리를 위한 바이너리들이 있는데 다음과 같은 기능을 한다. 각 바이너리들의 용도 vadddomain 가상 도메인을 추가한다. postmaster 암호를 물어보는데 이것은 다음에 설치할 qmailadmin 웹 인터페이스에서 로그인 할때 물어볼 암호이다. 형식은 vadddomain 도메인명 vdeldomain 가상 도메인과 모든 유저를 삭제한다. vdeldomain 도메인명 vadduser pop 메일 유저 계정을 만든다. vadduser babo@babo.org vdeluser pop 메일 유저 삭제. vdeluser babo@babo.org vpasswd 메일 유저의 암호 바꾸기. vpasswd babo@babo.org vsetuserquota 각 유저 별로 quota 설정을 할수 있다. vsetuserquota babo@babo.org 51200 (단위는 byte 이다). vpopbull 서버에 설정되어 있는 모든 유저들에게 한번에 메일을 보낼때 유용하게 사용할수 있다.
이제 도메인을 추가하자. 위에서 주 도메인도 vpopmail에서 관리하기로 했다면 주 도메인과 메일 계정들도 추가해야 한다. 만약 주 도메인이 babo.org 이고, 추가할 가상 도메인이 babo1.org, babo2.org 라고 한다면 다음과 같이 한다 (추가하기 전에 가상 도메인들의 DNS MX 레코드의 IP주소가 주 서버로 되어있는지 확인 해보자). adddomain babo.org adddomain babo1.org adddomain babo2.org 다음 qmail 설정 파일들이 제대로 바뀌었는지 확인해보자. 주 도메인도 vpopmail이 관리하기로 했다면 /var/qmail/control/locals 파일의 내용은 localhost 만이 있어야 정상이다. qmail smtpd가 이 서버의 것이라고 인식하며 메일을 수신할 도메인들은 다음과 같이 rcpthosts 에 저장될 것이다. localhost babo.org babo1.org babo2.org virtualdomains 파일의 내용은 babo.org:babo.org babo1.org:babo1.org babo2.org:babo2.org /var/qmail/users/assign 의 내용은 +babo.org-:babo.org:512:507:/home/vpopmail/domains/babo.org:-:: +babo1.org-:babo1.org:512:507:/home/vpopmail/domains/babo1.org:-:: +babo2.org-:babo2.org:512:507:/home/vpopmail/domains/babo2.org:-:: . 필요한 도메인, 메일 계정을 모두 추가했다면 우리는 이제 준비가 끝난 셈이다.
sendmail 에서 qmail 로의 전환 모든 설정이 확실히 되었다고 생각된다면 이제 우리는 sendmail을 가차없이 죽이고 qmail 로 돌아설 때가 되었다. ;-) qmail /etc/rc.d/init.d/sendmail stop 또는 다른 방법으로 sendmail 을 죽인다. 다음 /etc/rc.d/init.d/qmail start 로 qmail 을 시동하자. 이제 기존의 sendmail 바이너리를 qmail 의 것으로 바꾼다. mv /usr/lib/sendmail /usr/lib/sendmail.old mv /usr/sbin/sendmail /usr/sbin/sendmail.old ln -s /var/qmail/bin/sendmail /usr/lib ln -s /var/qmail/bin/sendmail /usr/sbin 만약 이전 sendmail이 아직 전송하지 못한 메일들이 메일큐에 쌓여 있다면 sendmail.old -q 를 실행 시켜서 전송을 마쳐 주어야 한다. 메일이 많이 쌓여 있을경우 이것은 한번의 실행으로 끝나지 않을수도 있다. POP3 이제 부터 수신되는 메일들은 ~vpopmail/domains/도메인/유저/Maildir/ 안에 쌓일것이다. pop 유저들을 위해 위에서 만들어 놓은 vpopmail pop3 데몬을 시동해 주자. 일단 기존의 /etc/inetd.conf 에서 pop3 관련 항목을 주석처리 한후 inetd 데몬을 재시동한다. /etc/rc.d/init.d/inetd restart 이제 이전에 만들어 놓은 vpop3_start 스크립트를 실행 하면 사용자들이 pop3 에 접속, 메일을 긁어갈수 있다. /usr/local/sbin/vpop3_start 한가지 주의해야 할것은 주 도메인 이외의 도메인 pop3 메일 계정 사용자들은 메일 클라이언트의 유저 이름을 my_id@babo2.com 과 같이 아이디@도메인명 으로 모두 써주어야 pop 로긴이 가능하다. 자기 서버의 모든 pop 메일 사용자들에게 이 사실을 알리자 :-) qmailadmin qmailadmin 은 vpopmail의 웹 인터페이스이다. 도메인의 추가,삭제를 제외한 모든 기능을 웹상에서 할수 있으며, ezmlm 을 이용한 메일링 리스트 추가, 삭제, 관리까지 할수 있다. ezmlm 설치 ezmlm 은 qmail 과 같이 사용할수 있는 강력한 메일링 리스트이다. 이 문서에서는 ezmlm 에 대한 설명은 하지 않겠다. (따로 하우투를 하나 쓸까 생각 중이다.) ezmlm 에 대한 더 자세한 것은 해당 문서를 참조하라. ezmlm 은 http://www.ezmlm.org에서 구할수 있다. ezmlm 과 ezmlm-idx 이 준비 되었다면 다음과 같이 한다. tar xzf ezmlm-0.53.tar.gz tar xzf ezmlm-idx-0.40.tar.gz mv -f ezmlm-idx-0.40/* ezmlm-0.53/ cd ezmlm-0.53 patch < idx.patch make make man make setup ezmlm 은 /usr/local/bin/ezmlm/ 에 설치될 것이다. qmailadmin 설치 tar xzf qmailadmin-0.3x.tar.gz cd qmailadmin-0.3x ./configure 에 몇가지 옵션이 있다. 서버의 설정이 디폴트와 다른 경우 설정해 주자. --enable-cgibindir : qmailadmin 이 설치될 디렉토리이다. 웹서버가 사용중인 cgi-bin 디렉토리를 적어준다. 디폴트는 /usr/local/apache/cgi-bin 이다. --with-htmllibdir : qmailadmin 의 html 템플레이트 파일 (당연히 이 파일들은 후에 입맛에 맞게 수정할수 있다.)들이 저장될 장소이다. 그냥 디폴트로 나두어도 된다. (/usr/local/share/qmailadmin) --enable-cgipath : 사용중인 웹서버의 cgi path가 /cgi-bin/ 이 아닌 경우 설정해준다. 디폴트는 /cgi-bin/qmailadmin 이다. make make install-strip 설치가 잘 되었는지 브라우저로 접속해본다. http://localhost/cgi-bin/qmailadmin 이제 원하는 도메인과 postmaster의 암호를 넣으면 로그인해서 여러가지 설정을 편안하게 할수 있다. 관리하기, 팁, FAQ, etc... 도메인 추가후에는 qmail 과 vpopmail 이 돌아가고 있는 상태에서 vadddomain 으로 도메인을 추가했다면 /etc/rc.d/init.d/qmail reload 또는 kill -HUP 시그날을 qmail-send 에게 보내서 /var/qmail/user 설정 파일을 다시 읽도록 해야 한다. root 와 mailer-daemon 유저를 추가해라 qmail, vpopmail 로 전환후 잊지 말고 만들어 줘야할 계정들이 있다. 나의 경우 하나의 일반 계정에 모두 알리아스로 만들어 주었다. 이전에 qmail 만을 쓰고 있던 시스템이라면 /var/qmail/alias/ 안의 파일들을 기억하라. root mailer-daemon 알리아스와 포워드 계정 알리아스와 포워드 계정은 거의 비슷한 기능을 하는데 다른점은 알리아스는 이 서버에 존재하는 메일 계정에 다른 이름을 여러개 설정하는 것이고, 포워드 계정은 도착한 메일을 설정해 놓은 다른 도메인의 메일 계정(들)로 보내는 것이다. 다음 설정 과정을 보면 이해가 쉬울것이다. qmailadmin 에서는 쉽게 설정 할수 있겠고, 만약 qmailadmin 을 설치하지 않은 경우 다음과 같이 한다. # 알리아스 silver 라는 팝 메일 계정이 존재하고, webmaster 라는 알리아스를 만드는 경우. 해당 도메인 디렉토리(~vpopmail/domains/도메인/)에 다음과 같은 내용의 .qmail-webmaster 파일을 만든다. /home/vpopmail/domains/도메인/silver/Maildir/ 이제 webmaster 로 오는 메일은 silver 가 받을 것이다. # 포워드 silver 로 오는 메일을 babo@kldp.org 라는 다른 도메인으로 포워딩 해줄때. 해당 도메인 디렉토리(~vpopmail/domains/도메인/)에 다음과 같은 내용의 .qmail-silver 파일을 만든다. &babo@kldp.org 이제 이 도메인의 silver 로 오는 메일들은 babo@kldp.org 로 보내질 것이다. 각 도메인마다 메일 계정, 메일링 리스트 수 한계 정하기 이것은 웹 호스팅 업체에서 qmailadmin 으로 각 유저들에게 사용중인 도메인의 메일 설정을 직접 하게 해줄때 매우 유용하게 쓰일수 있을것이다. 각 도메인마다 메일,메일링 리스트의 설정 한계를 줄수 있는데, 이것은 ~vpopmail/domains/도메인/ 에 .qmailadmin-limits 파일을 만들어 주면 된다. 형식은 다음과 같다. maxpopaccounts X maxaliases X maxforwards X maxmailinglists X maxautoresponders X X 는 해당 도메인이 사용할수 있는 최대한의 수를 넣어주면 되겠다. bounce 되는 메일에 메세지 넣기 해당 도메인으로 수신되는 메세지가 바운스 되는 경우가 있는데 보통, 팝 유저의 쿼타 용량이 한도를 넘었거나, 유저가 존재하지 않을 경우이다. 다음과 같은 파일을 만들어 각 가상 도메인의 디렉토리에 넣어 놓으면 바운스 되는 메일들에 포함되어 되돌려 지며 당신은 센스있는 관리자가 된다 :-) .over-quota.msg 에는 메일 유저의 쿼타 용량이 초과 되었으므로 메일 수신을 할수 없다는 메세지를. .no-user.msg 에는 우리 도메인엔 그런 메일 계정 없지롱 하는 내용의 메세지를 넣어 두면 된다. 이 파일들이 없다면 vpopmail은 바운스되는 메일에 뻣뻣한 영문 메세지 만을 포함 시킨다. 존재하지 않는 계정으로 오는 메일을 모두 받아 보려면 이것은 ~vpopmail/domains/virtual_domain/.qmail-default 파일을 수정하면 된다. 기본적으로 존재하지 않는 계정으로 오는 메일은 다음과 같이 바운스 되게 되어 있다. | /vpopmail-디렉토리/bin/vdelivermail '' bounce-no-mailbox 만약 admin@test.com 으로 모두 받아보려면 다음과 같이 수정 한다. | /vpopmail-디렉토리/bin/vdelivermail '' admin@test.com 존재하지 않는 계정으로 오는 메일을 다른 도메인으로 보내려면 ~vpopmail/domains/virtual_domain/.qmail-default 파일을 다음과 같이 수정한다. | /vpopmail-디렉토리/bin/vdelivermail '' $EXT@newdomain.com qmailadmin 으로 메일링 리스트 추가할때 필자가 버그 리포팅을 몇번 했지만 qmailadmin 으로 메일링 리스트 추가할때 약간의 버그가 존재한다. (qmailadmin-0.37 에서, 그후의 버젼에는 없어졌을지도 모르지만) 특히 뉴스 메일같은 moderated list 를 추가할때는 제대로 설정이 안되는것 같다. 일반적인 메일링 리스트는 별 이상 없으므로 그냥 쓰던가 나같이 결벽증이 있는 사람들은 qmailadmin 을 이용하지 않고 메일링 리스트는 직접 ezmlm-make 를 이용하는 것이 좋겠다. :-) vpopmail pop3 서버의 로그 아무런 설정을 주지 않았다면 vpopmail의 pop3 서버는 팝 유저들이 어떤 이유로든 로그인을 실패 했을 경우에만 로그를 남긴다.(/var/log/maillog 또는 /var/log/messages)에) vpopmail 설치시 다른 옵션을 줄수 있는데, --enable-logging=n : 아무런 로그도 남기지 않는다. --enable-logging=y : 모든 pop3 접속 기록과, 에러 메시지를 남긴다. --enable-logging=e : 오직 에러 메시지들만 남긴다. (디폴트) 서버에서 메일 클라이언트를 사용하는 유저들을 위해 pop3로 메일을 자기 컴퓨터로 긁어가는 사용자들은 아무런 문제도 없을테지만, 서버에 직접 접속하여 메일 클라이언트를 사용하는 사용자들은 메일을 읽을수 없을테니 불만이 생길 것이다. 이런 사용자들을 위해 .qmail 파일을 조작해 사용자의 Mailbox 나 Maildir 로 가게 하는 방법도 있지만 나는 popclient 라는 조그마한 프로그램을 이용했다. popclient 는 다음에서 받을수 있다. http://www.csp.trentu.ca/~csess/popclient.tar.gz 또는 http://kltp.kldp.org/tmp/popclient.tar.gz (이것은 칼 헤리스의 아주 오래된 코드인데 이것을 에릭 레이먼드가 fetchmail 로 발전 시켰지요.) 이것을 사용하면 로컬 pop3 서버에 접속하여 메일을 자신의 계정 mbox 에 옮기는 것이 가능하다. mbox 형태의 메일함은 대부분의 메일 클라이언트에서 지원하므로 유저들에게 popclient 를 사용하여 localhost 에서 메일을 옮겨 사용하라고 만 해주면 되겠다. 사용법은 다음과 같다. popclient -3 -u 유저 -p 암호 -o ~/mbox localhost 이외, 더 좋은 방법이 있다면 필자에게 알려주면 고맙지요 :-) qmail 설치 디렉토리가 /var/qmail 이 아니라면? 만약 qmail이 /var/qmail 이외의 디렉토리에 설치되었다면 vpopmail 설정시 다음과 같은 옵션을 주어야 한다. ./configure --enable-qmaildir=qmail 설치 디렉토리 도메인 마다 IP 주소가 다를 경우 IP 알리아싱을 사용하여 각 도메인마다 다른 IP를 사용하는 경우에는 vpopmail 설치시 --enable-ip-alias-domains=y 옵션을 줄수 있다. 이때 해당 도메인의 DNS 설정은 정확한 forward, reverse lookup 를 가져야 한다. 이와 같이 각 도메인마다 IP 주소가 다를 경우 POP 사용자들은 암호 인증시 "user@domain.com"의 형식이 아닌 "user" 형식을 사용할수 있다. vpopmail 설정시 --enable-large-site=y 은 무엇인가? --enable-large-site=y 는 mysql을 사용할때만(--enable-mysql=y) 해당되는 것이며, 차이점은 --enable-large-site=y 의 경우 도메인마다 각기 다른 db 테이블을 생성하게 된다. 기본적으로는 한개의 테이블에서 모든 도메인과 이메일 계정을 관리한다. vpopmail의 제작처인 inter7.com 의 설명에 의하면 이 옵션은 소수의 도메인에 매우 많은 수의 이메일 계정을 가지고 있을때 이 옵션을 권장한다. 하지만 반대로 매우 많은 수의 도메인에 소수의 이메일 계정이 있다면 이것은 좋지 않은 옵션이다. qmail을 rpm으로 설치했을 경우 주의점! qmail의 rpm 패키지중 어떤 것들은 cron job으로 주기적으로 /var/qmail/users/assign 을 /etc/passwd를 참조하여 갱신하는 경우가 있다. 이것은 vpopmail의 설정을 모두 바꾸어 버리므로, 해당 cron job을 지우고, vpopmail과 관련된 모든 가상 도메인, 설정파일들을 재 설치 해야 한다. CDB에서 MySQL 로의 전환 mysql을 사용하지 않고 vpopmail로 도메인, 유저들을 관리하고 있다가 vpopmail+mysql로의 전환을 하려 한다면, 메일 계정을 sql db로 변환 해주어야 한다. 변환 방법은 ./vconvert -c -s 로 해주면 된다. 이 명령은 시스템에 있는 모든 가상 도메인과 유저들을 하나의 테이블로 변환 해준다. 만약 각각의 테이블로 변환 하려 한다면, ./vconvert -c -s 도메인1 도메인2 ... 와 같이 해준다. NFS file locking 문제점 vpopmail 의 디렉토리가 NFS 파일 시스템상에 위치하며, 그 NFS 서버가 user level NFS 서버를 사용하고 있다면, file locking 문제가 발생한다고 한다. 이것은 최신 커널에 포함되어 있는 kernel-level NFS, 즉 knfsd를 사용하면 해결된다고 한다. oracle, sybase 를 사용한다면 vpopmail 은 mysql 이외에 oracle, sybase 같은 db와 사용이 가능하다. 오라클 사용자들은 voracle.h 을 수정하여 서비스, 유저, 암호등을 설정한후 proc voracle.pc 를 실행시켜 준다. sybase 사용자들은 vsybase.h 에 서버, 유저, 암호, app 정보를 수정, 컴파일 한다. sqwebmail 을 이용한 웹 메일 서비스 지금 까지 설치한 시스템에 역시 http://www.inter7.com 에서 배포하는 sqwebmail 을 설치하면 바로 웹 메일 서비스를 해줄수 있다. 하지만 이 프로그램은 아직 한글화가 되어 있지 않으므로 한글 문제는 각자 해결해야 한다. imap imap 을 사용하려 한다면 courier-imap을 사용하면 된다. 최신 버젼의 courier-imap은 vpopmail 이 설치되어 있는 시스템이라면 자동으로 해당 모듈이 첨가되므로, 별다른 설정없이 사용할수 있다. Qmail 서버 속도 향상 시키기 개인적으로 권장하지는 않지만... 만약 자신의 Qmail smtp 서버가 느리다고 생각된다면 다음과 같이 할수 있다. 기본적으로 tcpserver는 사용되어지는 모든 ip 주소의 DNS 와 ident 를 체크하게 되어있다. tcpserver -H -R 를 사용하면 체크하지 않게 되므로 속도 향상을 볼수 있다. 글을 마치며 정보는 자유롭게 공유되면서 그 가치를 더하게 됩니다. 그리고 그 가치는 돈이 아닙니다. 나누어 가지는 순수함, 기쁨이겠지요. qmail 예찬 나는 qmail guru가 아니다. 하지만, 나에게 그리고 나에게 qmail 설치를 부탁 한 사람들에게 qmail 은 많은 일을 가능하게 해주었다. qmail 은 정말 뛰어난 성능을 가지며, 안전하며, 매우 유연한 MTA 이라는 것을 여러분은 알게될것이다. 수정, 보충할 것이 있다면 이 문서에 수정, 보충할것이 있다면 eunjea@kldp.org 로 (제목에 [qmail] 을 넣어서), 하지만 qmail 과 관련된 개인적인 이메일 질문에는 답하지 않을것이다. 러시아, 모스크바에서 임은재. p.s 러시아에 산다고 자꾸 거기 춥지 않냐고 물어보시는 분들이 많은데요. 사실 제가 살고 있는 모스크바는 시베리아가 아닙니다. ;-) 겨울에 서울보다 약간 더 춥습니다. 그리고 나머지 계절을 비슷합니다.