|
|
|
|
|
▶ Qmail 설치 파일 받기
- http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
ftp://ftp.nfsi.pt/pub/qmail/rpms/patches/ucspi-tcp-0.88.errno.patch
ftp://ftp.nfsi.pt/pub/qmail/rpms/patches/daemontools-0.76.errno.patch
ftp://ftp.ip.pt/pub/qmail/moni.csi.hu/pub/glibc-2.3.1/qmail-1.03.errno.patch
http://q07.asadal.net/qmail-source.tar.gz
http://q07.asadal.net/qmail-ej-cocktail-10.tar.gz
http://q07.asadal.net/vpopmail-5.4.0.tar.gz
http://q07.asadal.net/courier-authlib-0.56.tar.bz2
http://q07.asadal.net/expect-5.38.0-88.i386.rpm
http://q07.asadal.net/courier-imap-2.1.1.tar.bz2
|
|
▶ 날짜 패치 (LINUX 7.1이상에서 문제가 되는 time.h에 대한 링크를 수정한다.)
- mv /usr/include/sys/time.h /usr/include/sys/time.h.ori
ln -s /usr/include/time.h/usr/include/sys/time.h
|
|
- 1. Ucspi-tcp 설치
cd /usr/local/src
tar zxvf qmail-source.tar.gz
tar zxvf ucspi-tcp-0.88.tar.gz
cd ucspi-tcp-0.88
patch -p1 < ../qmail_patch/ucspi-tcp-0.88.errno.patch
make && make setup check
cd /usr/local/src
- 2. Daemontools 설치
mkdir /package
cp daemontools-0.76.tar.gz /package/
cd /package/
tar zxvf daemontools-0.76.tar.gz
cd admin/daemontools-0.76/
patch -p1 < /usr/local/src/qmail_patch/daemontools-0.76.errno.patch
package/install
- 3. Qmail 설치
(1) 사용자와 그룹 추가
groupadd nofiles
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
useradd -g nofiles -d /var/qmail/alias alias
(2) Qmail 설치
tar zxvf qmail-ej-cocktail-10.tar.gz
tar zxvf qmail-1.03.tar.gz; cd qmail-1.03
patch -p1 < ../qmail_patch/qmail-1.03.errno.patch
patch -p1 < ../qmail-ej-cocktail-10/qmail-ej-cocktail-10-no-starttls.patch
make; make setup check
./config-fast 호스트명
(3) Qmail 필요한 디렉터리 생성
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
- 4. Qmail 스크립트 파일 생성
(1) vi /var/qmail/rc(===안에 있는 파일을 저장)
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail
(2) vi /var/qmail/supervise/qmail-send/run
#!/bin/sh
exec /var/qmail/rc
(3) vi /var/qmail/supervise/qmail-send/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t -n100 -s1000000 /var/log/qmail/qmail
(4) vi /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh
Q_UID=`id -u vpopmail`
Q_GID=`id -g vpopmail`
exec /usr/local/bin/softlimit -m 52000000 \
/usr/local/bin/tcpserver -vRHl0 -x/home/vpopmail/etc/tcp.smtp.cdb -c 100 \
-u $Q_UID -g $Q_GID 0 25 /var/qmail/bin/qmail-smtpd 호스트명 \
/home/vpopmail/bin/vchkpw /bin/true 2>&1
(5) vi /var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t -n100 -s1000000 /var/log/qmail/smtpd
(6) 스크립트 파일 퍼미션 변경
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
(7) 로그 디렉터리 생성과 퍼미션 설정
mkdir -p /var/log/qmail/smtpd
chown qmaill /var/log/qmail /var/log/qmail/smtpd
(8) 앨리어스 설정
cd ~alias
echo root > .qmail-mailer-daemon
echo root > .qmail-postmaster
echo root > .qmail-root
chmod 644 .qmail-mailer-daemon .qmail-postmaster .qmail-root
(9) Qmail 시작, 종료 스크립트
vi /etc/rc.d/init.d/qmail
#!/bin/sh
# For Red Hat chkconfig
# chkconfig: - 80 30
# description: the qmail MTA
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH
case "$1" in
start)
echo "Starting qmail"
if [ -e /service/qmail-send ] ; then
if svok /service/qmail-send ; then
svc -u /service/qmail-send
else
echo qmail-send supervise not running
fi
else
ln -s /var/qmail/supervise/qmail-send /service/
fi
if [ -e /service/qmail-smtpd ] ; then
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd
else
echo qmail-smtpd supervise not running
fi
else
ln -s /var/qmail/supervise/qmail-smtpd /service/
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;
stop)
echo "Stopping qmail..."
echo " qmail-smtpd"
svc -dx /service/qmail-smtpd /service/qmail-smtpd/log
rm -f /service/qmail-smtpd
echo " qmail-send"
svc -dx /service/qmail-send /service/qmail-send/log
rm -f /service/qmail-send
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
qmail-qstat
;;
doqueue|alrm|flush)
echo "Flushing timeout table and sending ALRM signal to qmail-send."
/var/qmail/bin/qmail-tcpok
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /service/qmail-send
;;
pause)
echo "Pausing qmail-send"
svc -p /service/qmail-send
echo "Pausing qmail-smtpd"
svc -p /service/qmail-smtpd
;;
cont)
echo "Continuing qmail-send"
svc -c /service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /service/qmail-smtpd
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd
;;
cdb)
tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp<
/home/vpopmail/etc/tcp.smtp
chmod 644 /home/vpopmail/etc/tcp.smtp.cdb
echo "Reloaded /home/vpopmail/etc/tcp.smtp."
;;
help)
cat <
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 forsmtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- schedules queued messages for immediate delivery
reload -- sends qmail-send HUP, rereading locals and virtualdomains
queue -- shows status of queue
alrm -- same as doqueue
flush -- same as doqueue
hup -- same as reload
HELP
;;
*)
echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
exit 1
;;
esac
exit 0
(10) 권한 변경
chmod 700 /etc/rc.d/init.d/qmail
(11) 센드메일 제거와 링크
mv /usr/lib/sendmail /usr/lib/sendmail.old
mv /usr/sbin/sendmail /usr/sbin/sendmail.old
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
- 5. VPOPMAIL 설치(uid 700, gid 2100)
(1) 환경 설정
groupadd -g 2100 vchkpw
useradd -u 700 -g vchkpw vpopmail
mkdir ~vpopmail/etc
echo "localhost|0|vpopmailuser|12345|vpopmail" > ~vpopmail/etc/vpopmail.mysql
echo "localhost|0|vpopmailuser|12345|vpopmail" >> ~vpopmail/etc/vpopmail.mysql
chown vpopmail.vchkpw ~vpopmail/etc/vpopmail.mysql
chmod 640 ~vpopmail/etc/vpopmail.mysql
echo "서버명" > /home/vpopmail/etc/defaultdomain
ln -s /usr/local/mysql/lib/mysql/ /usr/lib/mysql
ln -s /usr/local/mysql/include/mysql/ /usr/include/mysql
(2) 디비 설정(dbuser vpopmailuser, dbpasswd 12345, dbname vpopmail)
mysql -p
CREATE DATABASE vpopmail;
use vpopmail;
grant CREATE,INSERT,SELECT,DELETE,UPDATE,DROP on vpopmail.* to vpopmailuser;
grant CREATE,INSERT,SELECT,DELETE,UPDATE,DROP on vpopmail.* to vpopmailuser@localhost;
set password for 'vpopmailuser'@'%'=password('12345');
set password for 'vpopmailuser'@'localhost'=password('12345');
flush privileges;
(3) VPOPMAIL 설치하기(32비트 서버)
cd /usr/local/src/
tar zxvf vpopmail-5.4.0.tar.gz
cd vpopmail-5.4.0
./configure \
--enable-roaming-users=y --enable-logging=p --enable-tcprules-prog=/usr/local/bin/tcprules \
--enable-relay-clear-minutes=15 --enable-auth-module=mysql --enable-mysql-logging=y \
--enable-sqlincdir=/usr/local/mysql/include/mysql --enable-sqllibdir=/usr/local/mysql/lib/mysql \
--enable-logging=y --enable-mysql-replication=y --enable-valias=y --enable-many-domains=n
--enable-domainquotas=y
make
make install-strip
(4) VPOPMAIL 설치하기(64비트 전용)
cd /usr/local/src/
tar zxvf vpopmail-5.4.13.tar.gz
cd vpopmail-5.4.13
./configure CFLAGS=-fPIC --enable-roaming-users=y --enable-logging=p
--enable-tcprules-prog=/usr/local/bin/tcprules --enable-relay-clear-minutes=15
--enable-auth-module=mysql --enable-sql-logging --enable-sqlincdir=/usr/local/mysql/include/mysql
--enable-sqllibdir=/usr/local/mysql/lib/mysql --enable-logging=y --enable-mysql-replication=y
--enable-valias=y --enable-many-domains=n
[root@sunnii vpopmail-5.4.13]# make
[root@sunnii vpopmail-5.4.13]# make install-strip
(5) smtp 인증 파일 생성
# vi /home/vpopmail/etc/tcp.smtp(서버 아이피 입력)
192.168.0.1:allow,RELAYCLIENT=""
127.0.0.:allow,RELAYCLIENT=""
:allow
(6) tcp.smtp.cdb 파일 갱신
tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp <
/home/vpopmail/etc/tcp.smtp
/home/vpopmail/bin/clearopensmtp
* 실행시 에러 발생할 때에 mysql 라이브러리 경로 추가
/usr/local/mysql/lib/mysql 추가후 ldconfig 명령어 실행
(7) VPOP 시동 파일 생성
mkdir -p /var/qmail/supervise/vpop/log
vi /var/qmail/supervise/vpop/run
#!/bin/sh
VPOP_UID=`id -u vpopmail`
VPOP_GID=`id -g vpopmail`
exec /usr/local/bin/softlimit -m 50000000 \
tcpserver -vRHl 0 -u $VPOP_UID -g $VPOP_GID 0 110 \
/var/qmail/bin/qmail-popup 호스트명 \
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1
vi /var/qmail/supervise/vpop/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t -n100 -s1000000 /var/log/qmail/pop3
chmod 755 /var/qmail/supervise/vpop/run
chmod 755 /var/qmail/supervise/vpop/log/run
ln -s /var/qmail/supervise/vpop /service
- 6. courier-imap 설치
(1) courier-authlib 설치
cd /usr/local/src/
tar xvfpj courier-authlib-0.56.tar.bz2
cd courier-authlib-0.56
./configure --with-redhat;make;make install
cd /usr/local/src/
(2) .expect, tcl 팩키지 확인. 없으면 설치한다.
rpm -qa |grep tcl
rpm -qa |grep expect
- rpm으로 설치
rpm -Uvh tcl-8.3.5-88.i386.rpm
rpm -Uvh expect-5.38.0-88.i386.rpm
- yum으로 설치
yum install tcl
yum install expect
(3) 설치는 root가 아닌 일반 계정으로 한다.
gcc, make, g++, find 퍼미션이 막혀있으면 변경해야한다.
chmod 777 -R /home/vpopmail/lib/
chmod 755 /home/vpopmail
chmod 755 /usr/bin/gcc /usr/bin/make /usr/bin/g++ /usr/bin/find
chmod 777 /usr/local/src/courier-imap-2.1.1.tar.bz2
su vpopmail
(4) courier-imap 설치
cd /usr/local/src/
tar xvjfp courier-imap-2.1.1.tar.bz2 -C /var/tmp
cd /var/tmp/courier-imap-2.1.1/
CFLAGS="-DHAVE_OPEN_SMTP_RELAY"; export CFLAGS
env LIBS="-L/usr/lib/mysql -lmysqlclient -lz"
./configure \
--prefix=/usr \
--datadir=/usr/share/courier-imap \
--sysconfdir=/etc/courier-imap \
--libexecdir=/usr/libexec/courier-imap \
--localstatedir=/var \
--mandir=/usr/share/man \
--with-redhat \
--without-ipv6 \
--enable-unicode \
--with-authvchkpw \
--without-authdaemon \
--without-authmysql \
--without-authldap \
--without-authdaemon \
--without-authpgsql i686
make
make check
- 다시 root 계정으로 설치 완료한다.
exit
cd /var/tmp/courier-imap-2.1.1
make install-strip
make install-configure
- gcc, make, g++, find 퍼미션 원래대로
chmod 100 /usr/bin/gcc /usr/bin/make /usr/bin/g++ /usr/bin/find
(5) vpopmail 퍼미션 원래대로 수정
chmod 700 /home/vpopmail
chmod 700 /home/vpopmail/lib/
chmod 600 /home/vpopmail/lib/libvpopmail.a
(6) 구동파일 만들기
cp courier-imap.sysvinit /etc/init.d/courier-imap
chmod 700 /etc/init.d/courier-imap
vi /etc/courier-imap/imapd
359줄 IMAPDSTART의 값을 ‘NO’->‘YES’로 변경한다. 즉, IMAPDSTART=YES
(7) 스크립트 파일 수정 및 실행
1) 스크립트 파일 수정
# vi /usr/libexec/courier-imap/imapd.rc
46번째 줄에 다음을 추가합니다.
-stderrlogger=/usr/libexec/courier-imap/courierlogger \
이부분을 아래와 같이 변경
-stderrlogger=/usr/libexec/courier-imap/courierlogger -user=vpopmail -group=vchkpw \
# vi /usr/libexec/courier-imap/pop3d.rc
39번째 줄에 다음을 추가합니다.
-stderrlogger=/usr/libexec/courier-imap/courierlogger \
이부분을 아래와 같이 변경
-stderrlogger=/usr/libexec/courier-imap/courierlogger -user=vpopmail -group=vchkpw \
2) 스크립트 실행
chmod 755 /usr/libexec/courier-imap/imapd.rc
chmod 755 /usr/libexec/courier-imap/pop3d.rc
/etc/rc.d/init.d/courier-imap start
3) 기타 권한 설정
chmod 755 /var/qmail/rc
chmod 700 /etc/rc.d/init.d/qmail
- 7. 데몬 실행
/etc/rc.d/init.d/xinetd restart
/etc/rc.d/init.d/courier-imap start
/etc/rc.d/init.d/qmail start
- 8. 기타 참고 사항
(1) 원격에서 로컬로 메일을 받는 경우
qmail-smtpd : 다른 서버의 SMTP에서 메시지를 받는다. 로컬로 받아들일 주소인지 (rcpthosts)확인한다.
qmail-queue : 디스크에 메시지를 저장하고 qmail-send 호출한다.
qmail-send : 겉봉에 쓰인 수신인 주소를 보고 로컬로 배달할 것인지 판단한다.
qmail-lspawn : 편지함 이름 및 해당 사용자의 설정을 파악하고, qmail-local을 실행한다.
qmail-local : 해당 편지함에 메시지를 기록한다.
(2) 로컬에서 원격으로 메일을 보내는 경우
qmail-inject : 누가 누구에게 보내는 것인지 겉봉에 기록한다.
qmail-queue : 디스크에 메시지를 저장하고 qmail-send 호출한다.
qmail-send : 겉봉에 기록된 수신인이 누구인지 파악해 로컬로 전달할지 원격서버로 전달할지 결정한다.
qmail-rspawn : 외부에서 접속해서 메일을 보낼 때 이용한다.
qmail-remote : 원격서버를 DNS에서 찾아서 SMTP로 연결한다.
(3) 큐메일 서버에서 25, 110번 데몬이 안 뜰 때, 아래 에러가 뜰 때tcpserver: fatal: temporarily unable to figure out IP address for 0.0.0.0: file does not existtouch /etc/dnsrewrite
(4) qmail-smtpd가 제대로 작동하지 않고 연결이 즉시 종료될 때(25번 포트 떠 있는데 접근 시 바로 튕길 때)
- qmail-smtpd 구동 스크립트 (/var/qmail/supervise/qmail-smtpd/run)에 사용한 리소스 제한값 (softlimit -m)을 바꿔봅니다. 예를 들어 2000000 였다면 7340032 정도록 올려 봅니다.
- qmail-smtpd 구동 스크립트에서 tcpserver 옵션중 tcprules 파일을 사용하고 있다면 (예: -x /etc/tcp.smtp.cdb ) 이 파일이 읽을 수 있는 권한인지 확인해 봅니 다.
- /var/qmail/control 파일을 다른 걸로 바꾼다.
(5) maillog에 qmail-remote_crashed 뜰 때
qmail-remote_crashed./I'm_not_going_to_try_again;_this_message_has_been_in_the_queue_too_long./qmail- remote가 깨진 것이다. qmail만 다시 설치하면 된다.
qmail 설치 경로로 가서 make setup qmail
|
|
|
|
|