[웹서버] 웹개발 환경 리눅스 서버 [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

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.