qmail 構築の為の覚書

## 参照URL ##
http://www.qmail.org/top.html
http://cr.yp.to/
http://www.jp.qmail.org/

## 利用パッケージ ##
qmail本体 qmail-1.03.tar.gz http://www.qmail.org/top.html
日時をローカル時にするパッチ qmail-date-localtime.patch ftp://ftp.nlc.net.au/pub/unix/mail/qmail/
POP3平文パスワード認証 checkpassword-0.90.tar.gz http://cr.yp.to/checkpwd.html
POP/APOPパスワード認証 checkpw-0.90.tar.gz http://checkpw.sourceforge.net/checkpw/
TCPサーバー ucspi-tcp-0.88.tar.gz http://cr.yp.to/ucspi-tcp.html
デーモンツール(中継制御で使う) daemontools-0.70.tar.gz http://untroubled.org/rpms/daemontools/
中継制御(POP before SMTPで使う) relay-ctrl-3.0.tar.gz http://untroubled.org/relay-ctrl/

## qmail のインストール ##

# tar xvfz qmail-1.03.tar.gz
# tar xvfz checkpw-0.90.tar.gz
# cd qmail-1.03/
# patch -p1 < ../qmail-date-localtime.patch
# patch -p1 < ../checkpw-0.90/qmail-popup-auth.patch

# mkdir /var/qmail
# groupadd -g 55 nofiles
# useradd -g nofiles -d /var/qmail/alias -s /bin/false -u 55 alias
# useradd -g nofiles -d /var/qmail -s /bin/false -u 56 qmaild
# useradd -g nofiles -d /var/qmail -s /bin/false -u 57 qmaill
# useradd -g nofiles -d /var/qmail -s /bin/false -u 58 qmailp
# groupadd -g 56 qmail
# useradd -g qmail -d /var/qmail -s /bin/false -u 59 qmailq
# useradd -g qmail -d /var/qmail -s /bin/false -u 60 qmailr
# useradd -g qmail -d /var/qmail -s /bin/false -u 61 qmails

# make
# make setup check

エラーが出るならconf-ccとconf-ldファイルを編集し、
gccを使用するなどする。

# ./config

> Your hostname is myhost.mydomain
> hard error
> Sorry, I couldn't find your host's canonical name in DNS.
となる時、
dns,/etc/hostsを調べる。
どーしても、分かんない時
# ./config-fast myhost.mydomain

## checkpw のインストール ##

# cd ../checkpw-0.90
conf-homeファイルを修正し/var/qmailにする。
# make
# make setup check

## checkpassword のインストール ##

# cd ..
# tar xvfz checkpassword-0.90.tar.gz
# cd checkpassword-0.90
conf-homeファイルを修正し/var/qmailにする。
# make
# make setup check

## ucspi-tcp のインストール ##

# cd ..
# tar xvfz ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88/
# make
# make setup check

## daemontools のインストール ##

# cd ..
# tar xvfz daemontools-0.70.tar.gz
# cd daemontools-0.70
# make
# make setup check 
"make: *** [tai64nlocal.o] エラー 1"などのエラーが出るなら、
tai64nlocal.c の2行目を、
"<sys/time.h>"から"<time.h>"に変更してみる。

## relay-ctrl のインストール ##

POP before SMTP 用

# cd ..
# tar xvfz relay-ctrl-3.0.tar.gz
# cd relay-ctrl-3.0 
conf-binファイルを修正し/var/qmail/binにする。
conf-manファイルを修正し/var/qmail/manにする。
# make
# ./installer

# cd /var/qmail
# chmod u+s bin/relay-ctrl-allow
# mkdir relay-ctrl
# mkdir etc/relay-ctrl
# echo "/var/qmail/relay-ctrl" > etc/relay-ctrl/RELAY_CTRL_DIR
# echo "900" > etc/relay-ctrl/RELAY_CTRL_EXPIRY

# crontab -e
* * * * * /usr/local/bin/envdir /var/qmail/etc/relay-ctrl 
/var/qmail/bin/relay-ctrl-age
一行に書く。

## /var/qmail/control/* の修正 ##

/var/qmail/control/defaultdomain ---------------------------
mydomain
------------------------------------------------------------
省略時ドメイン名。
ドットがないホスト部にはこの名前を追加する。
qmal-injectが利用。


/var/qmail/control/defaulthosts ----------------------------
myhost.mydomain
------------------------------------------------------------
省略時ホスト名。
ホスト部のないアドレスにはこの名前を追加する。
qmal-injectが利用。


/var/qmail/control/locals ----------------------------------
localhost
localhost.mydomain
myhost
myhost.mydomain
以下MXサーバーの時追加
mydomain
------------------------------------------------------------
ローカル処理すべきドメイン名の一覧 
qmail-sendが利用。


/var/qmail/control/me --------------------------------------
myhost.mydomain
------------------------------------------------------------
自サーバのFQDN。


/var/qmail/control/plusdomain ------------------------------
mydomain
------------------------------------------------------------
追加ドメイン名。
プラス("+")で終るホスト名にはこの名前を付け加える。
qmal-injectが利用。


/var/qmail/control/rcpthosts -------------------------------
myhost.mydomain
以下MXサーバーの時追加
mydomain
------------------------------------------------------------
受信ドメイン一覧。
SMTPのRCPTに現れてよいドメイン名。
ここに載っていないドメイン宛のメイルは受け取らない。 
qmail-smtpdが利用。

## /etc/qmail/alias/* の設定 ##

# cd /var/qmail/alias
# touch .qmail-postmaster .qmail-mailer-daemon .qmail-root

/var/qmail/alias/Maildirに配送される。
他に転送の場合は、
.qmail-postmaster
.qmail-mailer-daemon
.qmail-root
の必要なファイルに
転送先メールアドレスを
&user@aaa.bbb.com
の様に書く。
頭の&はuserの最初の文字が英数字の場合は省略可能。

# chown alias .qmail*
# chmod 644 .qmail*

## Maildir の作成 ##

/var/qmail/alias/Maildir -----------------------------------
# /var/qmail/bin/maildirmake /var/qmail/alias/Maildir
# chown -R alias /var/qmail/alias/Maildir 
------------------------------------------------------------

/home/USER/MaildirをUSERが自分で作成する。
# /var/qmail/bin/maildirmake ~/Maildir

/home/USER/Maildirをrootが既存ユーザーホームに作成する。
# su USER
# /var/qmail/bin/maildirmake ~/Maildir
# exit

/etc/skel/Maildir ------------------------------------------
新規ユーザー登録時に自動作成させる為の設定
# /var/qmail/bin/maildirmake /etc/skel/Maildir 

## sendmail停止とqmailのsendmailラッパー ##

# service sendmail stop

"存在しない"エラーは無視する。
# mv /etc/rc.d/rc0.d/S80sendmail /etc/rc.d/rc0.d/_S80sendmail
# mv /etc/rc.d/rc1.d/S80sendmail /etc/rc.d/rc1.d/_S80sendmail
# mv /etc/rc.d/rc2.d/S80sendmail /etc/rc.d/rc2.d/_S80sendmail
# mv /etc/rc.d/rc3.d/S80sendmail /etc/rc.d/rc3.d/_S80sendmail
# mv /etc/rc.d/rc4.d/S80sendmail /etc/rc.d/rc4.d/_S80sendmail
# mv /etc/rc.d/rc5.d/S80sendmail /etc/rc.d/rc5.d/_S80sendmail
# mv /etc/rc.d/rc6.d/S80sendmail /etc/rc.d/rc6.d/_S80sendmail
# mv /etc/rc.d/rc0.d/K30sendmail /etc/rc.d/rc0.d/_K30sendmail
# mv /etc/rc.d/rc1.d/K30sendmail /etc/rc.d/rc1.d/_K30sendmail
# mv /etc/rc.d/rc2.d/K30sendmail /etc/rc.d/rc2.d/_K30sendmail
# mv /etc/rc.d/rc3.d/K30sendmail /etc/rc.d/rc3.d/_K30sendmail
# mv /etc/rc.d/rc4.d/K30sendmail /etc/rc.d/rc4.d/_K30sendmail
# mv /etc/rc.d/rc5.d/K30sendmail /etc/rc.d/rc5.d/_K30sendmail
# mv /etc/rc.d/rc6.d/K30sendmail /etc/rc.d/rc6.d/_K30sendmail

# cd /usr/sbin
# mv sendmail sendmail.iranai
# chmod 0 sendmail.iranai
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

## cdbファイル作成 ##

リレーを許可するホスト/ドメインの設定。

# cd /var/qmail/etc

/var/qmail/etc/tcp.smtp ------------------------------------
192.168.0.:allow,RELAYCLIENT=""
127.:allow,RELAYCLIENT=""
=host.domain:allow,RELAYCLIENT=""
=.domain:allow,RELAYCLIENT=""
192.168.1.0-31:allow,RELAYCLIENT=""
=mailserver.domain:allow,RELAYCLIENT=""
192.168.99.:deny 
------------------------------------------------------------
などの様に、思う存分書く!

# /usr/local/bin/tcprules tcp.smtp.cdb tmp < tcp.smtp

## 認証方法変更 ##

/var/qmail/bin/selectcheckpw -------------------------------
#!/bin/sh
# WARNING: This file was auto-generated. Do not edit!
case "$AUTH" in
apop)
# ~/Maildir/.password と照合する。
    exec /var/qmail/bin/checkapoppw $*
    ;;
pop)
# ~/Maildir/.password と照合する時。
#    exec /var/qmail/bin/checkpw $*
#
# 従来と同じshadowで照合する時。
    exec /var/qmail/bin/checkpassword $*
    ;;
*)
    exit 1
    ;;
esac
------------------------------------------------------------

## qmail起動スクリプト ##

/etc/rc.d/init.d/qmail -------------------------------------
#!/bin/sh
#
# qmail: /var/qmail
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin

[ -f /var/qmail/qmail.rc ] || exit 0

case "$1" in
  start)
        # Start daemons.
        echo "Starting qmail....."
        /var/qmail/qmail.rc
        echo
        touch /var/lock/qmail
        ;;
  stop)
        # Stop daemons.
        echo "Shutting down qmail....."
        PID=`/bin/ps -aef | grep "qmail[-l/d]" | awk '{print $2}'`
        if [ ! -z "$PID" ] ;  then
            /bin/kill ${PID} 1> /dev/null 2>&1
        fi
        echo
        rm -f /var/lock/qmail
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: qmail {start|stop|restart}"
        exit 1
esac

exit 0
------------------------------------------------------------

# chmod 700 /etc/rc.d/init.d/qmail

# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc2.d/S99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc3.d/S99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc5.d/S99qmail

# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc0.d/K99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc1.d/K99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc4.d/K99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc6.d/K99qmail

# cd /var/qmail
# cp boot/home rc
# chmod 700 rc

/var/qmail/rc ----------------------------------------------
#!/bin/sh

# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/ splogger qmail &
            ~~~~~~~~~~                ~
------------------------------------------------------------

/var/qmail/qmail.rc ----------------------------------------
#!/bin/sh

PATH=/var/qmail/bin:/usr/local/bin:$PATH

[ -f /var/qmail/rc ] || exit 0

envdir /var/qmail/etc/relay-ctrl \
tcpserver -v -u `id -u qmaild` -g `id -g qmaild` -p -x \
	/var/qmail/etc/tcp.smtp.cdb 0 smtp \
	/var/qmail/bin/relay-ctrl-check \
	/var/qmail/bin/qmail-smtpd 2>&1 | \
	/var/qmail/bin/splogger smtpd 3 &

envdir /var/qmail/etc/relay-ctrl \
tcpserver -v 0 pop3 \
	/var/qmail/bin/qmail-popup myhost-FQDN \
	/var/qmail/bin/selectcheckpw \
	/var/qmail/bin/relay-ctrl-allow \
	/var/qmail/bin/qmail-pop3d Maildir 2>&1 | \
	/var/qmail/bin/splogger pop3d 3 &

/var/qmail/rc

exit 0
------------------------------------------------------------

# chmod 700 qmail.rc

## 最後に、、、、、 ##

# service qmail start


by JH5AKH 20020222 改訂 20020303