qmail 1.03 インストールガイド


qmail 1.03 インストールガイド (2005.07.20 更新)

qmail公式 http://www.qmail.org/
qmail FTP ftp://ftp.jp.qmail.org/qmail

qmailはSMTPとPOP機能の両方を兼ね備えたMTA*1です。

ここではqmailを使ってSMTP、POP、それにPop before SMTPの機能を載せます。
使用するモジュール(ファイル)は

qmailqmailソースファイル
ucspi-tcptcpserver経由で動作させるモジュール
checkpasswordPOP認証モジュール
qmail-smtpd-relay-reject'%'等を含むアカウントへのメール受信を禁止する不正利用の対応パッチ
qmail-103.patchDNSに関するUDPパケットが512バイトを超えると処理できなくなる問題の修正パッチ
pbs4qPOP before SMTPモジュール

tcpserverのインストール

qmailの作者が開発したtcpserver経由でqmailを動作させるソフトです。
http://cr.yp.to/ucspi-tcp.html
から最新バージョンを入手します。
執筆時点の最新バージョンは 0.88 です。

wgetでソースファイルを入手し、解凍、make、インストールを行います。
注意
$ で始まるコマンドは一般ユーザーで実行

# で始まるコマンドはrootユーザーで実行を表します。

$ wget ftp://ftp.jp.qmail.org/qmail/ucspi-tcp-0.88.tar.gz
$ tar zxf ucspi-tcp-0.88.tar.gz
$ cd ucspi-tcp-0.88 

$ make 
$ su
Password: xxxxxxx

# make setup check 
# exit

POP認証ツール checkpasswordのインストール

qmail付属のPOPサーバはパスワード認証機能を持っていないため、checkpasswordと一緒に利用します。
APOPの認証ツールは http://checkpw.sourceforge.net/checkpw/ で紹介されています。
ソースファイルは checkpw-1.00.tar.gz です。用途にあったものを選んでください。
ここでは POP認証のcheckpasswordを使用します。

http://cr.yp.to/checkpwd.html
から最新バージョンを入手します。
執筆時点の最新バージョンは 0.90 です。

wgetでソースファイルを入手し、解凍、make、インストールを行います。

$ wget http://cr.yp.to/checkpwd/checkpassword-0.90.tar.gz
$ tar zxvf checkpw-1.00.tar.gz
$ cd checkpw-1.00
$ su
Password: xxxxxxx

# make setup check
# exit

qmailのインストール

次にqmailをインストールします。 事前に環境整備を行います。 まずrootユーザでqmailインストール用のディレクトリを作成します。

$ su -
Password: xxxxxxx

# mkdir /var/qmail

次に動作させるためのユーザーとグループを作成。

# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias alias
# useradd -g nofiles -d /var/qmail qmaild
# useradd -g nofiles -d /var/qmail qmaill
# useradd -g nofiles -d /var/qmail qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail qmailq
# useradd -g qmail -d /var/qmail qmailr
# useradd -g qmail -d /var/qmail qmails
# exit

http://www.qmail.org/top.html
から最新バージョンを入手します。
執筆時点の最新バージョンは 1.03 です。

wgetでソースファイルを入手し、解凍、make、インストールを行います。
同時に不正中継対策パッチ・UDPサイズ修正パッチもあてます。

$ wget ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz
$ wget http://www.qmail.org/qmail-smtpd-relay-reject
$ wget http://www.ckdhr.com/ckd/qmail-103.patch
$ tar xzf qmail-1.03.tar.gz
$ cd qmail-1.03
$ patch -p1 < ../qmail-smtpd-relay-reject
$ patch -p1 < ../qmail-103.patch
$ make
$ make man
$ su -
Password: xxxxxxx

# make setup check

コンフィグを実行し、設定ファイルを作成します。
このとき、通常の ./config ではうまくコンフィグが行えない場合があるります。
あらかじめconfig-fast コマンドを使ってホスト名を明示することでコンフィグが可能になります。

# ./config-fast dreamer-site.net
   Your fully qualified host name is dreamer-site.net.
   Putting mail into control/me...
   Putting mail into control/defaultdomain...
   Putting mail into control/plusdomain...
   Putting mail into control/locals...
   Putting mail into control/rcpthosts...
   Now qmail will refuse to accept SMTP messages except to mail.
   Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

上記のようなコメントが表示されれば正常に処理ができています。
以下のファイルが生成されていますので、確認します。

ファイル名用途説明解説
/var/qmail/control/me自ホスト名hostname.mydomain.netローカルメールサーバのホスト名を指定するために使用。
他の制御ファイルが存在しない場合、このファイルに記述された内容がデフォルト値として使用。
/var/qmail/control/defaultdomainデフォルトのドメイン名mydomain.net配送時にメールを受け取るドメイン
qmail-inject が参照
/var/qmail/control/plusdomain追加のドメイン名mydomain.net+ 記号で終わるメールアドレスに追加するドメインを指定します。
qmail-inject が参照
/var/qmail/control/localsローカルドメイン名のリストlocalhost
hostname.mydomain.net
mydomain.net
ローカルメールアドレスとしてみなすドメイン名を指定します。
qmail-send が参照
/var/qmail/control/rcpthosts受信ドメインのリストlocalhost
hostname.mydomain.net
mydomain.net
別のホストやドメイン宛てのメッセージをサーバで受け取れるようにするために使用します。qmail サーバはこのファイルで指定されていないホスト、ドメイン宛てのメッセージは受け取りません。少なくとも、ローカルホスト名を記述する必要があります。
qmail-smtpd が参照

新規ユーザーを登録した時に自動的にMaildirを 各ユーザーのホームディレクトリに作成してくれます。

# /var/qmail/bin/maildirmake /etc/skel/Maildir; echo ./Maildir/ > /etc/skel/.qmail

起動スクリプトをコピーします。

# cp /var/qmail/boot/home /var/qmail/rc 

Maildir形式にするため、今コピーしたファイルを書き換えます。 (/var/qmail/rcの最下行を次のように変更します)

# vi /var/qmail/rc
qmail-start ./Maildir splogger qmail

エイリアスの設定

postmaster,mailer-daemon,root宛てメールに対してエイリアスを設定します。

# cd /var/qmail/alias/
# touch .qmail-postmaster
# touch .qmail-mailer-daemon
# touch .qmail-root
# chmod 644 .qmail*

テキストエディタで開いて各ファイルにメール管理者など必要に応じてメールアドレスを指定しておくとといいでしょう。

*pbs4qのインストール(POP before SMTP for qmail)

ソースの展開とコンパイル

# exit
$ wget http://mambo.kuhp.kyoto-u.ac.jp/~masahiro/PbS4q/pbs4q-0.2.1.tar.gz
$ tar zxvf pbs4q-0.2.1.tar.gz
$ cd pbs4q 
$ make
$ su
Password: xxxxxxx

# make install 

/etc/tcp.smtpを以下のように作ります。
IPアドレスが 192.168.0.*と127.0.0.* のホストからの接続を許可します。
そのほか、許可するIPがあれば同様に追記してください。

192.168.0.:allow,RELAYCLIENT=""
127.0.0.:allow,RELAYCLIENT=""

tcprulesを実行し、tcp.smtp.cdbファイルを作成

# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp 

/etc/servicesへのプロトコル・ポート設定

/etc/servicesにsmtpとpop3を登録する。 /etc/servicesの編集

# vi /etc/services
smtp  25/tcp  mail
pop3  110/tcp  pop-3

この2種類が登録されていることを確認する。
なければ追記する。

起動確認

コマンドラインより起動させ動作を確認します。

/var/qmail/rc &
/usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -u 12348 -g 54322 0 smtp /usr/local/bin/pbs4q2_smtp /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd &
/usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup dreamer-site.net /bin/checkpassword /usr/local/bin/pbs4q1 /var/qmail/bin/qmail-pop3d Maildir &

送信テスト

送信テストしてみましょう。
To: [USER NAME]で指定するユーザ名はドメインなどを入れなくても同じシステム内のメールユーザであれば送信可能です。 本文は適当で構いません。
最後は[ Ctrl ] + [ D ]で終了すると送信します。

# /var/qmail/bin/qmail-inject

To: [USER NAME]
Subject: Test

Test Mail.
^D

#

指定したユーザの Maildir/new ディレクト配下にメールが届いていれば成功です。

受信テスト

telnetコマンドを使って受信メールの確認を行ってみます。

# telnet 127.0.0.1 110
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
+OK <xxxxxxxx@mydomain.net>
USER [USER NAME]
+OK
PASS ******
+OK
LIST
+OK
1 298
.
RETR 1
+OK
Return-Path: <user2@mydomain.net>
Delivered-To: user1@mydomain.net
Received: (qmail 841 invoked from network); 15 Jun 2005 13:14:00 -0000
Received: from unknown (HELO dude) (user1@127.0.0.1)
by 127.0.0.1 with SMTP; 15 Jun 2005 13:14:00 -0000
Subject: testing

This is a test.

.
QUIT
+OK
Connection closed by foreign host.

LISTコマンドで届いているメールを確認し、RETR 1 で1通目の内容を確認するということになります。

起動設定

ランレベルを指定して起動させる方法とrc.localで設定する方法と2種類記載します。
自分にあった方法を選んでください。

# cd /etc/rc.d/init.d
# vi qmail
#!/bin/sh 
# 
# chkconfig: 345 85 15
# description: Mail server qmail
# processname: qmail
#
# qmail: /var/qmail 
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin 
# Source function library.
. /etc/rc.d/init.d/functions

[ -f /var/qmail/rc ] || exit 0 

case "$1" in 
  start) 
        # Start daemons. 
        echo "Starting qmail." 
        csh -cf '/var/qmail/rc &' 
        /usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -u 12348 -g 54322 0 smtp \
        /usr/local/bin/pbs4q2_smtp \
        /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd &
        echo 

# POP
        /usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup dreamer-site.net \
        /bin/checkpassword \
        /usr/local/bin/pbs4q1 \
        /var/qmail/bin/qmail-pop3d Maildir &

        echo
        touch /var/lock/subsys/qmail 
        ;; 
  stop) 
        # Stop daemons. 
        echo "Shutting down qmail." 
        killproc qmail-send
        killproc tcpserver
        echo
        rm -f /var/lock/subsys/qmail 
        ;; 
  restart) 
        $0 stop 
        $0 start 
        ;; 
  *) 
        echo "Usage: qmail {start|stop|restart}" 
        exit 1 
esac 

exit 0

パーミッションの設定と起動レベルの設定をします。

# chmod +x qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc2.d/S99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc3.d/S99qmail
# ln -s /etc/rc.d/init.d/qmail /etc/rc.d/rc5.d/S99qmail

ランレベルで指定された場合は下記のコマンドで実行し、動作しているか確認してください。

# /etc/rc.d/init.d/qmail start

または /etc/rc.local に記載して起動させる方法もあります。
/etc/rc.local に下記を追記します。

# /etc/rc.d/rc.local
#qmail-pop3d起動
/var/qmail/rc &
/usr/local/bin/tcpserver -vHR -x /etc/tcp.smtp.cdb -u 12348 -g 54322 0 smtp \
/usr/local/bin/pbs4q2_smtp \
/var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd &
# pop start
/usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup dreamer-site.net \
/bin/checkpassword \
/usr/local/bin/pbs4q1 \
/var/qmail/bin/qmail-pop3d Maildir &

rc.localで設定した場合は下記のコマンドでrc.localを再起動してみましょう。

# /etc/rc.local restart

無事に起動を確認して一通りに動作確認を行ってください。

既存sendmailの停止

既存のsendmailが動作している場合は停止させます。

# /etc/rc.d/init.d/sendmail stop
Shutting down sendmail: [ OK ]
# chkconfig --list sendmail
sendmail 0:オフ 1:オフ 2:オン 3:オフ 4:オン 5:オン 6:オフ
# chkconfig --del sendmail
# chkconfig --list sendmail
sendmail 0:オフ 1:オフ 2:オフ 3:オフ 4:オフ 5:オフ 6:オフ

sendmailのwrapper処理

qmailにはsendmail互換プログラムが/var/qmail/bin/sendmailにあります。
このqmailの sendmsil wrapper をsendmailにリンクを貼ります。
これでcgiなどからsendmailのPATH指定で使用できるようになります。
sendmailがインストール済みの場合はrpmコマンドや起動停止処理を行って今後起動しないよう設定してください。
rpm削除コマンド・起動停止処理はここでは割愛します。
sendmailが始めに入っていなければ最後の2行を実行

# mv /usr/lib/sendmail /usr/lib/sendmail.bak 
# mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
# chmod 644 /usr/sbin/sendmail.bak 
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

ルーターの設定

必要に応じてルーターの設定も変更してください。
下記のポートを外部からサーバーへ繋がるようNAT設定を行ってください。

プロトコルPORT
smtp [tcp・udp]25
pop3 [tcp・udp]110
imap [tcp・udp]143

不正中継確認

下記のサイトで不正中継のチェックなどを行っています。
よく利用方法・注意書きを読んで利用してください。

有限会社 長崎ネットワークサービス http://www.nanet.co.jp/
RBL.JP http://www.rbl.jp/
Open Relay Database http://www.ordb.org/

.qmailによるメール転送の設定

/home/USER1/.qmailファイルはsendmail環境で言う .forward に相当するファイル
メールユーザーは転送先アドレスの頭に & をつけて記述することでメールを転送することができる。

ex. USER1場合 /home/USER1/.qmailを作成

# su - USER1
$ vi ~/.forward

用途に応じて下記の手法で内容を追記していきます。

&USER2@provider.ne.jp

USER2@provider.ne.jpに転送を行う。

&USER3

USER3(同システム内のユーザーUSER3)へ転送を行う。

運用メンテナンスなど

メール配送で何らかの原因により延期された場合、配送されるか、もしくは設定した期限になるまでメールキューに蓄積されます。
キューの状態を確認する方法は

# /var/qmail/bin/qmail-qstat

で残っているメッセージ数を確認

# /var/qmail/bin/qmail-qread

キューに蓄積されている個々のメールの詳細情報を表示

キューにメールが滞在できる最大時間の設定は、/var/qmail/control/queuelifetimeを作成し、滞在可能最大時間を秒単位で記述します。

ログ

メール配送のログはsendmailと同じく /var/log/maillog に記録
トラブル時の原因究明にログは重要な参考手段になります。

new msg [メッセージID]			メッセージのログの開始
info msg [メッセージに関する情報]		 メッセージの情報
starting delivery : [配送ID]		  配送開始
status : local 1/10 remote 0/20		   状態表示
delivery [配送ID] : success		  状態表示
status : local 0/10 remote 0/20		   状態表示
end msg : [メッセージID]			キューからメッセージを削除し、
メッセージのログを終了

以上が通常のログ形式です。 異常が発生すると success の箇所に failure、deferralなどが表示されます。
続いてエラーの原因になるメッセージが表示されるはずです。

最後に

以上でqmail(POP before SMTP)のインストールが終了です。
メールサーバーは常に不正中継など悪用される危険がありますので、状態監視・メンテナンスを怠らないよう気をつけてください。 qmailのログは /var/log/mail.log に記載されます。
不正中継・SPAMの踏み台にされていないか確認できます。

今回は記載しませんが、メールユーザをわざわざlinuxのシステムアカウントを作成しなくても利用できるようにする機能 vpopmail バーチャルドメイン があります。
これを組み込むと

  • ドメインやユーザの削除・追加がコマンドで実行可能
  • システムパスワード(/etc/passwd)を作成せずにユーザ追加ができる

などがあります。
紹介しているサイトがたくさんありますので、メールユーザーをたくさん管理する方は是非どうぞ



*1 Message Transfer Agent:メール配送エージェント

Last-modified: 2015-04-23 (木) 15:14:49 (966d)