IT pass HikiWiki - [Memo2017][ITPASS]qmail のインストールと設定 Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
{{toc}}
[((<ITPASSサーバ構築・運用ドキュメント>)) へ戻る]
= 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
#このときに, 以下のようなレスポンスが返ってくるが問題ない.
# # adduser --system --ingroup nofiles --home /var/qmail qmaild
# 警告: 指定されたホームディレクトリ /var/qmail はすでに存在しています。
# システムユーザ `qmaild' (UID 119) を追加しています...
# 新しいユーザ `qmaild' (UID 119) をグループ `nofiles' に追加しています...
# ホームディレクトリ `/var/qmail' はすでに存在します。`/etc/skel' からのコピーを行いません。
# adduser: 警告: ホームディレクトリ `/var/qmail' は、現在作成中のユーザの所属になっていません。
ソース, glib 2.3.1 以降用のパッチの取得と展開を行った.
#patch の当て方については詳しくは ((<[TEBIKI]patch コマンド>)) を参照のこと.
# 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に対するパッチ を用意した.
#これは((<qmail-local.patch|URL:../server/2016/qmail/qmail-local.patch>)) から入手できる. これを cp し, パーミッションを設定する.
# wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2016/qmail/qmail-local.patch
存在しないユーザ宛のメールを受け取らないようにするパッチ
#((<qmail-realrcptto|URL:http://code.dogmap.org./qmail/#qmail-realrcptto>))
を取得した.
# 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
# * 補足
# * メールの容量制限をする. 以上のように設定することで, 100MB 以上のサイズのメールは拒否される.
* /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 の実行ファイル群へパスを通した.
#((<[ITPASS2016]パスの設定>)) の((* <一般ユーザ用コマンドのパス> *)) に #((*/var/qmail/bin*)) を追加する.
#(システム用コマンドも一般ユーザ用コマンドと同じ場所にインストールされているため, システム用コマンド用の設定を別途行う必要は無い).
* 具体的には, 以下のようにした.
* /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 に以下の行を追加した.
#詳しくは ((<[ITPASS2015]パスの設定>)) を参照のこと.
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
#((<URL:http://opensource.sf-tec.de/qmail/qmail-send.service>))を参考にして
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
再起動を行い, 自動的に起動することを確認する.
== 配送テスト
#((<qmail-1.03: 配送テスト|URL:http://man.qmail.jp/jinstall/test.deliver.html>))に従い,
配送テスト (ローカル配送, リモート送り出しテスト) を行った.
=== [テスト 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
#ここで, ヘッダのタイムゾーンが -0000ではなくて+0900になっていることを確認する. そうなっていないときには, qmail-date-localtime.patchが正しく当たっていない可能性がある.
#配送後, ログを確認すると, triple bounce となっておりバウンスメールが返って来ないが, 問題無いものとして先に進める.
=== [テスト 3] リモート送り出しテスト part1
他のホスト上のアカウントへ送って, 届いていることを確認した.
#届かなければ,/var/log/syslog を参照して原因を追求する.
$ 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
#== sendmail の「置き換え」
#((<qmail 1.03: sendmailをqmailへ置き換える|URL:http://man.qmail.jp/jinstall/install3.html>)),
#および
#((<qmail 1.03: sendmailをシステムから削除する方法
#|URL:http://man.qmail.jp/jinstall/remove.sendmail.html >))
#に従う.
#ただし, sendmail ではなく, exim がインストールされている場合は, exim
#を無効にする.
#まず, exim4 が起動している場合は停止.
# # /etc/init.d/exim4 stop
#exim のブートスクリプトは, /etc/init.d/exim4 で, これに
#/etc/rc[2-5].d/S20exim, /etc/rc{1,6}.d/K20exim からリンクが張られてい
#る. これを無効にする.
# # chmod 000 /etc/init.d/exim4
# # mv /etc/init.d/exim4 /etc/init.d/exim4.bak
# # update-rc.d exim4 remove
#cron から exim が呼び出される処理を無効にする.
#/etc/cron.daily/exim4-base の先頭の方に次の行を書き足す.
#3 行目の [ と ! の間にはスペースがあることに注意. 詰めて書いてはいけない (man [(1)).
#(「[」と「と」, 「と」と「!」の間にスペースを入れた)
# #!/bin/sh
# # by Yasuhiro MORIKAWA, 2007-08-10. We need not exim.
# if [ ! -f /etc/exim.conf ]; then
# exit 0
# fi
#これで, /etc/cron.daily/eximは, /etc/exim.confが存在しない場合には何も
せず終了するようになった.
#そして, sendmailを置き換える.
# # chmod 000 /usr/lib/sendmail
# # chmod 000 /usr/sbin/sendmail
# # mv /usr/lib/sendmail /usr/lib/sendmail.bak
# # mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
# # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
#次のコマンドで exim4 関係のパッケージを hold して, 更新されないようにする.
# # echo exim4 hold | dpkg --set-selections
# # echo exim4-base hold | dpkg --set-selections
# # echo exim4-config hold | dpkg --set-selections
# # echo exim4-daemon-light hold | dpkg --set-selections
#Debian パッケージの枠組で cron と exim4 (MTA なら何でもよい) は依存関
#係があるので, exim4 を消してしまうと cron が利用するメールサーバが
#Debian パッケージの枠組内では存在しないと認識されてしまう. そのため,
#exim4 を消さずにあえて残している.
== とりあえず用の smtp の設定
#後で tcpserver をインストールするので, 最終的にこの設定は不要にな#
#る. とりあえず受信テストのために
以下のように 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
#qmail の設定ファイルを作成する. chikuwa のアカウントの設定ファイル .qmail を#作成し,
# /home/ユーザ名/Mailbox
#と書く.
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/ 以下のファイルが書き換えられていないことを確認した.
追加作業完了.
== 参考資料
* ((<[ITPASS2015] qmail のインストールと設定>))
* ((<"セカンダリメールサーバの構築 (北大 EPnetFaN)"|URL:http://www.ep.sci.hokudai.ac.jp/~epmail/y2011/dvlop/www.html>))
* ((<qmail netqmail における 512 バイトを超える DNS 応答の不適切な取り扱いについて|URL:http://jprs.jp/tech/notice/2011-03-03-inappropriate-handling-for-long-dns-packet.html>))
* ((<Life with qmail|URL:http://ya.maya.st/mail/lwq.html#dns-patches>))
* ((<qmail を DNSSEC に対応させるパッチの適用|URL:http://blog.netandfield.com/shar/2011/02/qmail-dnssec.html>))
[((<ITPASSサーバ構築・運用ドキュメント>)) へ戻る]
[((<ITPASSサーバ構築・運用ドキュメント>)) へ戻る]
= 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
#このときに, 以下のようなレスポンスが返ってくるが問題ない.
# # adduser --system --ingroup nofiles --home /var/qmail qmaild
# 警告: 指定されたホームディレクトリ /var/qmail はすでに存在しています。
# システムユーザ `qmaild' (UID 119) を追加しています...
# 新しいユーザ `qmaild' (UID 119) をグループ `nofiles' に追加しています...
# ホームディレクトリ `/var/qmail' はすでに存在します。`/etc/skel' からのコピーを行いません。
# adduser: 警告: ホームディレクトリ `/var/qmail' は、現在作成中のユーザの所属になっていません。
ソース, glib 2.3.1 以降用のパッチの取得と展開を行った.
#patch の当て方については詳しくは ((<[TEBIKI]patch コマンド>)) を参照のこと.
# 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に対するパッチ を用意した.
#これは((<qmail-local.patch|URL:../server/2016/qmail/qmail-local.patch>)) から入手できる. これを cp し, パーミッションを設定する.
# wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2016/qmail/qmail-local.patch
存在しないユーザ宛のメールを受け取らないようにするパッチ
#((<qmail-realrcptto|URL:http://code.dogmap.org./qmail/#qmail-realrcptto>))
を取得した.
# 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
# * 補足
# * メールの容量制限をする. 以上のように設定することで, 100MB 以上のサイズのメールは拒否される.
* /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 の実行ファイル群へパスを通した.
#((<[ITPASS2016]パスの設定>)) の((* <一般ユーザ用コマンドのパス> *)) に #((*/var/qmail/bin*)) を追加する.
#(システム用コマンドも一般ユーザ用コマンドと同じ場所にインストールされているため, システム用コマンド用の設定を別途行う必要は無い).
* 具体的には, 以下のようにした.
* /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 に以下の行を追加した.
#詳しくは ((<[ITPASS2015]パスの設定>)) を参照のこと.
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
#((<URL:http://opensource.sf-tec.de/qmail/qmail-send.service>))を参考にして
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
再起動を行い, 自動的に起動することを確認する.
== 配送テスト
#((<qmail-1.03: 配送テスト|URL:http://man.qmail.jp/jinstall/test.deliver.html>))に従い,
配送テスト (ローカル配送, リモート送り出しテスト) を行った.
=== [テスト 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
#ここで, ヘッダのタイムゾーンが -0000ではなくて+0900になっていることを確認する. そうなっていないときには, qmail-date-localtime.patchが正しく当たっていない可能性がある.
#配送後, ログを確認すると, triple bounce となっておりバウンスメールが返って来ないが, 問題無いものとして先に進める.
=== [テスト 3] リモート送り出しテスト part1
他のホスト上のアカウントへ送って, 届いていることを確認した.
#届かなければ,/var/log/syslog を参照して原因を追求する.
$ 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
#== sendmail の「置き換え」
#((<qmail 1.03: sendmailをqmailへ置き換える|URL:http://man.qmail.jp/jinstall/install3.html>)),
#および
#((<qmail 1.03: sendmailをシステムから削除する方法
#|URL:http://man.qmail.jp/jinstall/remove.sendmail.html >))
#に従う.
#ただし, sendmail ではなく, exim がインストールされている場合は, exim
#を無効にする.
#まず, exim4 が起動している場合は停止.
# # /etc/init.d/exim4 stop
#exim のブートスクリプトは, /etc/init.d/exim4 で, これに
#/etc/rc[2-5].d/S20exim, /etc/rc{1,6}.d/K20exim からリンクが張られてい
#る. これを無効にする.
# # chmod 000 /etc/init.d/exim4
# # mv /etc/init.d/exim4 /etc/init.d/exim4.bak
# # update-rc.d exim4 remove
#cron から exim が呼び出される処理を無効にする.
#/etc/cron.daily/exim4-base の先頭の方に次の行を書き足す.
#3 行目の [ と ! の間にはスペースがあることに注意. 詰めて書いてはいけない (man [(1)).
#(「[」と「と」, 「と」と「!」の間にスペースを入れた)
# #!/bin/sh
# # by Yasuhiro MORIKAWA, 2007-08-10. We need not exim.
# if [ ! -f /etc/exim.conf ]; then
# exit 0
# fi
#これで, /etc/cron.daily/eximは, /etc/exim.confが存在しない場合には何も
せず終了するようになった.
#そして, sendmailを置き換える.
# # chmod 000 /usr/lib/sendmail
# # chmod 000 /usr/sbin/sendmail
# # mv /usr/lib/sendmail /usr/lib/sendmail.bak
# # mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
# # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
#次のコマンドで exim4 関係のパッケージを hold して, 更新されないようにする.
# # echo exim4 hold | dpkg --set-selections
# # echo exim4-base hold | dpkg --set-selections
# # echo exim4-config hold | dpkg --set-selections
# # echo exim4-daemon-light hold | dpkg --set-selections
#Debian パッケージの枠組で cron と exim4 (MTA なら何でもよい) は依存関
#係があるので, exim4 を消してしまうと cron が利用するメールサーバが
#Debian パッケージの枠組内では存在しないと認識されてしまう. そのため,
#exim4 を消さずにあえて残している.
== とりあえず用の smtp の設定
#後で tcpserver をインストールするので, 最終的にこの設定は不要にな#
#る. とりあえず受信テストのために
以下のように 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
#qmail の設定ファイルを作成する. chikuwa のアカウントの設定ファイル .qmail を#作成し,
# /home/ユーザ名/Mailbox
#と書く.
mail コマンドをインストールして, 以下のコマンドを実行した.
$ sudo apt-get install bsd-mailx
$ export MAIL=~/Mailbox
他のホストのアドレスで chikuwa_at_tako-itpass.scitec.kobe-u.ac.jp へメールを送信し, Mailbox の中身を確認した.
参考:((<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/ 以下のファイルが書き換えられていないことを確認した.
追加作業完了.
== 参考資料
* ((<[ITPASS2015] qmail のインストールと設定>))
* ((<"セカンダリメールサーバの構築 (北大 EPnetFaN)"|URL:http://www.ep.sci.hokudai.ac.jp/~epmail/y2011/dvlop/www.html>))
* ((<qmail netqmail における 512 バイトを超える DNS 応答の不適切な取り扱いについて|URL:http://jprs.jp/tech/notice/2011-03-03-inappropriate-handling-for-long-dns-packet.html>))
* ((<Life with qmail|URL:http://ya.maya.st/mail/lwq.html#dns-patches>))
* ((<qmail を DNSSEC に対応させるパッチの適用|URL:http://blog.netandfield.com/shar/2011/02/qmail-dnssec.html>))
[((<ITPASSサーバ構築・運用ドキュメント>)) へ戻る]