[Memo2017][ITPASS]qmail のインストールと設定

qmail のインストールと設定

qmail 1.03 のインストールと設定を行った. qmail は開発元が開発を放棄しているため、適宜パッチを当てる必要がある.

ソース・パッチの取得

ディレクトリを作成した.

# mkdir /var/qmail

ユーザ・グループを追加した. qmail は専用のアカウントとグループを作成してその権限で起動する.

# groupadd -g 200 nofiles
# adduser --system --ingroup nofiles --home /var/qmail/alias alias
# adduser --system --ingroup nofiles --home /var/qmail qmaild
# adduser --system --ingroup nofiles --home /var/qmail qmaill
# adduser --system --ingroup nofiles --home /var/qmail qmailp
# groupadd -g 201 qmail
# adduser --system --ingroup qmail --home /var/qmail qmailq
# adduser --system --ingroup qmail --home /var/qmail qmailr
# adduser --system --ingroup qmail --home /var/qmail qmails

ソース, glib 2.3.1 以降用のパッチの取得と展開を行った.

# cd /usr/local/src
# wget http://qmail.teraren.com/qmail-1.03.tar.gz
# tar xvfz qmail-1.03.tar.gz
# wget http://web.archive.org/web/20071018035729/http://www.stackasterisk.jp/tech/systemConstruction/qmail01/qmail-glibc.patch
# wget -U test http://www.ksknet.net/sample/qmail-date-localtime.patch

qmail-localに対するパッチ を用意した.

# wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2016/qmail/qmail-local.patch

存在しないユーザ宛のメールを受け取らないようにするパッチ を取得した.

# wget http://code.dogmap.org./qmail/qmail-1.03-realrcptto-2006.12.10.patch

DNS サーバーからのレスポンスが 512 バイトを超える場合にも正しく取り扱えるようにするためにパッチを取得した.

# wget http://www.ckdhr.com/ckd/qmail-103.patch

パッチの適用とコンパイル

展開したディレクトリに移動した後, 上で取得したパッチを当てビルドした.ビルドとチェックを行い, エラーが出ないことを確認した.

# cd qmail-1.03
# patch  < ../qmail-glibc.patch
# patch -p1 < ../qmail-date-localtime.patch 
# patch -p1 < ../qmail-1.03-realrcptto-2006.12.10.patch
# patch  < ../qmail-local.patch  
# patch < ../qmail-103.patch  
# make
# make man
# make setup
# make check

設定

./config のスクリプトは, DNS を使って下に示す制御ファイルに情報を書くものであるが実行できないため, 下のそれぞれの内容を手動でファイルに書いた.

  • /var/qmail/control/defaultdomain に下の内容を書いた

    scitec.kobe-u.ac.jp
  • /var/qmail/control/locals に下の内容を書いた

    localhost
    tako-itpass.scitec.kobe-u.ac.jp
    epa.scitec.kobe-u.ac.jp
    aoe.scitec.kobe-u.ac.jp
  • /var/qmail/control/me に下の内容を書いた

    tako-itpass.scitec.kobe-u.ac.jp
  • /var/qmail/control/plusdomain に下の内容を書いた

    ac.jp
  • /var/qmail/control/rcpthosts に下の内容を書いた

    localhost
    tako-itpass.scitec.kobe-u.ac.jp
    epa.scitec.kobe-u.ac.jp
    aoe.scitec.kobe-u.ac.jp
  • /var/qmail/control/databytes に下の内容を書いた

    100000000
  • /var/qmail/control/defaulthost に下の内容を書いた

    tako-itpass.scitec.kobe-u.ac.jp
  • パーミッションの変更

    # chmod 644 /var/qmail/control/databytes
    # chmod 644 /var/qmail/control/defaulthost
  • 確認

    それぞれのファイルに書き込み終了後には, 正しく上の情報が書かれていることをcat(1) で確認した. 例:

    # cat /var/qmail/control/me tako-itpass.scitec.kobe-u.ac.jp

    これらの情報を qmail-showctl(8) で確認した.

    # /var/qmail/bin/qmail-showctl

システムのメールアドレスの転送先設定

root 宛のメールをフォワードする先に itpadmin を指定した. なお, "_at_" は "@" に読み替えた.

# cd /var/qmail/alias
# echo '&itpadmin_at_itpass.scitec.kobe-u.ac.jp' > .qmail-root
# echo '&root' > .qmail-postmaster
# echo '&root' > .qmail-mailer-daemon
# echo '&root' > .qmail-bin
# echo '&root' > .qmail-daemon
# echo '&root' > .qmail-games
# echo '&root' > .qmail-ingres
# echo '&root' > .qmail-nobody
# echo '&root' > .qmail-sys
# echo '&root' > .qmail-uucp
# echo '&root' > .qmail-mail
# echo '&root' > .qmail-anonymous
# echo '&root' > .qmail-www-data
# chmod 644 .qmail-*

インストールした実行ファイルへのパスの設定

インストールした qmail の実行ファイル群へパスを通した.

  • 具体的には, 以下のようにした.
    • /etc/bash.bashrc の冒頭に

      # add PATH for local installed softwares
      PATH="${PATH}:/var/qmail/bin"
      # add PATH for local installed softwares (for root)
      if [ "`id -u`" -eq 0 ]; then
      PATH="${PATH}:/var/qmail/bin"
      fi 
      export PATH

      を追加した.

    • /etc/csh.cshrc の冒頭に

      # add PATH for local installed softwares
      set path = ($path /usr/local/bin /usr/bin /bin /var/qmail/bin) 
      # add PATH for local installed softwares (for root)
      if ( "`id -u`" == 0 ) then
      set path = ($path /usr/local/sbin /usr/sbin /sbin /var/qmail/bin)
      endif

      を追加した.

    • /etc/zsh/zshenv に

      # add PATH for local installed softwares
      export PATH="$PATH:/var/qmail/bin”
      # add PATH for local installed softwares (for root)
      if [ "`id -u`" -eq 0 ]; then
        export PATH="$PATH:/var/qmail/bin”
      fi

      の記述を追加した.

インストールしたマニュアルへのパスの設定

/etc/manpath.config に以下の行を追加した.

MANDATORY_MANPATH                  /var/qmail/man
MANPATH_MAP        /var/qmail/bin  /var/qmail/man
MANDB_MAP          /var/qmail/man  /var/qmail/man

メールの配送先設定

/etc/profileに以下を追記した.

MAIL="$HOME/Mailbox"
MAILDROP="$HOME/Mailbox"
export MAIL MAILDROP

/etc/csh.cshrcに以下を追記した.

setenv MAIL $HOME/Mailbox
setenv MAILDROP $HOME/Mailbox

起動

# cp /var/qmail/boot/home /var/qmail/rc

qmail.service を作成した.

# vi /etc/systemd/system/qmail.service

[Unit]
Description=Qmail mail delivery daemons
After=network.target

[Service]
ExecStart=/var/qmail/bin/qmail-start ./Mailbox splogger qmail
Environment=PATH=/var/qmail/bin:${PATH}
Restart=always

[Install]
WantedBy=multi-user.target

qmail を起動テストをしたところ, 失敗した.

# systemctl start qmail.service
# systemctl

以下のようなエラーメッセージがあった:

Nov 13 16:57:28 tako-itpass qmail: 1510559848.504623 status: local 0/10 remote 0/20
Nov 13 16:57:28 tako-itpass qmail: 1510559848.504825 alert: oh no! lost spawn connection! dying...
Nov 13 16:57:28 tako-itpass qmail: 1510559848.504845 alert: oh no! lost spawn connection! dying...
Nov 13 16:57:28 tako-itpass qmail: 1510559848.504860 status: exiting

ソース, パッチの再取得および展開

ソース, パッチの取得と展開を行った.

# cd /usr/local/src
# wget http://www.qmail.org/netqmail-1.06.tar.gz
# tar zxf netqmail-1.06.tar.gz
# wget http://www.qmail.org/qmail-smtpd-relay-reject
# wget http://tomclegg.net/qmail/qmail-smtpd-auth-0.31.tar.gz
# tar zxvf qmail-smtpd-auth-0.31.tar.gz

パッチの適用とコンパイル

展開したディレクトリに移動した後, 上で取得したパッチを当てビルドした.ビルドとチェックを行い, エラーが出ないことを確認した.

# cd netqmail-1.06
# patch -p1 < ../qmail-103.patch
# patch -p1 < ../qmail-date-localtime.patch
# patch -p1 < ../qmail-smtpd-relay-reject
# make man
# make
# make setup check

設定

./config のスクリプトは, DNS を使って下に示す制御ファイルに情報を書くものであるが実行できないため, 下のそれぞれの内容を手動でファイルに書いた.

  • /var/qmail/control/defaultdomain に下の内容を書いた

    scitec.kobe-u.ac.jp
  • /var/qmail/control/locals に下の内容を書いた

    localhost
    tako-itpass.scitec.kobe-u.ac.jp
    epa.scitec.kobe-u.ac.jp
    aoe.scitec.kobe-u.ac.jp
  • /var/qmail/control/me に下の内容を書いた

    tako-itpass.scitec.kobe-u.ac.jp
  • /var/qmail/control/plusdomain に下の内容を書いた

    ac.jp
  • /var/qmail/control/rcpthosts に下の内容を書いた

    localhost
    tako-itpass.scitec.kobe-u.ac.jp
    epa.scitec.kobe-u.ac.jp
    aoe.scitec.kobe-u.ac.jp
  • /var/qmail/control/databytes に下の内容を書いた

    100000000
  • /var/qmail/control/defaulthost に下の内容を書いた

    tako-itpass.scitec.kobe-u.ac.jp
  • パーミッションの変更

    # chmod 644 /var/qmail/control/databytes
    # chmod 644 /var/qmail/control/defaulthost
  • 確認

    それぞれのファイルに書き込み終了後には, 正しく上の情報が書かれていることをcat(1) で確認した. 例:

    # cat /var/qmail/control/me tako-itpass.scitec.kobe-u.ac.jp

    これらの情報を qmail-showctl(8) で確認した.

    # /var/qmail/bin/qmail-showctl

システムのメールアドレスの転送先設定

root 宛のメールをフォワードする先に itpadmin を指定した. なお, "_at_" は "@" に読み替えた.

# cd /var/qmail/alias
# echo '&itpadmin_at_itpass.scitec.kobe-u.ac.jp' > .qmail-root
# echo '&root' > .qmail-postmaster
# echo '&root' > .qmail-mailer-daemon
# echo '&root' > .qmail-bin
# echo '&root' > .qmail-daemon
# echo '&root' > .qmail-games
# echo '&root' > .qmail-ingres
# echo '&root' > .qmail-nobody
# echo '&root' > .qmail-sys
# echo '&root' > .qmail-uucp
# echo '&root' > .qmail-mail
# echo '&root' > .qmail-anonymous
# echo '&root' > .qmail-www-data
# chmod 644 .qmail-*

起動

# cp /var/qmail/boot/home /var/qmail/rc

qmail を起動し, きちんと起動したことを確認する.

# systemctl start qmail.service
# systemctl

ブート時に自動的に起動させるため, 追加設定を行う

# systemctl enable qmail.service

再起動を行い, 自動的に起動することを確認する.

配送テスト

配送テスト (ローカル配送, リモート送り出しテスト) を行った.

[テスト 1] ローカル配送テスト part1

~chikuwa**/Mailbox が生成されているか確認したところ, 生成されていなかったため, Mailbox が生成されるように .qmail を作成し, 以下のように書き込んだ.

$ vi .qmail
/home/chikuwa/Mailbox

配送テストを行った. 自分に送ってみた. 以下のコマンドを実行した. ~chikuwa4/Mailbox にメールが送られることを確認した.

$ echo to: chikuwa | /var/qmail/bin/qmail-inject
$ lv ~chikuwa/Mailbox 

[テスト 2] ローカル配送テスト part2

存在しない宛先に送ってみた. バウンスメールが ~chikuwa/Mailbox に送られてく ることを確認した.

$ echo to: nonexistent | /var/qmail/bin/qmail-inject 
$ lv ~chikuwa/Mailbox 

[テスト 3] リモート送り出しテスト part1

他のホスト上のアカウントへ送って, 届いていることを確認した.

$ echo to: hoge_at_gfd-dennou.org | /var/qmail/bin/qmail-inject

[テスト 4] リモート送り出しテスト part2

他のホスト上の存在しない宛先に送った. -f オプションでバウンスの送り先を指定した.

$ echo to: hogee@gfd-dennou.org | /var/qmail/bin/qmail-inject -f chikuwa4@tako-itpass.scitec.kobe-u.ac.jp

chikuwa_at_tako-itpass.scitec.kobe-u.ac.jp にバウンスが来ていることを確認した.

$ lv ~chikuwa/Mailbox 

せず終了するようになった.

とりあえず用の smtp の設定

以下のように inetd を設定した.

/etc/inetd.conf に以下を追加した.

smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd

/etc/inetd.conf を読み直させるために次を実行した.

# /etc/init.d/openbsd-inetd restart

mail コマンドをインストールして, 以下のコマンドを実行した.

$ sudo apt-get install bsd-mailx
$ export MAIL=~/Mailbox
$ mail

他のホストのアドレスで chikuwa_at_tako-itpass.scitec.kobe-u.ac.jp へメールを送信し, Mailbox の中身を確認した.

$ mail

参考:<URL:http://man.qmail.jp/jinstall/test.receive.html>

起動方法の変更

/etc/systemd から qmail を立ち上げないようにした.

# systemctl stop qmail.service
# systemctl disable qmail.service

再起動した.

# reboot

/etc/systemd/system/qmail.service を削除した.

# rm /etc/systemd/system/qmail.service

qmail が起動していないことを確認した上で /etc/init.d から qmail を立ち上げるために起動スクリプトを作成した.

# systemctl
# vi /etc/init.d/qmail
# chmod +x /etc/init.d/qmail

スクリプトの中身は以下の通り:

#!/bin/bash
#
# /etc/init.d/qmail : start or stop the qmail mail subsystem.
#
# source from http://www.atmarkit.co.jp/ait/articles/0211/02/news001.html
#
#
# modified by Rin Fujibayashi (2017/11/14)
# updated by MIKAMI Takashi (2015/12/15)
# updated by MIKAMI Takashi (2014/06/12)
# created by MIKAMI Takashi (2014/06/11)

### BEGIN INIT INFO
# Provides:          qmail
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Should-Start:      $network $syslog
# Should-Stop:       $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop qmail
# Description:       qmail is qmail
### END INIT INFO

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

#[ -f /var/qmail/rc ] || exit 0
[ -f /var/qmail/bin/qmail-start ] || exit 0
[ -f /var/qmail/bin/qmail-send ] || exit 0


case "$1" in
    start)
       # Start daemons.
       echo "Startig mail-transfer agent: qmail."
       sh -c '/var/qmail/rc &'

       # For SMTP
#        sh -c " /sbin/start-stop-daemon --start --quiet --user qmaild \
#        --pidfile /var/run/tcpserver_smtpd.pid --make-pidfile \
#        --exec /usr/local/bin/tcpserver -- -HRv -u ` id -u qmaild ` \
#        -g ` id -g qmaild ` -x /etc/tcp.smtp.cdb 0 smtp \
#        /usr/local/bin/rblsmtpd -r bl.spamcop.net \
#      /var/qmail/bin/qmail-smtpd 2>&1 \
#      | /var/qmail/bin/splogger smtpd 3 > /dev/null 2>&1 &"

       # For SMTP over SSL
#       sh -c "/sbin/start-stop-daemon --start --quiet --user qmaild \
#       --pidfile /var/run/tcpserver_ssmtp.pid --make-pidfile \
#       --exec /usr/local/bin/tcpserver-ssl -- -s -HRv -u \
#       ` id -u qmaild ` -g ` id -g qmaild ` -x /etc/tcp.smtp.cdb \
#        -n /var/qmail/server.key/qmail.pem 0 ssmtp \
#        /usr/local/bin/rblsmtpd -r bl.spamcop.net \
#      /var/qmail/bin/qmail-smtpd-auth tako-itpass.scitec.kobe-u.ac.jp \
#        /bin/checklocalpwd /bin/true 2>&1 \
#      | /var/qmail/bin/splogger smtpd 3 > /dev/null 2>&1 &"

       # For POP3
#      sh -c "/sbin/start-stop-daemon --start --quiet --user root \
#      --pidfile /var/run/tcpserver_pop3d.pid --make-pidfile \
#      --exec /usr/local/bin/tcpserver -- -v -u 0 -g 0 0 pop3 \
#      /var/qmail/bin/qmail-popup \
#      tako-itpass.scitec.kobe-u.ac.jp /bin/checkapoppw \
#      /var/qmail/bin/qmail-pop3d Maildir 2>&1 \
#      | /var/qmail/bin/splogger pop3d 3 > /dev/null 2>&1 &"

       # For POP3 over SSL
#      sh -c "/sbin/start-stop-daemon --start --quiet --user root \
#      --pidfile /var/run/tcpserver_pop3s.pid --make-pidfile \
#      --exec /usr/local/bin/tcpserver-ssl -- -s \
#       -n /var/qmail/server.key/qmail.pem \
#      -v -u 0 -g 0 0 pop3s \
#      /var/qmail/bin/qmail-popup \
#      tako-itpass.scitec.kobe-u.ac.jp /bin/checkapoppw \
#      /var/qmail/bin/qmail-pop3d Maildir 2>&1 \
#      | /var/qmail/bin/splogger pop3d 3 > /dev/null 2>&1 &"

       ;;

    stop)
       # Stop daemons.
       echo "Stopping mail-transfer agent: qmail"
       PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
       if [ ! -z "$PID" ] ; then
           /bin/kill ${PID} 1> /dev/null 2>&1
       fi

#      /sbin/start-stop-daemon --user qmails --stop --quiet --oknodo --exec /var/qmail/bin/qmail-send # qmail-send
#      /sbin/start-stop-daemon --user qmaild --stop --quiet --oknodo --pidfile /var/run/tcpserver_smtpd.pid --exec /usr/local/bin/tcpserver # smtp
#        /sbin/start-stop-daemon --user root --stop --quiet --oknodo --pidfile /var/run/tcpserver_pop3d.pid --exec /usr/local/bin/tcpserver # pop3
#      /sbin/start-stop-daemon --user qmaild --stop --quiet --oknodo --pidfile /var/run/tcpserver_ssmtp.pid --exec /usr/local/bin/tcpserver-ssl # smtp over SSL
#      /sbin/start-stop-daemon --user root --stop --quiet --oknodo --pidfile /var/run/tcpserver_pop3s.pid --exec /usr/local/bin/tcpserver-ssl # pop3s


       ;;

       # ===modified by Mikami Takashi (2014/06/11)===
    restart)
       $0 stop
       $0 start
       ;;

       # ===modified by Mikami Takashi (2014/06/11)===
    cdb)
       echo "Rebuilding tcp.smtp.cdb"
       cd /etc
       /usr/local/bin/tcprules /etc/tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp
       ;;

    *)
       echo 'Usage: /etc/init.d/qmail {start|stop|restart|cdb}'
       exit 1
esac

exit 0

ブート時に自動的に起動させるため, 以下のコマンドで各/etc/rc.X ディレクトリからシンボリックリンクを貼った.

# update-rc.d qmail defaults

qmail を起動した.

# /etc/init.d/qmail start 

qmail の状態の確認したところ起動していなかった.

# ps aux | grep qmail
# service qmail status   

再起動した.

# reboot

qmail が起動したことを確認した

# service qmail status   

配送再テスト

配送テスト (ローカル配送, リモート送り出しテスト) を行った.

[テスト 1] ローカル配送テスト part1

~chikuwa**/Mailbox が生成されているか確認したところ, 生成されていなかったため, Mailbox が生成されるように .qmail を作成し, 以下のように書き込んだ.

$ vi .qmail
/home/chikuwa/Mailbox

配送テストを行った. 自分に送ってみた. 以下のコマンドを実行した. ~chikuwa4/Mailbox にメールが送られることを確認した.

$ echo to: chikuwa | /var/qmail/bin/qmail-inject
$ lv ~chikuwa/Mailbox 

[テスト 2] ローカル配送テスト part2

存在しない宛先に送ってみた. バウンスメールが ~chikuwa/Mailbox に送られてく ることを確認した.

$ echo to: nonexistent | /var/qmail/bin/qmail-inject 
$ lv ~chikuwa/Mailbox 

[テスト 3] リモート送り出しテスト part1

他のホスト上のアカウントへ送って, 届いていることを確認した.

$ echo to: hoge_at_gfd-dennou.org | /var/qmail/bin/qmail-inject

[テスト 4] リモート送り出しテスト part2

他のホスト上の存在しない宛先に送った. -f オプションでバウンスの送り先を指定した.

$ echo to: hoge_at_gfd-dennou.org | /var/qmail/bin/qmail-inject -f chikuwa_at_tako-itpass.scitec.kobe-u.ac.jp

chikuwa_at_tako-itpass.scitec.kobe-u.ac.jp にバウンスが来ていることを確認した.

$ lv ~chikuwa/Mailbox 

追加作業 (2017/12/21 藤林)

パッチの適用

/var/qmail/control のバックアップを取った.

# cd /var/qmail
# cp -r control/ control_bk

存在しないユーザ宛のメールを受け取らないようにするパッチを当てた後, 適用した. パッチを適用する前に qmail を止めた.

# cd /usr/local/src/netqmail-1.06
# patch -p1 < ../qmail-1.03-realrcptto-2006.12.10.patch
# service qmail stop
# make
# make setup check

qmail を再開した.

# service qmail start

/var/qmail/control/ 以下のファイルが書き換えられていないことを確認した.

追加作業完了.

参考資料

[ITPASSサーバ構築・運用ドキュメント へ戻る]

Last modified:2017/12/21 15:59:25
Keyword(s):
References:[[ITPASS2017]2017年度サーバ構築ログ]