[메일] 큐메일을 이용한 웹호스팅용 메일시스템 (아랑)
<<<<<< 큐메일을 이용한 웹호스팅 메일 시스템 구축 >>>>>>>
2001 년 3 월 28일 – 무천아랑
큐메일은 기존의 sendmail 을 대체하는 메일 전송 에이전트( MTA )로써 보다 안정하고
빠른 속도로 많이 알려져 있다. 하지만 어려운 설치 과정과 많은 설정파일때문에 일부
관리자들만이 사용하고 있다. 이런 큐메일에 몇가지 프로그램을 같이 사용하여 웹호스
팅용 메일 서버 패키지로 사용하고자 한다. 기존의 sendmail 에서 할수 없었던 많은
기능을 발휘할수 있을것이다.
1. 주요 기능
* 무한정(?) 도메인과 pop 메일 아이디를 발급할수 있다.
* 한개의 시스템 계정생성으로 모든 버츄얼 도메인,pop 계정을 만들수 있다.
( 불필요한 유저 생성을 막을수 있다. – 보안적인 측면에 유리 )
* 각 도메인 마다 메일 계정, 메일링 리스트의 한계를 설정할수 있다.
* 웹인터페이스로 메일 추가,삭제,메일링 및 각 도메인에 대한 메일 관리가 가능하다.
* 유저별 quota 설정이 가능하다.
* 각 도메인 관리자가 자기 도메인의 메일 계정 추가 삭제가 가능하다.
* 가상 메일 없이도 도메인 마다 똑같은 사용자 계정을 만들수 있다.
위의 내용은 웹호스팅용 메일 시스템으로 아주 유리한 기능들이다. 이밖에 다양한
기능들이 많이 있다.
2. 필요한 프로그램
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.8-1.tar.gz
ezmlm-0.53.tar.gz
ezmlm-idx-0.40.tar.gz
3. 설치
qmail 컴파일 설치
위 프로그램들을 모두 /usr/local/src/qmail 디렉토리 및에 옮겨두고 tar 를 푼다.
그리고 qmail 이 설치될 디렉토리를 만든다.
[root@linux qmail]# cd qmail-1.03
[root@linux qmail-1.03]# mkdir /var/qmail
INSTALL.ids 파일을 편집한다.(qmail 에 필요한 계정과 그룹들이다. 해당 OS에 맞추어
편집한다.)
[root@linux qmail-1.03]# vi 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
—————————————————–
[root@linux qmail-1.03]# sh INSTALL.ids
qmail 관련 계정,그룹이 생성되었는지 확인한다.
[root@linux qmail-1.03]# cat /etc/passwd
컴파일 한다.
[root@linux qmail-1.03]# make
[root@linux qmail-1.03]# make setup check
기본 /var/qmail/control 및의 설정 파일의 설정을 위해 다음을 실행한다.
[root@linux qmail-1.03]# ./config
만일 여기서 정상적으로 실행되지 않으면 직접적으로 설정을 실행하는 방법을
사용한다. ( 단 DNS 에 문제가 있을수도 있다. )
[root@linux qmail-1.03]# ./config-fast zzang911.net
qmail 을 위한 몇가지 부수적은 프로그램을 설치한다.
[root@linux qmail]# tar xzvf ucspi-tcp-0.88.tar.gz
[root@linux qmail]# cd ucspi-tcp-0.88
[root@linux ucspi-tcp-0.88]# make
[root@linux ucspi-tcp-0.88]# make setup check
및에도 똑같이 설치함
[root@linux qmail]# tar xzvf daemontools-0.70-man.tar.gz
[root@linux qmail]# tar xzvf rblsmtpd-0.70.tar.gz
autorespond 는 직접 컴파일 해야 한다.
[root@linux qmail]# tar xzvf autorespond-1.0.0.tar.gz
[root@linux qmail]# cd autorespond-1.0.0
[root@linux autorespond-1.0.0]# gcc -Wall -o autorespond autorespond.c
[root@linux autorespond-1.0.0]# cp autorespond /usr/local/bin/
모두 이상없이 설치가 되었다면 다시 qmail 을 위해 파일을 만든다.
[root@linux qmail]# vi /var/qmail/rc
—————————————————————-
#!/bin/sh
exec env – PATH=”/var/qmail/bin:$PATH” \\
qmail-start ./Maildir/ splogger qmail
—————————————————————-
[root@linux 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
/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 데몬이 메일을 중계할 주소를 적어주는 것이다.
211.201.133.135 은 당연히 설치할 서버의 주소로바꿔야 한다.
그외 메일을 중계 해줄 서버의 주소가 있다면 같은 형식으로 추가한다.
vi /etc/tcp.smtp
——————————————
127.0.0.1:allow,RELAYCLIENT=””
211.201.133.135: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 데몬의 부트 스크립트이다. /etc/rc.d/init.d/qmail 로 만들어준다.
vi /etc/rc.d/init.d/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
———————————————————————-
vpopmail 설치
vpopmail 은 가상 도메인 추가, 설정, pop 유저 설정과 pop3 데몬등의 기능을 한다.
컴파일과 설치
설치하기 전에 vpopmail 이 사용할 유저와 그룹을 만든다.
groupadd vchkpw
useradd -g vchkpw vpopmail
vpopmail 을 설치하자.
tar xzf vpopmail-4.9.tar.gz
cd vpopmail-4.9.8-1
MySQL 사용하지 않을 경우
설치시 몇가지 옵션이 있는데 자세한것은 vpopmail faq 를 읽어보도록.
보통 다음 옵션만 주고 컴파일 하면 된다.
./configure –enable-default-domain=zzang911.net
make
make install-strip
MySQL을 사용 할 경우
MySQL db를 사용하려 한다면, 컴파일 하기전에 먼저 vmysql.h 를 열어서
sql 서버를 억세스할수 있는 user와 암호등을 설정해 주어야 한다.
테이블을 생성/삭제 할수 있는 사용자 이여야하므로 보통 root 나 해당 유저로
./configure –enable-default-domain=zzang911.net –enable-mysql=y \\
–enable-sqlincdir=/usr/local/mysql/include/mysql \\
–enable-sqllibdir=/usr/local/mysql/lib/mysql
make
make install-strip
이때 –enable-large-site=n|y 옵션을 사용할수도 있는데 이것은, 디폴트로 vpopmail
은 모든도메인, 유저 정보를 한개의 테이블에서 관리한다. 만약 각각의 도메인에
많은 메일유저가있다면 y 로 설정하면, vpopmail은 도메인별로 테이블을 생성,유저
정보를 관리한다.
만약 sql 헤더파일이나 라이브러리를 찾지 못한다며 컴파일에 실패한다면,
–enable-sqlincdir= sql 헤더파일 경로. –enable-sqllibdir= sql 라이브러리
경로 등을 ./configure 할때 추가 해준다.
위의 예에서 zzang911.net 는 주 서버의 도메인 이름이다. 이것을 설정하면 주서버의
메일 계정도 모두 가상 도메인의 메일 계정과 동일하게 관리 할수 있다.
(이렇게 하는 것을 권장한다)
설치가 되었다면 ~vpopmail 안에는
bin
doc
domains
etc
include
lib
users
등의 디렉토리과 필요한 바이너리들이 생겼을 것이다.
pop3 데몬 시동 파일
vpopmail 의 pop3 데몬 시동 파일을 /etc/rc.d/init.d 에 만든다.
#!/bin/sh
env – PATH=”/var/qmail/bin:/usr/local/bin” \\
tcpserver 0 pop-3 /var/qmail/bin/qmail-popup zzang911.net \\
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
위와 같은 파일을 pops 등의 이름으로 만들고 실행퍼미션을 주고 부팅시 켜질수
있도록 한다. 방법은 밑에…
도메인, 메일 계정 추가하기
~vpopmail/bin 디렉토리 안에 가상 도메인 관리를 위한 바이너리들이 있는데
다음과 같은 기능을한다.
표 1. 각 바이너리들의 용도
vadddomain :
가상 도메인을 추가한다. postmaster 암호를 물어보는데 이것은 다음에
설치할 qmailadmin 웹 인터페이스에서 로그인 할때 물어볼 암호이다.
형식은 [ vadddomain 도메인명 ]
vdeldomain :
가상 도메인과 모든 유저를 삭제한다. vdeldomain 도메인명
vadduser :
pop 메일 유저 계정을 만든다. [ vadduser alang at zzang911.net ]
vdeluser :
pop 메일 유저 삭제. [ vdeluser alang at zzang911.net ]
vpasswd :
메일 유저의 암호 바꾸기 [ vpasswd alang at zzang911.net ]
vsetuserquota :
각 유저 별로 quota 설정을 할수 있다. [ vsetuserquota alang at zzang911.net 51200 ]
(단위는 byte 이다).
vpopbull :
서버에 설정되어 있는 모든 유저들에게 한번에 메일을 보낼때 유용하게 사용할수
있다.
이제 도메인을 추가하자. 위에서 주 도메인도 vpopmail에서 관리하기로 했다면
주 도메인과 메일 계정들도 추가해야 한다.
만약 주 도메인이 zzang911.net 이고, 추가할 가상 도메인이 zzang911.org,
zzang911.co.kr 라고 한다면 다음과 같이 한다
(추가하기 전에 가상 도메인들의 DNS MX 레코드의 IP주소가 주 서버로 되어있는지
확인 해보자).
vadddomain zzang911.net
vadddomain tru64unix.co.kr
재대로 설정파일이 변경이 되었는지 확인해 보자.
cat /var/qmail/contral/loacls
————————————————
localhost
주 도메인도 vpopmail이 관리하기로 했다면 /var/qmail/control/locals 파일의
내용은 localhost 만이 있어야 정상이다. 다른것이 있으면 지운다.
cat /var/qmail/contral/virtualdomains
———————————————–
zzang911.net:zzang911.net
tru64unix.co.kr:tru64unix.co.kr
cat /var/qmail/users/assign
———————————————–
+zzang911.net-:zzang911.net:515:510:/home/vpopmail/domains/zzang911.net:-::
+tru64unix.co.kr-:tru64unix.co.kr:515:510:~vpopmail/domains/tru64unix.co.kr:-::
sendmail 에서 qmail 로의 전환
모든 설정이 확실히 되었다고 생각이 들면 sendmail을 죽이고 qmail로 전환한다.
/etc/rc.d/init.d/sendmail stop : sendmail 죽인다.
이제 기존의 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
/etc/rc.d/init.d/qmail start : qmail 가동
/etc/rc.d/init.d/pops : pop 가동
일일이 위 두 데몬을 띄우기 싫으시면 하나의 qmailstart 라는 간단한 스크립트를
만들고 이것을 /etc/rc.d/rc.local 및에 추가하여 부팅때 마다 실행하도록 한다.
vi /etc/rc.d/init.d/qmailstart
———————————————–
/etc/rc.d/init.d/qmail start
/etc/rc.d/init.d/pops
이로써 MS 의 아웃룩이나 Netscape 의 메일메신져 에서 메일을 받아보실수가 있다.
여기서 주의 할것.
주 도메인 이외의 도메인 pop3 메일 계정 사용자들은 메일 클라이언트의
유저 이름을 my_id at babo2.com
과 같이 아이디@도메인명 으로 모두 써주어야
pop 로긴이 가능하다.
qmailadmin 설치
/usr/local/src/qmail 가서
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 xvzf 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
* qmailadmin 설치 팁..
만일 특정 멀티도메인으로 qmailamdin 을 설치하고자 할때의 예제이다.
여기서 전 vpopmail 계정에 qmailadmin 까지 합쳐서 관리하고자 한다.
그리고 mail.domain.com 이란 도메인으로 접속하고자 한다.
먼저 소스를 풀고 ..그 소스 디렉토리로 이동한다. 그런뒤…
# ./configure –enable-cgibindir=/home/vpopmail/www
–with-htmllibdir=/home/vpopmail/www
–with-htmldir=/home/vpopmail/www
–enable-cgipath=qmailadmin.cgi
# make
# make install-strip
일단 설치는 완료되었다..하지만 /home/vpopmail/www 로 가보면 qmailadmin
파일을 그냥 웹에서 띄울려면 여러가지 시스템 설정을 다시 해야한다..
그리고 보안에도 문제가 발생 할수 있다. 그러니…다음과 같이 하자..
# cd ~vpopmail/www
# mv qmailadmin qmailadmin.cgi
# ln -s qmailadmin.cgi index.cgi
그런뒤 웹페이지에서 http://mail.domain.com/index.cgi 로 접속하자..무사히
페이지가 뜨면 성공~~
이제 원하는 도메인과 postmaster의 암호를 넣으면 로그인해서 여러가지
설정을 편안하게 할수있다.
4. 관리 하기
도메인 추가후
qmail 과 vpopmail 이 돌아가고 있는 상태에서 vadddomain 으로 도메인을 추가했다면
/etc/rc.d/init.d/qmail reload 또는 kill -HUP 시그날을 qmail-send 에게 보내서
/var/qmail/user 설정 파일을 다시 읽도록 해야 한다.
알리아스와 포워드 계정
알리아스와 포워드 계정은 거의 비슷한 기능을 하는데 다른점은 알리아스는 이 서버
에 존재하는 메일 계정에 다른 이름을 여러게 설정하는 것이고, 포워드 계정은 도착
한 메일을 설정해 놓은 다른도메인의 메일 계정(들)로 보내는 것이다.
다음 설정 과정을 보면 이해가 쉬울것이다.
qmailadmin 에서는 쉽게 설정 할수 있겠고, 만약 qmailadmin 을 설치하지 않은 경우
다음과 같이 한다.
# 알리아스
silver 라는 팝 메일 계정이 존재하고, webmaster 라는 알리아스를 만드는 경우.
해당 도메인 디렉토리(~vpopmail/domains/도메인/)에 다음과 같은 내용의
.qmail-webmaster 파일을 만든다.
/home/vpopmail/domains/도메인/silver/Maildir/
이제 webmaster 로 오는 메일은 silver 가 받을 것이다.
# 포워드
silver 로 오는 메일을 babo at
kldp.org 라는 다른 도메인으로 포워딩 해줄때.
해당 도메인 디렉토리(~vpopmail/domains/도메인/)에 다음과 같은 내용의
.qmail-alang 파일을 만든다.
&alang at kobis.net
이제 이 도메인의 alang 으로 오는 메일들은 alang at kobis.net 로 보내질
것이다.
# 각 도메인마다 메일 계정, 메일링 리스트 수 한계 정하기
이것은 웹 호스팅 업체에서 qmailadmin 으로 각 유저들에게 사용중인 도메인의
메일 설정을 직접 하게 해줄때 매우 유용하게 쓰일수 있을것이다.
각 도메인마다 메일,메일링 리스트의 설정 한계를 줄수 있는데, 이것은
~vpopmail/domains/도메인/ 에 .qmailadmin-limits 파일을 만들어 주면 된다.
형식은 다음과같다.
maxpopaccounts X
maxaliases X
maxforwards X
maxmailinglists X
maxautoresponders X
X 는 해당 도메인이 사용할수 있는 최대한의 수를 넣어주면 되겠다.
# bounce 되는 메일에 메세지 넣기
해당 도메인으로 수신되는 메세지가 바운스 되는 경우가 있는데 보통, 팝 유저의
쿼타 용량이한도를 넘었거나, 유저가 존재하지 않을 경우이다.
다음과 같은 파일을 만들어 각 가상 도메인의 디렉토리에 넣어 놓으면 바운스 되는
메일들에포함되어 되돌려 지며 당신은 센스있는 관리자가 된다 🙂
.over-quota.msg 에는 메일 유저의 쿼타 용량이 초과 되었으므로 메일 수신을 할수
없다는메세지를.
.no-user.msg 에는 우리 도메인엔 그런 메일 계정 없지롱 하는 내용의 메세지를
넣어 두면 된다.
이 파일들이 없다면 vpopmail은 바운스되는 메일에 뻣뻣한 영문 메세지 만을 포함
시킨다.
2 Responses
1privateer
1ultimate