FreeBSD 11.4 RELEASE - qmail - 起動スクリプトの作成 - qmail-smtpd
- 1. qmail-smtpd
- 2. qmail-smtpd-ssl
1. qmail-smtpd
インストール後に、もし「/usr/local/etc/rc.d/qmailsmtpd」が作成されていれば削除します(これも、今回はなかったのでその必要はありませんでした)。
rm /usr/local/etc/rc.d/qmailsmtpd
「qmail-smtpd」の起動スクリプトを、作成して編集します。
vi /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」の使用も検討してみましたが、設定が面倒なので、このような設定に落ち着きました。
もっとよい方法があったら誰か教えてください。
2. qmail-smtpd-ssl
前項の「SSL」版です。
本項は、「SSL」の証明書が必要ですので、必ず先に「FreeBSD - メンテナンス・トラブルシュート - メールサーバ」の「証明書」に関する項を参考にして、作成しておいてください。
「qmail-smtpd」の起動スクリプトを、作成して編集します。
vi /usr/local/etc/rc.d/qmail-smtpd-ssl
以下を記述します。
ほとんど前項と同じですので、違う箇所を緑太字にしています。
#!/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_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}
: ${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-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 &
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"
19、26、31、47、50、55行の色付け部分の変更と以下の1行追加だけなので、前項で作成したファイルをコピーして編集する方が速いかもしれません。
50行目の「/etc/ssl/mail/cert.pem」は「メールサーバ」の「証明書を使用する」の項で作成したものです。
セキュリティ対策で別のディレクトリに変えたり、ファイル名を変更している場合は適宜置き換えてください。(以下同様)
蛇足)
「name」を「qmailsmtpd-ssl」にしたかったのですが・・・。
-(ハイフン) が使えないので「qmailsmtpd_ssl」にしました。
|
|