[Memo2021][ITPASS]qmail のインストールと設定
exim4 のアンインストール
qmail をインストールするにあたってかち合わないように debian に標準搭載されている exim4 をアンインストールする.
exim4 関連のパッケージを確認する.
# dpkg -l | grep exim
念のため, exim 関連パッケージを設定ファイルからアンインストールする.
# apt-get remove --purge exim4 exim4-base exim4-config exim4-daemon-light
qmail のインストールと設定
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' は、現在作成中のユーザの所属になって#いません。
ソース, パッチの取得と展開を行う.
当てた patch は以下のとおりである.
- qmail-103.patch (DNS応答に関するパッチ)
- qmail-1.03-realrcptto-2006.12.10.patch (存在しないユーザ宛のメールを受け取らないようにするパッチ)
- qmail-date-localtime.patch (ローカルタイムに関するパッチ)
- qmail-smtpd-relay-reject (リレーサーバとして利用させないためのパッチ)
- qmail-smtpd-auth-0.31.tar.gz (smtp-auth のためのパッチ)
# cd /usr/local/src # wget http://www.qmail.org/netqmail-1.06.tar.gz # tar zxf netqmail-1.06.tar.gz # wget http://www.ckdhr.com/ckd/qmail-103.patch # wget http://code.dogmap.org./qmail/qmail-1.03-realrcptto-2006.12.10.patch # wget -U test http://www.ksknet.net/sample/qmail-date-localtime.patch # 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
http://www.qmail.org/netqmail-1.06.tar.gz と http://www.ksknet.net/sample/qmail-date-localtime.patch と http://www.qmail.org/qmail-smtpd-relay-reject は 存在しないかもしれかもしれない.
その場合は, ika-itpass の ~itpass/ftp/server/2020/qmail にある対象のファイルを用いる.
# wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2020/qmail/netqmail-1.06.tar.gz # wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2020/qmail/qmail-date-localtime.patch # wget http://itpass.scitec.kobe-u.ac.jp/~itpass/server/2020/qmail/qmail-smtpd-relay-reject
パッチの適用とコンパイル
展開したディレクトリに移動した後, 上で取得したパッチを当てビルドする. ビルドとチェックを行い, エラーが出ないことを確認する. patch の当て方については詳しくは [TEBIKI]patch コマンド を参照のこと.
# cd netqmail-1.06 # patch -p1 < ../qmail-103.patch # patch -p1 < ../qmail-1.03-realrcptto-2006.12.10.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
- 補足
- メールの容量制限をする. 以上のように設定することで, 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
これらの情報を 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-*
メールの配送先設定
/etc/profileに以下を追記した.
MAIL="$HOME/Mailbox" MAILDROP="$HOME/Mailbox" export MAIL MAILDROP
/etc/csh.cshrcに以下を追記した.
setenv MAIL $HOME/Mailbox setenv MAILDROP $HOME/Mailbox
インストールした実行ファイルへのパスの設定
インストールした qmail の実行ファイル群へパスを通す.
[ITPASS2020]パスの設定 の <一般ユーザ用コマンドのパス> に /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 に以下の行を追加する. 詳しくは [ITPASS2020]パスの設定 を参照のこと.
MANDATORY_MANPATH /var/qmail/man MANPATH_MAP /var/qmail/bin /var/qmail/man MANDB_MAP /var/qmail/man /var/qmail/man
起動
- 起動方法の変更
/etc/systemd から qmail を立ち上げないようにする. 以下のように
# systemctl stop qmail.service
とすると
Failed to stop qmail.service: Unit qmail.service not loaded.
と表示される. また
# systemctl disable qmail.service
とすると
Failed to disable unit: Unit file qmail.service does not exist.
と表示される.
再起動する.
# reboot
/etc/systemd/system/qmail.service を削除する. 以下のように
# rm /etc/systemd/system/qmail.service
とすると
rm: cannot remove '/etc/systemd/system/qmail.service': No such file or directory
と表示される.
qmail が起動していないことの確認は
# ps aux | less
として 動いているプロセスの一覧を表示し, 次に /qmail として qmail の文字列が含まれるプロセスを検索をすると見つからなかったことにより確認する.
/etc/init.d から qmail を立ち上げるために起動スクリプトを作成する.
# systemctl # cp /var/qmail/boot/home /var/qmail/rc
qmail スクリプトは ika-itpass サーバの /etc/init.d/ にあるものを netmail-1.06.tar.gz を取得する際に行った方法と同じ方法で tako-itpass に転送する. 次に
# vi /etc/init.d/qmail
として 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
以下のようにして qmail スクリプトに実行権限を与える.
# chmod 755 qmail
ブート時に自動的に起動させるため, 以下のコマンドで各/etc/rc.X ディレクトリからシンボリックリンクを貼る.
# update-rc.d qmail defaults
再起動する.
# reboot
qmail を起動する.
# /etc/init.d/qmail start
qmail が起動しているか確認する.
# ps aux | grep qmail # service qmail status
配送テスト
配送テスト (ローカル配送, リモート送り出しテスト) を行う.
[テスト 1] ローカル配送テスト part1
Mailbox が生成されるように .qmail を /home/chikuwa4/ に作成し, 以下のように書き込む.
$ vi .qmail /home/chikuwa4/Mailbox
配送テストを行う. 自分に送り, 以下のコマンドを実行して, ~chikuwa4/Mailbox にメールが送られたことを確認する.
$ echo to: chikuwa4 | /var/qmail/bin/qmail-inject $ lv ~chikuwa4/Mailbox
[テスト 2] ローカル配送テスト part2
存在しない宛先に送り, バウンスメールが ~chikuwa4/Mailbox に送られてく ることを確認する.
$ echo to: nonexistent | /var/qmail/bin/qmail-inject $ lv ~chikuwa4/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 chikuwaXX_at_tako-itpass.scitec.kobe-u.ac.jp
chikuwa4_at_tako-itpass.scitec.kobe-u.ac.jp にバウンスが来ていることを確認する.
$ lv ~chikuwa4/Mailbox
とりあえず用の 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 の設定ファイルを作成する. chikuwa4 のアカウントの設定ファイル .qmail を作成し,
/home/chikuwa4/Mailbox
と書く.
mail コマンドをインストールして, 以下のコマンドを実行する.
$ sudo apt-get install bsd-mailx $ export MAIL=~/Mailbox $ mail
他のホストのアドレスで chikuwa4_at_tako-itpass.scitec.kobe-u.ac.jp へメールを送信し, Mailbox の中身を確認する.
参考:<URL:http://man.qmail.jp/jinstall/test.receive.html>
2017 年度 ITPASS サーバ再構築作業でのメモ
- 2017 年度 ITPASS サーバ再構築作業時に 2016 年度以前と同様 qmail-1.03 をインストールしたところ, qmail がうまく起動しなかった.
- 起動失敗の原因は debian (stretch) のアップデートにあると考えられる.
- メールサーバ構築 (qmil, dovecot) (北大 EPnetFaN) を参考に qmail のインストールを行うことで対処した.
- 2018 年度以降の再構築にも同様の作業を行うこととする.
Keyword(s):
References:[[ITPASS2021]2021年度サーバ構築ログ]