Solaris 道をゆく(15) - qmailを使ったメールサーバー

コラム: qmailのセキュリティホール

qmailの特徴にセキュリティの高さがありますが、先日始めてとも言えるセキュ リティ上の問題点が作者自身によって報告されました。これは、ある攻撃が行 なわれるとqmail-smtpdがOSのリソースを使いきってしまうというものです(注 11)。この問題に対処するためにちょっとした仕掛けをしておきましょう。実 行例12のようにして、図10のようなスクリプト経由で本当のqmail-smtpdが起 動するようにします。

# cd /var/qmail/bin
# mv qmail-smtpd qmail-smtpd2
# vi qmail-smtpd ← 図10のスクリプトを作成
# chown root qmail-smtpd
# chgrp qmail qmail-smtpd
# chmod 755 qmail-smtpd

実行例12:

図10: qmail-smtpdスクリプト
#/bin/sh
ulimit -d 1024
exec /var/qmail/bin/qmail-smtpd2 ${1+"$@"}


注11: 詳細は http://www.securityfocus.com/bid/2237/ を参照してください。

これにより、qmail-smtpdがOSの資源を使いきってしまうことを防止できます。

自動起動の設定

設定を進めるまえに、Solarisの起動時や終了時に自動で起動、 停止を行なう方法を説明しておきましょう。 図11のような/etc/init.d/qmailスクリプトを作成した上で(注12)、 図12の様にスクリプトのインストールを行なってください(注13)。

図11: qmail起動スクリプト
tcpserver を利用する場合は、## から始まっている行のコメントを外した上で、適切な設定を行なってください。###から始まっている行に付いては、後述する解説を参照してください。

#!/sbin/sh
# /etc/init.d/qmail - Start/Stop qmail

PATH=/usr/local/bin:/usr/bin:/usr/sbin
export PATH

rc=/var/qmail/rc
tcpserver=/usr/local/bin/tcpserver
smtpd=/var/qmail/bin/qmail-smtpd

##qmailuid=xxxxx <-- qmail アカウントの uid を設定する
##nofilesgid=xxxxx <-- nofiles グループの gid を設定する

case "$1" in
start)
echo Starting qmail: "\c"
if [ ! -x $rc ]; then
echo $rc: not found. ; exit 1
else
csh -cf "$rc &"
echo "qmail\c "
fi

if [ ! -x $smtpd -o ! -x $tcpserver ]; then
echo $smtpd: not execute.
/etc/init.d/qmail stop
exit 1
else
## $tcpserver -u $qmailuid -g $nofilesgid 0 smtp /var/qmail/bin/qmail-smtpd &

### $tcpserver -x /var/qmail/tcp.smtp.cdb \
### -u $qmailuid -g $nofilesgid 0 smtp /var/qmail/bin/qmail-smtpd &
echo "qmail-smtpd\c "
fi
echo .

;;
stop)
echo Stopping qmail: "\c"
pkill qmail-send
## kill `ps -ef | grep qmaild | grep -v grep | awk '{print $2;}'`
echo done.
;;
restart)
/etc/init.d/qmail stop && /etc/init.d/qmail start
;;
*)
echo "usage: $0 {start|stop|restart}"
;;
esac

図12: qmail起動スクリプトのインストール

# vi /etc/init.d/qmail <-- qmail スクリプト作成
# chmod 744 /etc/init.d/qmail
# cd /etc/rc1.d
# ln -s ../init.d/qmail K01qmail
# cd /etc/rcS.d
# ln -s ../init.d/qmail K01qmail
# cd /etc/rc2.d
# ln -s ../init.d/qmail S99qmail

注12: 前号で紹介したdaemontoolsから起動することが推奨されていますが、ここは扱いません。

注13: この辺りのディレクトリの役割などに付いては2001年5月号のSolaris速習コース等を参照してください。

qmailクライアントの設定

一通り動作確認が完了したところで、本格的にqmailクライアントとしての設 定を行なっていきましょう。
設定自体はそれほど難しくはありませんが、sendmailとはかなり違います。今 まで当り前のように利用していたsendmailの機能も置き換えが必要になります ので、注意してください。

システムアカウントへのメール配送

qmailではホームディレクトリの所有者がrootのアカウントや、ホームディレクトリの所有権がないアカウントはシステムアカウントとみなされてメールボックスが作成されません。一般的にrootをはじめ、sysやbinなどがこれに該当します。このため、これらのアカウントでメールを受け取るためには、次項で述べるようにqmailのエイリアス機能を利用して、明示的にメールを受信、転送できるように設定を行なう必要があります(注14)。

注14: 実行例xx6で行なった設定はrootを始めとする最低限必要なシステムアカウント宛のメールを受け取る設定になります。

詳細は次項で説明しますが、以下のようにして

# touch ~alias/.qmail-default
# chmod 644 ~alias/.qmail-default

.qmail-defaultファイルを作成することで、システムアカウント宛のメールで明示的に設定が行なわれていないもの全てを受け取ります。まずはこの設定を行なっておくとよいでしょう。
なお、受け取ったシステムアカウント宛のメールはaliasアカウントのメールボックスに蓄積されますので、注意してください。qmailを利用する限り、rootユーザなどがメールボックスを持つことはありません。

エイリアス機能(/etc/aliases)の移行

エイリアスを実現する/etc/aliasesファイルはsendmail用のファイルです(注 15)ので、qmailからは利用することができません。qmailでは~ alias(/var/qmail/alias)以下に.qmail-<エイリアス名>というファイル を各エイリアス毎に作成し、ファイル中で転送先アドレスの設定などを行なう ことで同等の機能を果たします。

注15: UNIXの機能だと思っていた方も多いと思いますが、実はsendmailの 機能です。

なお、ファイルが存在するだけの場合は /var/qmail/rc ファイル中で定義し たデフォルトの動作を行ないます(注15.5)。

注15.5: ここでは従来と同様にメールを受け取る設定にしてあります。 ただし、前項でも述べましたが、エイリアス機能はaliasユーザで実行される ため、メールはaliasユーザ宛のメールとして蓄積されます。

また、.qmail-defaultというファイルを作成することで、 どのエイリアスにも該当しなかったメールに対するデフォルトの動作を定義す ることが可能です。

例えば、root宛のメールを monyo@home.local に転送する場合、/var/qmail/alias/.qmail-rootというファイル中に

&monyo@home.local

と記述します。「&」は転送を示すキーワードになります。その他、このファイル中では以下のような設定が可能になっています。


|<プログラム名> <引数>

メッセージをプログラムに引き渡します。.forward と違って、全体を「"」で囲む必要はありません。

/var/mail/monyo

mbox形式のメールボックスの位置を指定します。なお相対パスの場合はホームディレクトリからのパスを表します。

./Maildir/

Maildir形式のメールボックスの位置を指定します。mbox形式とは末尾に「/」が付いているかどうかで区別します。

なお、ファイルには複数行記述することも可能です。


<- 前へ 2/3 次へ ->

Copyright (C) 1998-2009 TAKAHASHI, Motonobu
Last update: 2005-02-23 14:46:43 JST
webmaster@monyo.com