1、qmailの仕組み
a、sendmailが、メッセージを単一のファイルに結合して全ユーザーが共通のディレクトリを使用するmbox形式であるのに対し、 qmailは各ユーザーのホームディレクトリに1つのメッセージを1ファイルとして保存するMaildir形式である
b、sendmailではメール配送にかかわる処理を1つのプロセスで実行しているのに対し、qmailではメール配送にかかわる処理を複数のプログラムに分割している
2、ファイルの準備
qmail-1.03.tar.gz
ftp://ftp.eu.uu.net/pub/unix/mail/qmail/qmail-1.03.tar.gz
ucspi-tcp-0.88.tar.gz
http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
qmail-1.03.errno.patch
http://qmail.org/moni.csi.hu/pub/glibc-2.3.1/qmail-1.03.errno.patch
qmail-date-localtime.patch
http://www.ksknet.net/sample/qmail-date-localtime.patch
ucspi-tcp-0.88.errno.patch
http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/ucspi-tcp-0.88.errno.patch
3、qmailのインストール
#グループの作成
/usr/sbin/groupadd -g 901 nofiles
/usr/sbin/groupadd -g 900 qmail
#ディレクトリの作成
mkdir /var/qmail
mkdir /var/qmail/alias
chmod -R 755 /var/qmail
chgrp -R qmail /var/qmail
#ユーザの作成
/usr/sbin/useradd -u 900 -g 901 -s /bin/true -d /var/qmail/alias alias
/usr/sbin/useradd -u 901 -g 901 -s /bin/true -d /var/qmail qmaild
/usr/sbin/useradd -u 902 -g 901 -s /bin/true -d /var/qmail qmaill
/usr/sbin/useradd -u 903 -g 901 -s /bin/true -d /var/qmail qmailp
/usr/sbin/useradd -u 904 -g 900 -s /bin/true -d /var/qmail qmailq
/usr/sbin/useradd -u 905 -g 900 -s /bin/true -d /var/qmail qmailr
/usr/sbin/useradd -u 906 -g 900 -s /bin/true -d /var/qmail qmails
#qmailコンパイル
su -
cp <ソフトウェアのファイル> /usr/local/src/qmail
cd /usr/local/src/qmail/
tar -zxvf qmail-1.03.tar.gz -C /usr/local/src/
cd /usr/local/src/qmail-1.03/
#dns.c修正
vi dns.c
変更前
static union { HEADER hdr; unsigned char buf[PACKETSZ]; } response;
↓
変更後
static union { HEADER hdr; unsigned char buf[65536]; } response;
patch -p1 < ../qmail/qmail-date-localtime.patch
patch -p1 < ../qmail/qmail-1.03.errno.patch
#qmailのビルド
make setup check
4、sendmail停止設定
#sendmailが起動しているか否かの確認
ps ax | grep sendmail
#sendmailが自動起動設定になっているか否かの確認
chkconfig --list | grep sendmail
#sendmailの停止及び、自動起動設定のoff
su -
/etc/rc.d/init.d/sendmail stop
chkconfig --level 2345 sendmail off
#ファイル名称:defaultdomain
内容:example.jp
説明:toヘッダなどにドメイン名が省略された場合、補完されるドメイン名
#ファイル名称:locals
内容:localhost
localhost.example.jp
host.example.jp
example.jp
説明:toヘッダなどにドメイン名が省略された場合、補完されるドメイン名
#ファイル名称:rcpthosts
内容:localhost
example.jp
.example.jp
説明:受信するホスト名・ドメイン名:qmail-smtpdが利用
#ファイル名称:me
内容:host.example.jp
説明:自サーバのFQDN
#ファイル名称:plusdomain
内容:example.jp
説明:ドメイン部が+で終わっている場合に付加されるドメイン。「user@host+」なら
「[email protected]」と置換される(qmal-injectが利用)
5、tcpserverのインストール
#tcpserverのビルド
su -
cd /usr/local/src/qmail
tar -zxvf ucspi-tcp-0.88.tar.gz -C /usr/local/src/
cd /usr/local/src/ucspi-tcp-0.88/
patch -p1 < ../qmail/ucspi-tcp-0.88.errno.patch
make setup check
#TCPルールデータベースの設定
mkdir /etc/tcpserver
vi /etc/tcpserver/tcp.smtp
cat /etc/tcpserver/tcp.smtp | /usr/local/bin/tcprules
/etc/tcpserver/tcp.smtp.cdb /etc/tcpserver/tcp.smtp.old
6、qmailの自動起動
#起動ファイルを作成する
cp /var/qmail/boot/home /var/qmail/rc
vi /var/qmail/rc
# vi等のエディタで「/Mailbox」を「./Maildir/」に修正する
#rootユーザーで以下のファイルを作成する
/etc/rc.d/init.d/qmail
--------------------------------------------------------------------------------
#!/bin/sh
# chkconfig: 345 81 81
# description: qmail SMTP service.
# processname: qmail-send
# Source function library.
. /etc/rc.d/init.d/functions
PATH=$PATH:/var/qmail/bin
export PATH
RETVAL=0
[ -f /var/qmail/bin/qmail-start ] || exit 0
case "$1" in
start)
echo -n "Starting qmail:"
daemon /var/qmail/rc
RETVAL=$?
echo
[ $RETVAL -eq 0 ]
;;
stop)
echo -n "Stopping qmail:"
killproc qmail-send
RETVAL=$?
echo
[ $RETVAL -eq 0 ]
;;
restart)
$0 stop
$0 start
;;
*)
echo -n "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
--------------------------------------------------------------------------------
#qmailの自動起動設定
chkconfig --level 345 qmail on
chkconfig --list | grep qmail
7、tcpserverの自動起動
#起動スクリプトの作成
vi /etc/tcpserver/rc
--------------------------------------------------------------------------------
#! /bin/sh
tcpserver -v -p -x /etc/tcpserver/tcp.smtp.cdb 0 smtp /var/qmail/bin/qmail-smtpd
--------------------------------------------------------------------------------
#自動起動スクリプトの作成
su-
vi /etc/rc.d/init.d/tcpserver
--------------------------------------------------------------------------------
#! /bin/sh
#
# chkconfig: 345 82 82
# description: tcpserver
# Source function library.
. /etc/rc.d/init.d/functions
RETVAL=0
# See how we were called.
case "$1" in
start)
echo -n "Starting tcpserver daemon: "
daemon /etc/rc.d/init.d/tcpserver_sub
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/tcpserver
;;
stop)
echo -n "Stopping tcpserver daemon: "
killproc tcpserver
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/tcpserver
;;
status)
status tcpserver
RETVAL=$?
;;
restart)
$0 stop
$0 start
RETVAL=$?
;;
*)
echo "Usage: tcpserver {start|stop|status|restart}"
exit 1
esac
exit $RETVAL
--------------------------------------------------------------------------------
CMD> chkconfig --level 345 tcpserver on
CMD> chkconfig --list | grep tcpserver