qmailのインストール
概要:既存のメールサーバーsendmailに替えて、アクセス性能改善及びセキュリティ強化の観点からMaildir形式のメールボックスを扱えるqmailによるメールサーバーを構築する。IMAPには対応しない。
1. qmailインストール
- ) qmailインストール準備
qmailインストールに必要なユーザ、グループを作成する
# mkdir /var/qmail ← qmailインストールディレクトリ作成
# groupadd nofiles ← nofilesグループ作成
# useradd -g nofiles -s /sbin/nologin alias -m -d /var/qmail/alias -k /dev/null
← aliasユーザ作成
# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaild ← qmaildユーザ作成
# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmaill ← qmaillユーザ作成
# useradd -g nofiles -d /var/qmail -s /sbin/nologin -M qmailp ← qmailpユーザ作成
# groupadd qmail ← qmailグループ作成
# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailq ← qmailqユーザ作成
# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmailr ← qmailrユーザ作成
# useradd -g qmail -d /var/qmail -s /sbin/nologin -M qmails ← qmailsユーザ作成
- ) qmail関連ファイルのダウンロード
# cd /tmp/work
# wget http://cr.yp.to/software/qmail-1.03.tar.gz ← qmailダウンロード
※qmailの最新版のURLはqmailダウンロードページで確認すること
# tar zxvf qmail-1.03.tar.gz ← qmail展開
# cd qmail-1.03 ← qmail展開先ディレクトリへ移動
# wget http://www.itheart.com/phpgw/qmail-date-localtime.patch
← 日本標準時間対応パッチダウンロード
# wget http://members.elysium.pl/brush/qmail-smtpd-auth/dist/qmail-smtpd-auth-0.31.tar.gz
← SMTP-Auth対応パッチダウンロード
# wget http://qmail.mirrors.summersault.com/qmail-smtpd-relay-reject
← 不正中継拒否対応パッチダウンロード
# tar zxvf qmail-smtpd-auth-0.31.tar.gz ← SMTP-Auth対応パッチ展開
# /bin/mv qmail-smtpd-auth-0.31/* . ← SMTP-Auth対応パッチをqmail展開先ディレクトリへ移動
# wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/qmail-1.03.errno.patch
# wget http://tomclegg.net/qmail/qmail-remote-auth.patch
- ) パッチの適用
# patch < qmail-date-localtime.patch ← 日本標準時間対応パッチ施行
patching file date822fmt.c
# patch < auth.patch ← SMTP-Auth対応パッチ施行
patching file Makefile
patching file TARGETS
patching file qmail-smtpd.8
patching file qmail-smtpd.c
# patch < qmail-smtpd-relay-reject ← 不正中継拒否対応パッチ施行
patching file qmail-smtpd.c
Hunk #1 succeeded at 56 (offset 3 lines).
Hunk #2 succeeded at 226 (offset 9 lines).
Hunk #3 succeeded at 277 (offset 11 lines).
# patch < qmail-remote-auth.patch
patching file qmail-remote.c
patching file Makefile
# patch < qmail-1.03.errno.patch
patching file cdb_seek.c
patching file dns.c
patching file error.3
patching file error.h
注:qmail-1.03.errno.patchは以下のようなエラーメッセージを出力してインストールが失敗してしまうことの対処
/lib/libc.so.6: could not read symbols: 不正な値です
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1
- ) qmailのインストール
# make setup check
・
・
・
./install
./instcheck
- ) qmail初期設定
# ./config-fast `hostname`
Your fully qualified host name is centos5.
Putting centos5 into control/me...
Putting centos5 into control/defaultdomain...
Putting centos5 into control/plusdomain...
Putting centos5 into control/locals...
Putting centos5 into control/rcpthosts...
Now qmail will refuse to accept SMTP messages except to centos5.
Make sure to change rcpthosts if you add hosts to locals or virtualdomains!
- ) qmail設定
以下3行はドメイン名がないので代わりにホスト名をセットする。
# echo `hostname` > /var/qmail/control/me ← 本来は自ドメイン名を送信元ドメイン名にする
# echo `hostname` >> /var/qmail/control/rcpthosts
← 本来は自ドメイン名を受信ドメイン名として追加
# echo `hostname` >> /var/qmail/control/locals
← 本来は自ドメイン名をローカルドメイン名として追加
# echo "MANPATH /var/qmail/man" >> /etc/man.config
← manコマンドでqmailコマンドのマニュアルを参照できるようにする
2. checkpasswordインストール
SMTP認証、POP認証に使用するcheckpasswordをインストールする
- ) checkpasswordのダウンロード
# cd /tmp/work
# wget http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz ← checkpasswordダウンロード
※checkpasswordの最新版のURLはcheckpasswordダウンロードページ
http://cr.yp.to/checkpwd/install.htmlで確認すること
# tar zxvf checkpassword-0.90.tar.gz ← checkpassword展開
- ) パッチの適用
# cd checkpassword-0.90 ← checkpassword展開先ディレクトリへ移動
# vi error.h ← error.h編集
extern int errno;
↓
#include<errno.h> ← 変更
注:error.hの編集は以下のようなエラーメッセージを出力してインストールが失敗してしまうことの対処
/lib/libc.so.6: could not read symbols: 不正な値です
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1
- ) checkpasswordのインストール
# make && make setup check &color(lime){← ???????}:
・
・
・
./install
./instcheck
# chown root:nofiles /bin/checkpassword ← checkpasswordの所有者、所有グループ変更
# chmod 4750 /bin/checkpassword ← checkpasswordが所有者権限で動作するように設定
3. tcpserverインストール
qmailへのSMTP接続制御を行うため、tcpserverが含まれたucspi-tcpをインストールする
- ) tcpserverのダウンロード
# cd /tmp/work
# wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz ← tcpserverダウンロード
※ucspi-tcpの最新版のURLはucspi-tcpダウンロードページ
http://cr.yp.to/ucspi-tcp/install.htmlで確認すること
# tar zxvf ucspi-tcp-0.88.tar.gz ← ucspi-tcp展開
# cd ucspi-tcp-0.88 ← ucspi-tcp展開先ディレクトリへ移動
- ) パッチの適用
# vi error.h ← error.h編集
extern int errno;
↓
#include<errno.h> ← 変更
注:error.hの編集は以下のようなエラーメッセージを出力してインストールが失敗してしまうことの対処。
/lib/libc.so.6: could not read symbols: 不正な値です
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1
- ) ucspi-tcpのインストール
# make setup check
・
・
・
./install
./instcheck
- ) ucspi-tcpの設定
# echo '127.:allow,RELAYCLIENT=""' > /etc/tcp.smtp ← 中継許可ホストに自ホストを登録
# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
← /etc/tcp.smtpをcdb形式に変換
4. fastforwardインストール
sendmail用システム共通メール転送設定ファイル(/etc/aliases)をqmailで利用するのに必要なfastforwardをインストールする
- ) fastforwardのダウンロード
# cd /tmp/work
# wget http://cr.yp.to/software/fastforward-0.51.tar.gz ← fastforwardダウンロード
※fastforwardの最新版のURLはfastforwardダウンロードページ
http://cr.yp.to/fastforward.htmlで確認すること
# tar zxvf fastforward-0.51.tar.gz ← fastforward展開
- ) パッチの適用
# cd fastforward-0.51 ← fastforward展開先ディレクトリへ移動
# vi error.h ← error.h編集
extern int errno;
↓
#include<errno.h> ← 変更
注:error.hの編集は以下のようなエラーメッセージを出力してインストールが失敗してしまうことの対処。
/lib/libc.so.6: could not read symbols: 不正な値です
collect2: ld はステータス 1 で終了しました
make: *** [auto-str] エラー 1
- ) fastforwardのインストール
# make setup check
・
・
・
./instcheck
- ) fastforwardの設定
# chmod 0 /usr/bin/newaliases ← 旧newaliasesコマンド無効化
# mv /usr/bin/newaliases /usr/bin/newaliases.bak ← 旧newaliasesコマンドをリネーム
# ln -s /var/qmail/bin/newaliases /usr/bin/newaliases
← newaliasesコマンドをfastforwardに置換え
# newaliases ← /etc/aliasesのcdb形式データベース作成
# ll /etc/aliases.cdb ← /etc/aliasesのcdb形式データベース作成確認
-rw-r--r-- 1 root root 6594 10月 15 14:13 /etc/aliases.cdb
# echo "|/var/qmail/bin/fastforward -p -d /etc/aliases.cdb" > /var/qmail/alias/.qmail-default
← /etc/aliases.cdbをqmailが参照するように設定
注:ホスト名を変更した場合、newaliasesを再実行すること。
5. qmail設定
- ) qmail設定
# echo "10485760" > /var/qmail/control/databytes
← 送受信可能メールサイズを10MB=10*1024*1024に制限
注:制限を超えた場合、送信元へエラー通知される。
# touch /var/qmail/control/doublebounceto ← ダブルバウンスメールは破棄する。
注:ダブルバウンスメールとは、送信者・受信者ともに存在しないメールのこと。
- ) Maildir形式メールボックス作成
デフォルトでインストールされているsendmailのメール格納形式は共有ディレクトリ形式(「/var/spool/mail/ユーザ名」というファイルに全てのメールが蓄積されていく形式)だが、アクセス性能改善及びセキュリティ強化の観点からqmailデフォルトのMaildir形式へ移行する。
なお、~/Maildir, ~/Maildir/new, ~/Maildir/cur, ~/Maildir/tmp の属性は700 である。
Maildirディレクトリはテンプレートディレクトリーで既に設定されている。
- ) /etc/servicesへのプロトコル・ポート設定
/etc/servicesにsmtpとpop3を登録する。 /etc/servicesの編集。
# vi /etc/services
smtp 25/tcp mail
pop3 110/tcp pop-3
この2種類が登録されていることを確認する。なければ追記する。
- ) エイリアスの設定
qmailでは,rootは直接メールを受取ることができない。
そこで、.qmail-rootでroot宛のメールを受取る人(のメールアドレス)
(複数の宛先指定可能)を書く。
postmaster,mailer-daemon,root宛てメールに対してエイリアスを設定する。
各ファイルをテキストエディタで開いてメール管理者など必要に応じてメールアドレスを指定しておく。
# cd /var/qmail/alias/
# touch .qmail-postmaster
# touch .qmail-mailer-daemon
# touch .qmail-root
# chmod 644 .qmail*
# vi .qmail-root
&sysadmin
&sysadmin@localhost.com
6. qmail起動
- ) 旧SMTPサーバー停止
SMTPサーバーをqmailに置換えるため、現在起動しているSMTPサーバー
(sendmail)を停止する。
なお、sendmailは不要だが、依存しているパッケージが多数あるので
アンインストールはしないようにする。
# /etc/rc.d/init.d/sendmail stop ← sendmail停止
sendmailを停止中: [ OK ]
sm-clientを停止中: [ OK ]
# chkconfig sendmail off ← sendmail自動起動設定解除
- ) 既存メールサーバーの停止
メールデータ移行中にメールを受け付けないようにするため、メールサーバーは停止しておく。
# /etc/rc.d/init.d/sendmail stop
- ) sendmailコマンド置換え
CGI等でメール通知に利用するsendmailコマンドをqmailに置換える。
# chmod 0 /usr/lib/sendmail ← 旧sendmailコマンド無効化
# chmod 0 /usr/sbin/sendmail ← 旧sendmailコマンド無効化
# mv /usr/lib/sendmail /usr/lib/sendmail.bak ← 旧sendmailコマンドをリネーム
# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak ← 旧sendmailコマンドをリネーム
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail ← sendmailコマンドをqmailに置換え
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail ← sendmailコマンドをqmailに置換え
- ) qmail起動スクリプト作成
- 【dot-forward利用する場合】
# cp /var/qmail/boot/home+df /var/qmail/rc
← qmail起動コマンドサンプルを所定の場所へコピー
- 【dot-forward利用しない場合】
# cp /var/qmail/boot/home /var/qmail/rc
← qmail起動コマンドサンプルを所定の場所へコピー
# vi /var/qmail/rc
途中にある ./Mailbox の部分を ./Maildir/ (←最後のスラッシュが重要)としておく
qmail-start ./Mailbox splogger qmail
↓
qmail-start ./Maildir/ splogger qmail
# yum -y install tcsh ← cシェルインストール
# vi /etc/rc.d/init.d/qmail ← qmail起動スクリプト作成
#!/bin/bash
#
# qmail
#
# chkconfig: 2345 80 30
# description: qmail start/stop script
# Source function library.
. /etc/rc.d/init.d/functions
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
[ -f /var/qmail/rc ] || exit 0
start() {
# Start daemons.
if [ -z $(/sbin/pidof qmail-send) ]; then
echo -n "Starting qmail"
# qmail
csh -cf '/var/qmail/rc &' 2>&1 > /dev/null
# SMTP
tcpserver -qv -l0 -HR -u `id -u qmaild` -g `id -g qmaild` \
-x /etc/tcp.smtp.cdb 0 smtp \
fixcrio qmail-smtpd `hostname` /bin/checkpassword /bin/true 2>&1|\
splogger smtp &
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/qmail
return $RETVAL
else
echo "qmail is already started"
fi
}
stop() {
# Stop daemons.
if [ ! -z $(/sbin/pidof qmail-send) ]; then
echo -n "Shutting down qmail"
/bin/kill $(/sbin/pidof tcpserver)
/bin/kill $(/sbin/pidof qmail-send)
until [ -z $(/sbin/pidof qmail-send) ] && [ -z $(/sbin/pidof tcpserver) ]; do :; done
echo
rm -f /var/lock/subsys/qmail
else
echo "qmail is not running"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
if [ ! -z $(/sbin/pidof qmail-send) ] ; then
echo -n "qmail (pid"
echo -n " `/sbin/pidof qmail-send`"
echo -n " `/sbin/pidof tcpserver`"
echo ") is running..."
else
echo "qmail is stopped"
fi
;;
*)
echo "Usage: qmail {start|stop|restart|status}"
exit 1
esac
exit 0
qmail起動スクリプトへ実行権限付与
# chmod +x /etc/rc.d/init.d/qmail
- ) qmail起動
# /etc/rc.d/init.d/qmail start ← qmail起動
Starting qmail
# chkconfig qmail --add ← qmailをchkconfigへ追加
# chkconfig qmail on ← qmail自動起動設定
# chkconfig --list qmail ← qmail自動起動設定確認
qmail 0:off 1:off 2:on 3:on 4:on 5:on 6:of
7. ポート25番のOPEN
ネットワーク上でTCP/IPの25番ポートが開いていること。(サーバー、クライアント、ルーターなどのファイヤーウォールやセキュリティー設定で OPENされていること。)
8. Muttインストール
Maildir 形式のメールに対応しているテキストベースのMUA、Muttをインストールする。
- ) Muttのインストール
# yum -y install mutt
==========================================================================================
Package Arch Version Repository Size
==========================================================================================
Installing:
mutt i386 5:1.4.2.2-3.0.2.el5 base 1.1 M
Transaction Summary
==========================================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
- ) Muttの設定
- Muttrcの設定
# vi /etc/Muttrc
最低限修正必要な箇所は以下。
set folder="~/Maildir"
set mbox="~/Maildir"
set mbox_type=Maildir
set spoolfile="~/Maildir"
- /root/.muttrcの設定
root に "su -" したままメールの確認をしたいことがあるので、root の時 Localのユーザーmaint のメールボックスを読めるように.muttrcを設定する。
# vi /root/.muttrc
set folder="~maint/Maildir"
set mbox="~maint/Maildir"
set spoolfile="~maint/Maildir"
set from="root@acompass.net
set realname="root"
注:mutt を '-x' オプションで起動すると UCB Mail 互換モードで 動作する。
- muttの起動
# mutt ←コマンドを入力すると以下のように表示
q:Quit d:Del u:Undel s:Save m:Mail r:Reply g:Group ?:Help
1 F Oct 10 To maint@loca (0.1K) Test
2 F Oct 13 To maint@acom (0.1K) Test
- muttの使用方法
1行目にコマンドが表示されているので該当のキーを押下する。
?でHelpが表示される。
上下の矢印キーでメールを選択して、エンターキーで内容を表示する。
9. qmail-pop3d設定(受信メールサーバーをPOPにする場合)
- ) qmail-pop3d設定
# vi /etc/rc.d/init.d/qmail ← qmail起動スクリプト編集
start() {
# Start daemons.
if [ -z $(/sbin/pidof qmail-send) ] ; then
echo -n "Starting qmail"
# qmail
csh -cf '/var/qmail/rc &' 2>&1 > /dev/null
# SMTP
tcpserver -qv -l0 -HR -u `id -u qmaild` -g `id -g qmaild` \
-x /etc/tcp.smtp.cdb 0 smtp rblsmtpd -r relays.ordb.org \
fixcrio qmail-smtpd `hostname` /bin/checkpassword /bin/true 2>&1|\
splogger smtp &
----追加(ここから)----
# POP3
tcpserver -qvRH -u `id -u qmaild` -g `id -g qmaild` \
0 pop3 qmail-popup `hostname` /bin/checkpassword \
qmail-pop3d Maildir 2>&1 | splogger pop3 &
----追加(ここまで)----
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/qmail
return $RETVAL
else
echo "qmail is already started"
fi
}
# /etc/rc.d/init.d/qmail restart ← qmail再起動
Shutting down qmail
Starting qmail
- ) ポート110番のOPEN
ネットワーク上でTCP/IPの110番ポートが開いていること。(サーバー、クライアント、ルーターなどのファイヤーウォールやセキュリティー設定で OPENされていること。)
10. メールソフト設定(受信メールサーバーをPOPにする場合)
自宅や会社等の複数拠点でメールを使用する場合で、メールボックスを同期しなくてもいい場合
(例:会社で受信したメールは自宅で受信できなくてもいい場合)、受信メールサーバーにPOPを使用する。
ここでは、メールソフトとしてOutlook Expressの設定について説明する。
- ) Outlook Expressを起動する。
- ) メニューの「ツール」⇒「アカウント」⇒「メール」タブ⇒「追加」ボタン⇒「メール」としてメール設定を行う。
- ) 「表示名」に送信者の名前(任意)を入力して「次へ」をクリックする。
- ) 「電子メールアドレス」に送信者のメールアドレス(例:centos@acompass.net)を入力して「次へ」をクリックする。
- ) 「受信メールサーバー」にメールサーバー名(例:mail.acompass.net)を入力する。
- ) 「送信メールサーバー」にメールサーバー名(例:mail.acompass.net)を入力して「次へ」をクリックする。
- ) 「パスワード」にパスワードを入力して「次へ」をクリックする。
- ) 「完了」をクリックする。
- ) 追加したアカウントをダブルクリックしてプロパティを開く。
- ) 「サーバー」タブの「このサーバーは認証が必要」をチェックする。
- ) 「OK」をクリックする。
11. キューに溜まっているメールを表示するツールのインストール
qmailのqueueから特定のメールだけを表示・削除できるツールqueue-adminを導入する。
- ) queue-adminのインストール
対象となるファイルの文字コードがEUCのため一度PCにダウンロードしてUTF-8にコード変換して、サーバーにアップロードする。
・ファイルを[ http://cmf.ohtanz.com/download/queue-admin.txt ]からPC上にダウンロードする。
・PC上でEUCからUTF-8にコード変換する。
・ファイルをサーバーの/tmp/workにアップロードする。
・インストールする。
# cd /tmp/work
# mv queue-admin.txt /var/qmail/bin/queue-admin
# chmod 755 /var/qmail/bin/queue-admin
- ) 使用例
- queueに溜まっているメールのリストを表示
# /var/qmail/bin/queue-admin --ls
- キュー番号「1111111」「2222222」のメールを表示
# /var/qmail/bin/queue-admin --cn 1111111 2222222
- Toヘッダーに「aaa@example.com」「bbb@examle.com」が含まれるメールを削除。
# /etc/rc.d/init.d/qmail stop
# /var/qmail/bin/queue-admin --dt aaa@examle.com bbb@examle.com
# /etc/rc.d/init.d/qmail start
- Subjectヘッダーに「test1」「test2」が含まれるメールを表示
# /var/qmail/bin/queue-admin --ss test1 test2
- メール本文に「test1」「test2」が含まれるメールを表示
# /var/qmail/bin/queue-admin --sb test1 test2