トップ   サーバー構築   旅行日記   リンク   About  

Qmail基本機能編

ここではメールサーバーとして構築するために必要な機能をインストールする方法を紹介します。

材料をそろえよう

ソースファイルの入手
qmail-1.03.tar.gz
checkpassword-0.90.tar.gz
ucspi-tcp-0.88.tar.gz
vpopmail-5.4.2.tar.gz
pbs4q-0.2.1.tar.gz
パッチ
qmail-glibc.patch
qmail-date-localtime.patch
qmail-smtpd-relay-reject
checkpassword-glibc.patch
ucspi-tcp-glibc.patch
qmailqueue-patch
※Glibc.patchはRedhat9およびFedora Core用のパッチです。その他のOSでは必要ありません。また他のLinuxOSでは別のパッチが必要になる場合があるかもしれませんのでその場合は他のサイトのご利用OSのQMailインストールページを参照してください。

ユーザーアカウントの登録

グループを追加する
groupadd -g 710 nofiles
groupadd -g 711 qmail
ユーザーを追加する
useradd -M -u 710 -g nofiles -s /bin/false -d /var/qmail/alias alias
useradd -M -u 711 -g nofiles -s /bin/false -d /var/qmail qmaild
useradd -M -u 712 -g nofiles -s /bin/false -d /var/qmail qmaill
useradd -M -u 713 -g nofiles -s /bin/false -d /var/qmail qmailp
useradd -M -u 714 -g qmail -s /bin/false -d /var/qmail qmailq
useradd -M -u 715 -g qmail -s /bin/false -d /var/qmail qmailr
useradd -M -u 716 -g qmail -s /bin/false -d /var/qmail qmails
/bin/falseはシェルを実行させなくするためのオプション,-Mはドットファイルをを作成しなくするためのオプションです。

QMail本体のインストール

tar xvfz qmail-1.03.tar.gz
cd ../qmail-1.03
patch -s -p1 < ../qmail-date-localtime.patch ※1
patch -s < ../qmail-glibc.patch ※2
patch -p0 < ../qmail-smtpd-relay-reject ※3
patch < ../qmailqueue-patch ※4
make
make man
make setup check
※1 ローカルタイムパッチ
※2 RedHat系 glibc用パッチ(Fedora Coreも要)
※3不正中継防止用のパッチ
※4ウイルス対策用パッチ(qmail-scannerを使う時)
./config-fast qurataro.com
※make中にエラーが出る場合
Fedora Coreではこのエラーは出ませんでしたが、Redhat9ではGlibcパッチを当てても出ます。そこでソースに以下の修正を加えます。
vi error.h 三行目をincludeに変更する。 #include

Qmail-pop3dのインストール

Qmail単体だとサーバーに配信されたメールをクライアント側に持ってくることはできません。そこでメールを取り出す手段として、POP(Post Office Protcol)があります。
cd ../checkpassword-0.90
patch -s < ../checkpassword-glibc.patch
make
make setup check
※Redhat9,Fedora Coreの場合はパッチが必要である。 ↑

TCP Serverのインストール

tar xvfz ucspi-tcp-0.88.tar.gz
cd ../ucspi-tcp-0.88
patch -s < ../ucspi-tcp-glibc.patch
make setup check
※Redhat9,Fedora Coreの場合はパッチが必要である。

Vpopmailのインストール

本来メールアカウントを作成する場合は、OSのユーザーアカウント登録を行わなければならない為、LinuxやUnixのOS上にユーザーがメールアカウント分だけ増えることになる。

ユーザーとグループを追加する

groupadd -g 89 vchkpw
useradd -g vchkpw -u 89 vpopmail -M -s \
    /bin/false -d /usr/local/vpopmail
※ユーザーID、グループIDは89番を推奨します。
これはFreeBSDの開発元がユーザーID,グループID「89」をVpopmail用として予約しているからである。
またユーザー名に「vchkpw」を使うのは昔Vpopmailはvchkpwと呼ばれていたためその名残が今でも残っているためである。

インストール

tcp.smtpファイルを/etc直下に作る。
これはsmtp認証のDBをvpopmailが作成する歳に参照されるファイルであるため必須。
/etcの直下にtcp.smtpを作成します。 中身は以下のように(テキストファイル)
vpopmailをPOP before SMTPで動かす場合に必要なファイルなので必ず作成します。
#
#  /var/qmail/control/tcp.smtp
#
127.0.0.1:allow,RELAYCLIENT=""
192.168.1.:allow,RELAYCLIENT=""
xxx.xxx.xxx.xxx:allow,RELAYCLIENT=""
※xxx.xxx.xxx.xxxのところにはデフォルトゲートウェイを入力します。
./configure --enable-roaming-users=y \
--enable-tcpserver-file=/etc/tcp.smtp \
--enable-relay-clear-minutes=10 \
--enable-logging=y  --enable-clear-passwd=n
make
make install

ドメイン名を登録する。

Vpopmailは1つだけでなく複数のドメイン名を登録し、ドメインごとにユーザを管理することができる。 /usr/local/vpopmail/bin/vadddomain [ドメイン名] この時パスワードが聞かれますので、パスワードを2回入力します。 ここでセットされるパスワードはpostmaster@[ドメイン名]になります。

Postmasterのパスワードを変更する

/usr/local/vpopmail/bin/vpasswd postmaster@[ドメイン名] パスワードを忘れてしまったとき /usr/local/vpopmail/bin/vuserinfo postmaster@[ドメイン名] ↑

TCP rules の設定

起動shellから呼ばれるファイルを生成する。 tcprules /usr/local/vpopmail/etc/tcp.smtp.cdb \ /usr/local/vpopmail/etc/tcp.smtp.tmp < /etc/tcp.smtp

起動シェルの作成

/var/qmail/rcの作成
cp /var/qmail/boot/home /var/qmail/rc
chmod 755 /var/qmail/rc
vi /var/qmail/rc
qmail-start ./Maildir/ splogger qmail ※
※MailboxをMaildir/に変更する。
変更する意味は、Mailbox方式はアカウントに対して何通メールがたまっても1つのファイルとして管理される。
しかしMailbox方式だとメール1通に対して1つのファイルで管理されるため、メールによる不具合が起きた場合に対応が楽である。
たとえば、大容量のメールがアカウントに届いた場合にそのメールが引っかかって他のメールが受信できない場合がよくある。
そんな時Mailbox方式だと他のメールまで一緒に削除しなければアカウントの回復ができないが、Maildir方式だと不具合があるメールだけを削除すれば、他のメールは受信できる。

Pop Before SMTP

数あるメール送受信のセキュリティー認証のひとつである。
何も対策をしていないメールサーバーは、メールの受信はパスワードに守られているため受信はできないが、送信はどんなアカウントでも成りすましてできてしまいます。
そこでセキュリティー認証を設置することで、メールアカウントのパスワード認証ができるものしかメールを送信できなくなるのです。
cd .. 
tar zxvf pbs4q-0.2.1.tar.gz
cd pbs4q/ 
make 
make install 
chown qmaild:nofiles /var/pbs4q/ip/
起動シェルの作成 起動シェルを作成します。
これを/etc/rc.d/init.d/qmailに作成します。
記述の内容は以下になります。
#!/bin/sh
#
# Startup script for qmail-daemon
#
# chkconfig: 345 85 15
# description: qmail
# processname: tcpserver
#

. /etc/rc.d/init.d/functions

#
# Start/stop processes required for qmail
#

case "$1" in
start)
        echo -n "Starting qmail:  "
        sleep 1s
        csh -cf '/var/qmail/rc &'
        echo -n "Starting tcpserver-POP3:  "
        sleep 1s
        /usr/local/bin/tcpserver -H -R -l 0 0 110 \
        /var/qmail/bin/qmail-popup qurataro.com \
        /usr/local/vpopmail/bin/vchkpw \
        /usr/local/bin/pbs4q1 \
        /var/qmail/bin/qmail-pop3d Maildir &
        echo -n "Starting tcpserver-SMTP:  "
        sleep 1s
        /usr/local/bin/tcpserver -H -R -l 0 -v -p -u \
        qmaild -g nofiles -x /usr/local/vpopmail/etc/tcp.smtp.cdb \
        0 25 /usr/local/bin/pbs4q2_smtp \
        /var/qmail/bin/qmail-smtpd &
        echo
        ;;

restart)
        $0 stop
        sleep 1s
        $0 start
        ;;

stop)
        echo -n "Shutting down tcpserver:  "
        killproc tcpserver
        echo
        echo -n "Shutting down qmail:  "
        killproc qmail-send
        echo
        ;;

*)
        echo "Usage: $0 {start|restart|stop}"
        exit 1

esac

exit 0

処理の登録・起動

実行権限を与えます。
chmod 755 /etc/rc.d/init.d/qmail
chkconfig に登録
chkconfig --add qmail

OS起動時に起動する設定

chkconfig qmail on
起動します
service qmail start
startコマンドの後は下記のようなメッセージが出ます。 Starting qmail: [1] 12015 Starting tcpserver-POP3: Starting tcpserver-SMTP: tcpserver: status: 0/40

動作確認

ここまでで一通りの設定は終わりです。
そしたら実際にメールソフトの設定と動作テストをしてみましょう。

ユーザーアカウントの登録

テストでも本番で使うのでもかまいませんのでとりあえず何かユーザーを登録しましょう。
/usr/local/vpopmail/bin/vadduser test@qurataro.com
パスワードを2回聞いてきますので、2回入力します。
※上記アカウント(test@qurataro.com)は実際に存在しませんのでメールしないでください。
Telnetによる動作確認 メールサーバーがちゃんと起動しているかどうかはTelnetを用いると簡単に確認できます。
telnet qurataro.com 110
+OK <12027.1093837931@qurataro.com>
user test@qurataro.com
+OK
pass testtest
+OK
list
+OK
.
110はSMTPのポート番号です。
起動シェルおよび起動アプリケーションが正しく設定されていれば上記のように+OKが帰ってきます。
ユーザーアカウントは必ずドメイン名まで入力してください。
それはVpopmailは複数のドメインを管理できるため、ドメイン名を入力しなければ目的のアカウントまでたどり着くことができないのです。
ちなみにuserは存在しないアカウントを入力しても+OKが帰ってきます。
passはパスワードです。このパスワードを入力して+OKが帰ってくるのであれば認証はOKです。
帰ってこない場合は、アカウント情報が間違っているか、設定に不具合があるかが考えられます。
もう一度今までの流れを振り返って見ましょう。
Listコマンドで現在のアカウントにたまっているメールの数を調べることができます。

コマンドによるメール送信テスト

自サーバー内のアカウントへ送信テスト
echo to: test | /var/qmail/bin/qmail-inject
外部サーバーへのメール送信テスト
echo to: test@hotmail.com | /var/qmail/bin/qmail-inject
余談 さまざまなVpopmailのインストールページを参照しましたが、telnet時のユーザーアカウントにドメイン名も入力することに触れておらず、おまけにTelnet動作確認の時にユーザーアカウント名だけを入力した記述があり、この環境では動作確認できるはずがないのに・・と思いました。
この情報の混乱でVpopmailの設定が遅れてしまいました。

Sendmailの環境の削除

RedhatやFedora CoreなどのLinuxでは最初からSendmailがインストールされています。
そこでSendmail環境の削除作業を行います。
この作業を行わないとサーバーを再起動した時、Sendmailとぶつかって起動なくなってしまうので必ず行いましょう。
現在起動中のセッションをkill
ps -ef | grep sendmail
root      1547     1  0 Sep09 ?        00:00:00 sendmail: ac.....
smmsp     1556     1  0 Sep09 ?        00:00:00 sendmail: Qu.....
上記、表示の場合「1547」と「1556」がジョブ番号になりますので、killします。
kill 1547 1556

ServiceコマンドでSendmailの変わりにqmailが起動するようにする

Linuxに初期設定されているSendmailの起動プログラムを利用し、sendmailの変わりにqmailが起動するように変更する。
mv /etc/init.d/sendmail /etc/init.d/sendmail.bak
ln -s /etc/init.d/qmail /etc/init.d/sendmail
こうすることでLinux起動時のserviceコマンドでSendmailの変わりにQmailが起動する。

Sendmailのコマンドをqmailのコマンドに置き換える

コマンドでSendmailが起動するのをQmailが立ち上がるように変更する。
mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
Copyight (C) qurataro.com 2004-2007 quraportal All Rights. Reserved.