1. 起動スクリプトの作成
起動スクリプトを作成・編集します。
起動スクリプトは5つ作成します。
qmail-start ← qmail
qmail-smtpd ← smtp
qmail-smtpd-ssl ← smtp SSL
qmail-pop3d ← pop3
qmail-pop3d-ssl ← pop3 SSL
2. qmail-start
インストール後に、もし「/usr/local/etc/rc.d/qmailsend」が作成されていれば削除します(結局、今回はなかったのでその必要はありませんでした)。
rm /usr/local/etc/rc.d/qmailsend
qmail の起動スクリプト
/usr/local/etc/rc.d/qmail-start
を作成して以下のように編集します。
#!/bin/sh
#
# PROVIDE: qmailstart
# REQUIRE: LOGIN cleanvar
# KEYWORD: shutdown
qmailstart_enable=${qmailstart_enable:-"NO"}
. /etc/rc.subr
name=qmailstart
rcvar=qmailstart_enable
load_rc_config $name
start_cmd=qmailstart_start
procname=/var/qmail/bin/qmail-send
command=/var/qmail/bin/qmail-send
pidfile=/var/run/qmailstart.pid
qmailstart_start()
{
echo "Starting qmail-start."
exec env - PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir/ splogger qmail &
echo $! > $pidfile
}
run_rc_command "$1"
3~5行は、先頭に # がついていますが、ただのコメントではありません。
man コマンドで rcorder を参照しましょう。
3. qmail-smtpd
インストール後に、もし「/usr/local/etc/rc.d/qmailsmtpd」が作成されていれば削除します(これも、今回はなかったのでその必要はありませんでした)。
rm /usr/local/etc/rc.d/qmailsmtpd
qmail-smtpd の起動スクリプト
/usr/local/etc/rc.d/qmail-smtpd
を作成して、以下のように編集します。
#!/bin/sh
# $FreeBSD: head/mail/qmail/files/qmailsmtpd.in 400559 2015-10-30 23:07:16Z bdrewery $
#
# PROVIDE: qmailsmtpd
# REQUIRE: LOGIN cleanvar
# KEYWORD: shutdown
#
# To use the checkpassword interface to qmail-smtpd, set
# qmailsmtpd_checkpassword to the full path to the checkpassword program (e.g.
# security/checkpassword or security checkpassword-pam).
#
# Note: tcpserver can be found in the sysutils/ucspi-tcp package.
#
# qmailsmtpd_checkpassword could be set to e.g. /usr/local/bin/checkpassword-pam
. /etc/rc.subr
name=qmailsmtpd
rcvar=qmailsmtpd_enable
load_rc_config $name
: ${qmailsmtpd_tcpserver:=/usr/local/bin/tcpserver}
: ${qmailsmtpd_tcprules:=/usr/local/bin/tcprules}
: ${qmailsmtpd_pidfile:=/var/run/qmailsmtpd.pid}
: ${qmailsmtpd_enable:=NO}
: ${qmailsmtpd_cdb:=/etc/tcp/tcp.smtp}
: ${qmailsmtpd_flags="-R -H -u 82 -g 81"}
: ${qmailsmtpd_host:=0}
: ${qmailsmtpd_port:=smtp}
: ${qmailsmtpd_smtpd:=/var/qmail/bin/qmail-smtpd}
: ${qmailsmtpd_fqdn:=`hostname`}
: ${qmailsmtpd_checksubprogram:=/usr/bin/true}
start_cmd=qmailsmtpd_start
start_precmd=qmailsmtpd_precmd
pidfile=${qmailsmtpd_pidfile}
procname=${qmailsmtpd_tcpserver}
qmailsmtpd_start()
{
if [ -n "$qmailsmtpd_checkpassword" ]; then
qmailsmtpd_usercheck="$qmailsmtpd_fqdn $qmailsmtpd_checkpassword $qmailsmtpd_checksubprogram"
fi
echo "Starting qmailsmtpd."
$qmailsmtpd_tcpserver -v
-x $qmailsmtpd_cdb.cdb \
$qmailsmtpd_flags $qmailsmtpd_host \
$qmailsmtpd_port \
$qmailsmtpd_smtpd \
$qmailsmtpd_usercheck \
2>&1 | /var/qmail/bin/splogger smtpd &
pid=`expr $! - 1`
echo $pid > $pidfile
}
qmailsmtpd_precmd()
{
if ! [ -e "${qmailsmtpd_tcpserver}" ]; then
echo "sysutils/ucspi-tcp is required" >&2
return 1
fi
if ! [ -e "${qmailsmtpd_cdb}" ]; then
echo "TCP rules file '${qmailsmtpd_cdb}' is missing." >&2
return 1
fi
$qmailsmtpd_tcprules $qmailsmtpd_cdb.cdb $qmailsmtpd_cdb.tmp < $qmailsmtpd_cdb \
|| return 1
}
run_rc_command "$1"
49行目の -v オプションは、tcpserver のログを冗長(Verbose)にしています。
起動・終了・接続の都度ログを出力しますので、抑えるのであれば、-v をはずします。(以下同様)
56~57行目は、いささかくるしまぎれの設定ですので解説しておきます。
55行目で splogger に出力を食わせているのは、デフォルトの設定だと、ログが標準出力もしくはエラー出力に表示されてログに記録されないのです。
ログインした状態で再起動するとわかりますが、ログインしたコンソールに simscan のログが出力されてしまうのです。
ところが splogger に出力すると、qmail-smtpd と splogger と2つのプロセスが同時に起動するのです。
で echo $! > $pidfile でプロセスIDを出力すると、$! は最後に起動したプロセスなので、splogger のプロセスID で pid ファイルが出力されてしまうのです。
そうなると stop・restart・status で見る pid が splogger のものなのでまともな判断ができなくなります。
で、pid は最後に起動したプロセスのIDをデクリメントしたものを出力しているのです。
daemontools の使用も検討してみましたが、設定が面倒なので、このような設定に落ち着きました。
もっとよい方法があったら誰か教えてください。
4. qmail-smtpd-ssl
qmail-smtpd を qmail-smtpd-ssl にコピーして
cd /usr/local/etc/rc.d/
cp qmail-smtpd qmail-smtpd-ssl
編集します。
name=qmailsmtpd
rcvar=qmailsmtpd_enable
load_rc_config $name
: ${qmailsmtpd_tcpserver:=/usr/local/bin/tcpserver}
: ${qmailsmtpd_tcprules:=/usr/local/bin/tcprules}
: ${qmailsmtpd_pidfile:=/var/run/qmailsmtpd.pid}
: ${qmailsmtpd_enable:=NO}
: ${qmailsmtpd_cdb:=/etc/tcp/tcp.smtp}
: ${qmailsmtpd_flags="-R -H -u 82 -g 81"}
: ${qmailsmtpd_host:=0}
: ${qmailsmtpd_port:=smtp}
を
name=qmailsmtpd_ssl
rcvar=qmailsmtpd_enable
load_rc_config $name
: ${qmailsmtpd_tcpserver:=/usr/local/bin/tcpserver}
: ${qmailsmtpd_tcprules:=/usr/local/bin/tcprules}
: ${qmailsmtpd_pidfile:=/var/run/qmailsmtpd-ssl.pid}
: ${qmailsmtpd_enable:=NO}
: ${qmailsmtpd_cdb:=/etc/tcp/tcp.smtp}
: ${qmailsmtpd_flags="-R -H -u 82 -g 81"}
: ${qmailsmtpd_host:=0}
: ${qmailsmtpd_port:=smtps}
へ変更します(19、26、31行の色付け部分)。
echo "Starting qmailsmtpd."
$qmailsmtpd_tcpserver -v \
-x $qmailsmtpd_cdb.cdb \
$qmailsmtpd_flags $qmailsmtpd_host \
$qmailsmtpd_port \
$qmailsmtpd_smtpd \
$qmailsmtpd_usercheck \
2>&1 | /var/qmail/bin/splogger smtpd &
を
echo "Starting qmailsmtpd-ssl."
$qmailsmtpd_tcpserver -v \
-s -n /etc/ssl/mail/cert.pem \
-x $qmailsmtpd_cdb.cdb $qmailsmtpd_flags $qmailsmtpd_host \
$qmailsmtpd_port \
$qmailsmtpd_smtpd \
$qmailsmtpd_usercheck \
2>&1 | /var/qmail/bin/splogger smtpds &
へ変更します(47、50、55行の色付け部分)。
50行目の /etc/ssl/mail/cert.pem は「メールサーバ」の「証明書を使用する」の項で作成したものです。
セキュリティ対策で別のディレクトリに変えたり、ファイル名を変更している場合は適宜置き換えてください。(以下同様)
蛇足)
name を qmailsmtpd-ssl にしたかったのですが・・・。
-(ハイフン) が使えないので qmailsmtpd_ssl にしました。
5. qmail-pop3d
qmail-pop3d の起動スクリプト
/usr/local/etc/rc.d/qmail-pop3d
を作成して編集します。
#!/bin/sh
#
# PROVIDE: qmailpop3d
# REQUIRE: LOGIN cleanvar
# KEYWORD: shutdown
qmailpop3d_enable=${qmailpop3d_enable:-"NO"}
. /etc/rc.subr
name=qmailpop3d
rcvar=qmailpop3d_enable
load_rc_config $name
start_cmd=qmailpop3d_start
procname=/usr/local/bin/tcpserver
command=/usr/local/bin/tcpserver
pidfile=/var/run/qmailpop3d.pid
qmailpop3d_start()
{
echo "Starting qmaili-pop3d."
/usr/local/bin/tcpserver -v \
0 pop3 /var/qmail/bin/qmail-popup hogehoge.ne.jp \
/usr/local/bin/checkpassword \
/var/qmail/bin/qmail-pop3d Maildir \
2>&1 | /var/qmail/bin/splogger pop3d &
pid=`expr $! - 1`
echo $pid > $pidfile
}
run_rc_command "$1"
26行目の hogehoge.ne.jp は、対象とするドメイン名へ合わせてください。
6. qmail-pop3d-ssl
qmail-pop3d を qmail-pop3d-ssl にコピーして
cd /usr/local/etc/rc.d/
cp qmail-pop3d qmail-pop3d-ssl
編集します。
name=qmailpop3d
を
name=qmailpop3d_ssl
へ変更します。
pidfile=/var/run/qmailpop3d.pid
を
pidfile=/var/run/qmailpop3d-ssl.pid
へ変更します。
echo "Starting qmaili-pop3d."
/usr/local/bin/tcpserver \
0 pop3 /var/qmail/bin/qmail-popup hogehoge.ne.jp \
/usr/local/bin/checkpassword \
/var/qmail/bin/qmail-pop3d Maildir \
2>&1 | /var/qmail/bin/splogger pop3d &
を
echo "Starting qmaili-pop3d-ssl."
/usr/local/bin/tcpserver -v \
-s -n /etc/ssl/mail/cert.pem \
0 pop3s /var/qmail/bin/qmail-popup hogehoge.ne.jp \
/usr/local/bin/checkpassword \
/var/qmail/bin/qmail-pop3d Maildir \
2>&1 | /var/qmail/bin/splogger pop3ds &
へ変更します(23、26、27、30行の色付け部分)。
「-s -n /etc/ssl/mail/cert.pem」は、必ず「/usr/local/bin/tcpserver」の直後に記述します。
位置が変わると証明書をチェックできず、クライアントとの接続がタイムアウトになります。
これも「hogehoge.ne.jp」は、対象とするドメイン名へ合わせてください。
7. 起動
作成したスクリプトに実行権限を付与します。
chmod +x /usr/local/etc/rc.d/qmail-*
/etc/rc.conf
に以下の行を加えます。
qmailstart_enable="YES"
qmailsmtpd_enable="YES"
qmailpop3d_enable="YES"
起動します。
service qmail-start start
service qmail-smtpd start
service qmail-smtpd-ssl start
service qmail-pop3d start
service qmail-pop3d-ssl start
とりあえず、これでメールの送受信はできます。
「メールサーバ - メール配送テスト」を参考にして、サーバ内で送受信ができるかを確認の後、クライアントのメール設定を行って送受信を確認します。