[웹서버] 웹개발 환경 리눅스 서버 [4] – 웹 메일개발환경
=================================================
웹 메일 개발 환경 서버
=================================================
—————————————————————————–
본 문서의 저작권은 서진우 님에게 있습니다. 무단 복사나 배포는 허용지 않습니다.
2000 년 11 월 9 일 .
—————————————————————————–
1. 개 요
웹메일을 사용하기 위한 기본적으로 설정이 되어있어야 할 웹메일 시스템 설정에
관한 문서입니? 각 부분의 설명은 리눅스를 어느정도 다루실줄 아는분에 한해
설명을 했으며 기타 자세한 부분은 각 프로그램별 홈페이지를 참조해 주시기
바랍니다. 아직 웹메일에 대한 부분은 완성전이므로 웹메일에 대한 설치가이드는
나중에 작성하여 올리도록 하겠습니다.
2. 설치준비
설치환경 : Alzza Linux 6.2
설치프로그램 : RPM보다 소스를 사용할 것을 권합니다. 나중에 RPM형태의 배포판을
작성하도록 하겠습니다.
++ Apache_1.3.9.tar.Z
++ Php-3.0.15.tar.gz
++ Mysql-3.22.25.tar.gz
++ Qmail-1.03.tar.gz
++ Imap-4.7b.tar.Z
++ Daemontools-0.53.tgz
++ Rblsmtpd-0.70.tar.gz
++ Ucspi-tcp-0.84.tar.gz
++ Checkpassword-0.81.tar.gz
패치프로그램 : qmail과 IMAP에서 MySQL지원과 IMAP에서 Maildir지원을 위한 패치
파일들 입니다
++ qmail-1.03-mysql-0.6.6.patch.gz
++ checkpassword-0.81-mysql-0.6.6.patch.gz
++ imap-4.7b-patch.tar.gz
qmail설치에 대한 내용은 큐메일 한글홈페이지에 잘 나와있습니다.
저는 qmail에 MySQL 패치를 적용하고설정하는 부분에 대해 쭉 따라하시면 설정이
되도록 명령위로 간단하게 설명을 넣어 말씀드리도록 하겠습니다.
[qmail에 MySQL패치 적용]
[qmai-1.03]# patch -p1 < ../patch/qmail-1.03-mysql-0.6.6.patch
시스템 계정뿐 아니라 가상계정 사용자도 사용가능하도록 패치를 적용합니다. 사용자
계정은 MySQL안의 테이블에서 인증됩니다.
[qmail 설치]
[qmai-1.03]# mkdir /var/qmail
다음은 qmail 유저와 그룹을 등록시켜 줍니다.
일일이 손으로 하지 마시고 아래와 같이 복사를 하신후user.sh파일을 edit합니다
다른 부분은 다 지우고 LINUX부분 만 남겨두고 앞에붙은 주석 #을 제거합니다
[qmai-1.03]# cp INSTALL.ids user.sh
[qmai-1.03]# sh user.sh
이제 큐메일을 컴파일하고 설치합니다
[root@alang qmail-1.03]# make setup check
컴파일이 끝나면 DNS 설정을 큐메일에 적용 시켜야 한다.
이 일을 쉽게 해주는 스크립트가 두어개 있습니다.
DNS가 제대로 설정되었다면, 다음 스크립트를 실행하기만 하면 됩니다.
[root@alang qmail-1.03]# ./config
어떤 이유로 config가 DNS에서 hostname을 찾지 못하면, config-fast script를
실행하셔야 합니다.
[root@alang qmail-1.03]#./config-fast 호스트네임.완전.경로
큐메일이 시스템에 설치되어서 가동될 준비가 되었습니다!
[ucspi-tcp 설치]
먼저번에 qmail, ucpsi-tcp, daemontools 타볼을 풀었습니다. 예제에서 그것들을
/usr/local/src/qmail에 풀었습니다. 자 ucpsi-tcp디렉토리로 옮깁시다.
[root@alang qmail-1.03]# cd /usr/local/src/qmail/ucspi-tcp-0.84
컴파일을 하세요.
[root@alang ucspi-tcp-0.88]# make
[root@alang ucspi-tcp-0.88]# make setup check
## daemontools를 설치합니다.
[root@alang ucspi-tcp-0.88]# cd /usr/local/src/qmail/daemontools-0.61
[root@alang ucspi-tcp-0.88]# make && make setup check
## 큐메일을 가동합니다.
/var/qmail/rc로 만드시고
[root@alang qmail]# vi rc
——————————————————————–
#!/bin/sh
# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages
# by default
exec env – PATH=”/var/qmail/bin:$PATH” \\
qmail-start “`cat /var/qmail/control/defaultdelivery`”
——————————————————————–
[root@alang qmail]# chmod 755 /var/qmail/rc
[root@alang qmail]# mkdir /var/log/qmail
각 계정 홈디렉토리에 큐메일이 저장되는 파일을 생성시켜준다.
[root@alang qmail]# /var/qmail/bin/maildirmake ~alang/Maildir/
기본 멜복스 형태를 고르시려면, 위의 테이블의 defaultdelivery 값을
/var/qmail/control/defaultdelivery에 적어넣으십시오.
예) 표준 큐메일 Mailbox 다음과 같이 해주시면 됩니다.
[root@alang qmail]# echo ./Maildir/ >/var/qmail/control/defaultdelivery
## 시스템 기동 파일
/var/qmail/rc 스크립트를 수동으로 실행하셔야 하면, 큐메일은 부분가동합니다.
하지만 시스템이 부팅할때 자동으로 가동되고, 시스템이 꺼질땐 자동으로 중지
하도록 관리 하여야 합니다.
이것은 startup/shutdown스크립트를 다음과 같이 작성하면 됩니다.
[root@alang qmail]# vi /etc/rc.d/init.d/qmail
——————————————————————–
#!/bin/sh
#
# Startup script for QMAIL service
#
# chkconfig: 345 85 15
# description: Apache is a World Wide Web server.It is used to serve \\
#HTML files and CGI.
# processname: qmail-send qmail-lspawn qmail-rspawn qmail-clean splogger
# pidfile:
# config: /var/qmail/control/*
# Source function library.
. /etc/rc.d/init.d/functions
# See how we were called.
case “$1” in
start)
echo -n “Starting qmail: ”
/bin/csh -fc ‘/var/qmail/rc&’
# /usr/local/bin/tcpserver -v -u 7770 -g 2108 0 smtp /var/qmail/bin/qmail-smtpd \\
# 2>&1 | /var/qmail/bin/splogger smtpd 3 &
echo
;;
stop)
echo -n “Shutting down qmail: ”
killproc qmail-send
killproc qmail-lspawn
killproc qmail-rspawn
killproc qmail-lspawn
killproc qmail-rspawn
killproc qmail-clean
killproc splogger
echo
;;
status)
status qmail-send
;;
restart)
$0 stop
$0 start
;;
reload)
echo -n “Reloading httpd: ”
killproc qmail-send -HUP
echo
;;
*)
echo “Usage: $0 {start|stop|restart|reload|status}”
exit 1
esac
exit 0
—————————————————————–
이 스크립트를 몇개의 rc디렉토리에 링크시키셔야 합니다.
[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc0.d/K30mail
[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc1.d/K30mail
[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc2.d/S80mail
[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc4.d/S80mail
[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc5.d/S80mail
[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc6.d/K80mail
다음으로 큐메일 서비스의 로그 디렉토리를 만드세요.
[root@alang qmail]# mkdir -p /var/qmail/supervise/qmail-send/log
[root@alang qmail]# mkdir -p /var/qmail/supervise/qmail-smtpd/log
[root@alang qmail]# chmod +t /var/qmail/supervise/qmail-send
[root@alang qmail]# chmod +t /var/qmail/supervise/qmail-smtpd
몇개의 스크립터를 작성합니다.
[root@alang qmail]# vi /var/qmail/supervise/qmail-send/run
—————————————————————–
#!/bin/sh
exec /var/qmail/rc
[root@alang qmail]# vi /var/qmail/supervise/qmail-send/log/run
——————————————————————
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
[root@alang qmail]# vi /var/qmail/supervise/qmail-smtpd/run
——————————————————————
#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
exec /usr/local/bin/softlimit -m 2000000 /usr/local/bin/tcpserver -v -p -x \\
/etc/tcp.smtp.cdb-u $QMAILDUID -g $NOFILESGID 0
smtp /var/qmail/bin/qmail-smtpd 2>&1
[root@alang qmail]# vi /var/qmail/supervise/qmail-smtpd/log/run
——————————————————————
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog
t /var/log/qmail/smtpd
run파일들에 실행가능을 부여합니다.
[root@alang qmail]# chmod 755 /var/qmail/supervise/qmail-send/run
[root@alang qmail]# chmod 755 /var/qmail/supervise/qmail-send/log/run
[root@alang qmail]# chmod 755 /var/qmail/supervise/qmail-smtpd/run
[root@alang qmail]# chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
그런 다음에, 로그디렉토리를 만듭니다.
[root@alang qmail]# mkdir -p /var/log/qmail/smtpd
[root@alang qmail]# chown qmaill /var/log/qmail /var/log/qmail/smtpd
기동스크립트에 실행권한을 부여하고, 실행경로에 있는 디렉토리로 링크합니다.
[root@alang qmail]# chmod 755 /etc/rc.d/init.d/qmail
[root@alang qmail]# ln -s /etc/rc.d/init.d/qmail /usr/local/sbin
로컬호스트가 SMTP를 통해서 멜을 삽입 (inject)하도록 합니다.
[root@alang qmail]# echo ‘127.:allow,RELAYCLIENT=””‘ >>/etc/tcp.smtp
[root@alang qmail]# echo ‘210.220.69.:allow,RELAYCLIENT=””‘
>>/etc/tcp.smtp
기존에 설치된 MTA를 멈추고 무력하게 합니다.
[root@alang qmail]# /etc/rc.d/init.d/sendmail stop
레드햇리눅스에서는 다음과 같이 해서 Sendmail을 제거합니다.
[root@alang qmail]# rpm -e –nodeps sendmail
끝으로, 기존의 /usr/lib/sendmail을 큐메일판으로 바꿉니다.
[root@alang qmail]# mv /usr/lib/sendmail /usr/lib/sendmail.old
[root@alang qmail]# mv /usr/sbin/sendmail /usr/sbin/sendmail.old
[root@alang qmail]# chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old
[root@alang qmail]# ln -s /var/qmail/bin/sendmail /usr/lib
[root@alang qmail]# ln -s /var/qmail/bin/sendmail /usr/sbin
끝단계는 시스템앨리어스를 두어개 만드는 것입니다.
[root@alang qmail]# echo alang > /var/qmail/alias/.qmail-root
[root@alang qmail]# echo alang > /var/qmail/alias/.qmail-postmaster
[root@alang qmail]# ln -s /var/qmail/alias/.qmail-postmaster \\
/var/qmail/alias/.qmail-mailer-daemon
[root@alang qmail]# chmod 644 /var/qmail/alias/.qmail-root
[root@alang qmail]# chmod 644 /var/qmail/alias/.qmail-postmaster
큐메일을 가동합니다.
[root@alang qmail]# /usr/local/sbin/qmail start
릴레이선택을 허용하기
대부분의 단일사용자와 소규모 서버는 릴레이를 완전히 금지할수 있지만,
분산된 사용자 공동체를지원하려면 사용자에게만은 릴레이용으로 서버를 이용하게
할 수 있는 방법이 필요합니다.
qmail-smtpd에게 rcpthosts 파일을 무시하도록 tcpserver를 써서 RELAYCLIENT
환경변수를 정하면 됩니다.
모든 사람들에게 릴레이를 허용할려면 /var/qmail/control 밑의 rcpthosts 파일을
제거 한다.
[root@alang qmail]# /usr/local/bin/tcprules /etc/tcp.smtp.cdb \\
/etc/tcp.smtp.tmp < /etc/tcp.smtp
[root@alang qmail]# /usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb \\
-u -g 0 smtp /var/qmail/bin/qmail-smtpd &
위의 두 명령어를 스크립터 명령어로 만들거나 환경설정부분에서 alias 시켜 놓으면
간편하게 사용할수가 있다.
[checkpassword에 MySQL패치 적용]
[checkpassword-0.81]# patch -p1 < ../patch/checkpassword-0.81-mysql-0.6.6.patch
pop3인증시 가상계정 사용자가 로그인 가능하도록 패치를 적용합니다.
가상 사용자 계정은 MySQL안의 테이블에서 인증됩니다
[checkpassword 설치]
[checkpassword-0.81]# make
[checkpassword-0.81]# make setup check
[checkpassword-0.81]# vi /etc/inetd.conf
아래와 같이 pop-3부분을 수정합니다.
pop-3 stream tcp nowait root /usr/sbin/tcpd /var/qmail/bin/qmail-popup \\
(domain_name) /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir
(한줄에 적어줍니다)
제대로 설치가 되었는지 확인을 합니다
# printf “아이디\\0패스워드\\0아무거나\\0” | /bin/checkpassword `which id`
3<&0
uid=101(alang) gid=100(users) groups=100(users)
위와 같은 결과가 나오면 제대로 설치가 된것입니다.
[qmail 설정]
/var/qmail/control/sqlserver 파일을 만듭니다. 이 파일은 가상계정 사용자를 위해
MySQL인증을 위해qmail에서 사용하는 파일입니다.
[qmai-1.03] vi /var/qmail/control/sqlserver
———————————————————————–
mysql_use yes
server localhost
login webmail
password webmail
db webmail
table users
check_host no
quota yes
위의 설정에 맞도록 MySQL에 설정을 해주셔야 합니다.
먼저 qmail이란 db를 하나 만듭니다.
[mysql-3.22.25]# mysqladmin create webmail
MySQL안에 webmail란 계정을 추가하고(user table) webmail 계정이 webmail db를
사용할 수 있도록 권한을줍니다(db table).
[mysql-3.22.25]# mysql -u root -p mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor.Commands end with ; or \\g.
Your MySQL connection id is 1 to server version: 3.22.32
Type ‘help’ for help.
mysql> insert into user values(‘localhost’,’webmail’,password(‘XXXXXX’),
->’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’N’,’Y’,’N’,’N’,’N’,’N’);
Query OK, 1 row affected (0.01 sec)
mysql> insert into db values (‘localhost’,’webmail’,’webmail’,
-> ‘Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’);
Query OK, 1 row affected (0.02 sec)
mysql> quit
[root@tt bin]# mysqladmin create webmail
Database “webmail” created.
[root@tt bin]# mysqladmin create reload
Database “reload” created.
이제 만들어진 계정(webmail)으로 로그인을 하여 위에 적었던 users란 페이블을
만듭니다.
[root@tt bin]# mysql -u webmail -p webmail
create table users (
id char(32) default ” not null,
crypt char(32) binary default ” not null,
passwd char(32) binary default ” not null,
uid int(10) unsigned default ‘65534’ not null,
gid int(10) unsigned default ‘65534’ not null,
shell char(100) binary default ” not null,
home char(100) binary default ” not null,
start_date date default ‘0000-00-00’ not null,
expire_date date default ‘3000-12-31’ not null,
active enum(‘Y’, ‘N’) default ‘Y’ not null,
quota_size int unsigned default 0 not null,
key id(id(10)),
key start_date(start_date),
key expire_date(expire_date),
key active(active)
);
insert into users(id, uid, gid, crypt, shell, home)
values (‘test’, 1000, 1000, encrypt(‘test’), ‘/bin/false’,’/home/webmail/test’);
[qmail 테스트]
qmail설정의 마지막 부분입니다. 이 부분이 제일 많이 에러가 걸리는 부분입니다.
많은 분들이qmail-getpw에서 가상게정을 제대로 인식못하는 경험을 하시는것 같습니다.
가상계정의 홈디렉토리를 만듭니다. qmail은 spool디렉토리를 사용하지 않고 사용자의
홈디렉토리를 이용하기 때문에 홈디렉토리는 꼭 있어야 합니다.
위의 insert문을 참조하여 설정을 하겠습니다.
사용자 홈디렉토리를 만듭니다.
# mkdir /home/webmail/test
qmail에서 제공하는 maildirmake란 유틸리티를 이용하여 Maildir을 사용자홈에 만듭니다.
# /var/qmail/bin/maildirmake /home/webmail/test/Maildir
# chown -R 1000 /home/webmail/test
# chgrp -R 1000 /home/webmail/test
# echo “./Maildir/” > /home/webmail/test/.qmail
# chown -R 1000.1000 /home/webmail/test/.qmail
이제 qmail에 대한 설정은 모두 끝났습니다. 제대로 작동을 하는지 확인합니다.
# /var/qmail/bin/qmail-getpw test localhost
위와 같은 명령을 내렸을경우 test10001000/home/webmail/test0 이런식으로 결과가
나오면 성공입니다. 만일alias…. 이런식으로 나오면 실패한 것이니 설정을 다시
봐 주셔야합니다.
성공을 했다면 메일을 보내보겠습니다.
# echo to:test | /var/qmail/bin/qmail-inject
/home/webmail/test/Maildir/new 밑에 어떤 파일이 하나 생겼다면 제대로 된것입니다.
마지막 pop3로그인 테스트만 성공하면 됩니다.
# telnet 0 110
Trying 210.220.69.169…
Connected to redbaron.
Escape character is ‘^]’.
+OK <6198.957003676 at
redbaron.kr.psi.net>
user test
+OK
pass test
+OK
quit
+OK
Connection closed by foreign host.
여기서 자동 계정 추가 스크립트를 적당한 디렉토리에 만들어 줍니다.
# vi mailadd
————————————————————-
#!/bin/bash
if [ test $1 | test $2 ]
then
echo “Not enough input”
echo “Please EnterID Password”
exit 1
else
echo “insert into users(id, uid, gid, crypt, shell, home) \\
values (‘$1’,1000,1000,encrypt(‘$2′),’/bin/false’,’/home/webmail/$1′);” > \\
webmailadd.sql
mysql -uwebmail -pwebmail webmail < webmailadd.sql
mkdir /home/webmail/$1
/var/qmail/bin/maildirmake /home/webmail/$1/Maildir
chown -R 1000 /home/webmail/$1
chgrp -R 1000 /home/webmail/$1
echo “./Maildir/” > /home/webmail/$1/.qmail
chown -R 1000.1000 /home/webmail/$1/.qmail
—————————————————————
실행 퍼미션을 주고 사용하면 됩니다.
# chmod 700 mailadd
예) mailadd <mail_id> <password>
3-4. IMAP
imap-4.7b-patch.tar.gz 은 imap 에 대해 mysql 과 Maildir 패치부분을 보안한
소스 입니다. 만일 일반 imap 프로그램을 설치시에는 반드시 패치를 시킨후
컴파일 해야 합니다. make slx 하시면 설치가 됩니다.
컴파일 후에 디렉토리를 다음 경로에 복사해 둡니다.
[imap-4.7b]# cp -r imap-4.7b /usr/local/imap
아래의 링크는 PHP컴파일시 필요합니다.
[imap-4.7b]# ln -s /usr/local/imap/c-client /usr/local/imap/include
[imap-4.7b]# ln -s /usr/local/imap/c-client /usr/local/imap/lib
[imap-4.7b]# cp /usr/local/imap/ipopd/ipop2d /usr/sbin
[imap-4.7b]# cp /usr/local/imap/ipopd/ipop3d /usr/sbin
[imap-4.7b]# cp /usr/local/imap/imapd/imapd /usr/sbin
이제 IMAP의 설치는 끝났습니다.
/etc/services와 /etc/inetd.conf에 등록을 하도록 하겠습니다.
# vi /etc/services
를 열어보시면 pop-2 pop-3 imap가 있습니다 주석으로 막혀있다면
이부분을 풀어줍니다.
# vi /etc/inetd.conf
마찬가지로 pop-2 pop-3 imap부분이 주석으로 막혀있다면 풀어줍니다.
qmil설치 수정했던 pop-3부분은 그대로 둡니다.
# killall -HUP inet
inetd를 다시 띄우고 IMAP가 제대로 작동을 하는지 확인합니다.
# telnet localhost 143
Trying 210.220.69.169…
Connected to redbaron.
Escape character is ‘^]’.
* OK redbaron IMAP4rev1 v12.264 server ready
위와 같은 메세지가 나온다면 제대로 설치가 된것입니다.
웹 메일 프로그램은 직접 선택하여 개발 하시길 바랍니다.
본 내용은 시스템 환경 구축에 중심을 맞추고 있습니다.
==========================================================
Qmail + Mysql 관련 Package 가 있는 곳 :
http://www.softagency.co.jp/mysql/qmail.en.html