qmail、vpopmailのインストール&設定 -FreeBSD Lab-

まずはじめに

portsを使用してFreeBSDでメールの送受信ができるようメールサーバのインストール設定を行いたいとおもいます。

しかし、単純にメールサーバと言ってもsendmail、postfix、qmailと多数候補がありどれを使うか迷うところです。

※受信方法の対応まで考えるとpop3d(FreeBSD付属の物),qpoper,vpopmail,Courier-IMAP,dovecotなど選択肢は多岐にわたります。

そこで今回は、最もシンプルで最も枯れていると思われる「qmail」「vpopmail」、そして管理ツールとして「qmailadmin」をインストール・設定してみたいと思います。

また、不正中継対策として「POP before SMTP」を使用します。

※あまりサーバ管理が得意でない、一度セットアップしたらその後あまりメンテナンスしたくないという方に特にお勧めの構成です。

※ただし、テクノロジーとしては枯れてはいますが逆に古さが目立つ構成でもあります。現代の標準的構成であれば不正中継対策には「POP before SMTP」ではなく「SMTP認証」を、メール受信も「POP3」ではなく「POP3S(POP3 over SSL)」を使用するような構成の方が望ましいと思います。これらについては機会があれば記事にしたいと思います。

qmailのインストール

まずはqmail本体をインストールします。

手順は以下の通りなのですが・・・・

# cd /usr/ports/mail/qmail
# make
# make install
#
# /etc/rc.d/sendmail stop                     // sendmailの停止
# vi /etc/make.conf                           // NO_SENDMAIL= trueを追記
# vi /etc/rc.conf                             // sendmail_enabled="NONE"を追加
# vi /etc/mail/mailer.conf                    // こんな感じに書き換えます

2行目のmakeを実行した直後に下記のような大量のオプション選択画面が出てきます。

                    Options for qmail 1.03_7

 [ ] SMTP_AUTH_PATCH        Provide SMTP Authentication         
 [ ] QMAILQUEUE_PATCH       run a QMAILQUEUE program            
 [ ] BIG_TODO_PATCH         enable big_todo qmail patch         
 [ ] BIG_CONCURRENCY_PATCH  use a concurrency greater than 240  
 [ ] OUTGOINGIP_PATCH       set the IP address to send messages 
 [X] LOCALTIME_PATCH        emit dates in the local timezone    
 [ ] QMTPC_PATCH            send email using qmtp protocol      
 [ ] MAILDIRQUOTA_PATCH     Maildir++ support                   
 [ ] BLOCKEXEC_PATCH        block many windows viruses/worms    
 [ ] DISCBOUNCES_PATCH      discard double-bounces              
 [ ] SPF_PATCH              Implement SPF checker               
 [ ] TARPIT_PATCH           Implement TARPIT functions          
 [ ] EXTTODO_PATCH          extern high-perform. todo processing
 [ ] QEXTRA                 enable QUEUE_EXTRA copy feature     
 [X] RCDLINK                create rc.d/qmail.sh symlink        

                      [  OK  ]       Cancel                     

正直なところこれにはかなりびびります・・・はじめてだと何を選択したらいいのかわかりません・・・

と、いうわけで各オプションの説明を簡単にまとめて見ました。

※調べても良くわからなかった物に関しては、portsのMakefileと実パッチのソースコードを読んで動作を推測しているので間違っている可能性もありますがその点ご容赦ください。

SMTP_AUTH_PATCHSMTP認証機能を追加する。POP before SMTPより安全。でも今回は「POP before SMTP」を使用するので使わない
QMAILQUEUE_PATCHqmail-smtpd からqmail-queue以外のプログラムを呼び出せるようにする。 これによりメールが配送処理(キュー)に入る前にウィルスチェックなどの処理を行うことができるらしい。
qmail-scannerとか使う場合には必須らしい。
BIG_TODO_PATCH大量にメールを処理する場合ファイルシステムがボトルネックになることがあるので、ファイルを階層化することでディレクトリの検索速度を上げる。
個人レベルで必要になるとは思えない
BIG_CONCURRENCY_PATCH大量にメールを送るような用途に使用する場合はあった方がよいらしい。
並列処理で240以上と書いてあるが一日何万通送るつもりなんだって感じのサーバレベルじゃなきゃ必要ないと思います。
OUTGOINGIP_PATCHメールのメッセージに送信サーバーのIPを追加する。基本必要なし。
LOCALTIME_PATCHお勧め:送信メールの日時をローカルタイム(日本ならJST)で送れるようにする。
※これを設定しないとメールの送信日時が全てUTC(世界標準時間)になってしまいます。。
QMTPC_PATCHSMTPプロトコルでなくQMTP(SMTPの軽量版プロトコル)。実質qmail用の独自規格なので必要ない
MAILDIRQUOTA_PATCH Maildir++形式で保存する。Maildir++の特徴:ファイル名に「:(コロン)」を使わないのでwindowsサーバなどと連携するときにいいらしいが詳しくは知らない。
POP3で受信している分には(今回の設定では)特に必要はない
BLOCKEXEC_PATCH パッチのソースコードを読んだ感じだとウィルスチェックのようなものではなく、メールの内容を見て特定の文字列を含むバイナリを排除しているみたい(自信なし・・・)
オプション画面の説明にあるような効果があるようには思えない・・・たぶん必要ない。
DISCBOUNCES_PATCH qmailのダブルバウンスメールの処理がRFCに準拠していないため、他のMTA(postfix)にダブルバウンスメールを送信する際に問題になる(受け取ってくれない)、それを回避するためのパッチ。
qmail単体で運用している場合はそれほど必要ないと思われる。
SPF_PATCH ドメインを偽装したメールは受け取らないようにする。※くわしくは「SPF」を参考にしてください
TARPIT_PATCH spam(主にボット)用対策。大量の「RCPT TO」コマンドに対して、sleepで間隔をあけて(応答遅延させて)ボットが送信処理をあきらめるようにしむけるらしい。
EXTTODO_PATCH qmailが大量のメールを処理するとメール配信処理に支障をきたす(キューがつまる)ことがあるらしく、それを回避するためのパッチらしい。この問題のことを"silly qmail syndrome"というらしい。
※ちなみに僕はqmailのメールサーバを3,4年運用しているがこの問題が発生したことはない。
QEXTRA 送受信された全てのメールをフォワードすることができるらしい。全メールのバックアップを取りたい場合や、第三者によるメール監視とかする用途に以外に用途が思い浮かばない。
RCDLINKお勧め:qmailの自動起動スクリプトをインストールする。実験でqmailを使うとかで無い場合はチェックを入れておくこと!
サーバ再起動のたびに手動でqmailを立ち上げるのはめんどくさいでしょ?

vpopmailのインストール

何も考えずにそのままportsからインストールできます。超楽です!
# cd /usr/ports/mail/vpopmail
# make
# make install

『注意』

vpopmailのmake処理中にucspi-tcp、ezmlm-idx、iconvなどのオプション選択画面が出てくることがあります。

その場合ucspi-tcpとezmlm-idxはデフォルトのままでOKです。

iconvは「EXTRA_ENCODINGS」、「EXTRA_PATCHES」の二つにチェックを入れておきましょう。文字コードの問題に悩まされることが少なくなります。

qmailadminのインストール

こちらもportsからインストールします。

またqmailadminはCGIとして動作しますので、httpd(apacheなど)のサーバが別途必要です。

# cd /usr/ports/mail/qmailadmin
# make
# make install

以下はapacheをソースコードからインストールしている場合の設定例です。

自分の環境に合わせて適当に読み替えてください。

# cd /usr/ports/mail/qmailadmin
# mv /usr/local/www/cgi-bin.default/qmailadmin/qmailadmin /usr/local/apache2/cgi-bin/qmailadmin/qmailadmin
# mv /usr/local/www/data.default/ /usr/local/apache2/htdocs/
# cd /usr/local/apache2/cgi-bin/qmailadmin/
#
# vi /usr/local/apache2/conf/httpd.conf

httpd.confにqmailadminを実行できるように以下の設定を追加します。

<Files "qmailadmin">
    SetHandler cgi-script
</Files>

qmailの設定

# cd /var/qmail/configure
# ./config-fast hogehoge.com(メールサーバのドメイン)

tcpserverの設定

【設定ファイルの準備】

「/etc/tcp.pop3」を作成し『:allow』とだけ書いておけばよい

「/usr/local/vpopmail/etc/tcp.smtp」デフォルトのものをそのまま使えばよい


# vi /etc/tcp.pop3
# /usr/local/bin/tcprules /etc/tcp.pop3.cdb /etc/tcp.pop3.tmp < /etc/tcp.pop3 
#
# vi /usr/local/vpopmail/etc/tcp.smtp
# /usr/local/bin/tcprules /usr/local/vpopmail/etc/tcp.smtp.cdb \
# /usr/local/vpopmail/etc/tcp.smtp.tmp \
# < /usr/local/vpopmail/etc/tcp.smtp

【起動スクリプトの作成】

※オプションなどの詳しい内容を知りたい場合はこちらなどが詳しいです。

smtpd用のtcpserver自動起動スクリプト

名前は適当(smtp.shとか?)でかまわないが以下のスクリプトを作成し/usr/local/etc/rc.d/の以下へ保存

#!/bin/sh
/usr/local/bin/tcpserver -v -R -H -u 82 -g 81 \
-x /usr/local/vpopmail/etc/tcp.smtp.cdb 0 smtp \
/var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtp 3 &

smtpd用のtcpserver自動起動スクリプト

名前は適当(pop3.shとか?)でかまわないが以下のスクリプトを作成し/usr/local/etc/rc.d/の以下へ保存

#!/bin/sh
/usr/local/bin/tcpserver -v -x /etc/tcp.pop3.cdb -R -H 0 pop3 \
/var/qmail/bin/qmail-popup 「メールサーバのドメイン(or FQDN)」 \
/usr/local/vpopmail/bin/vchkpw \
/var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger pop3d 3 &

【tcpserverの再起動方法】

設定がうまく言ってないなと思ったときは以下の方法でtcpserverを停止、再起動できます

停止


# killall -HUP tcpserver

再起動


# killall tcpserver 

vpopmailの設定

■ドメインの追加
# cd /usr/ports/mail/qmailadmin
# /usr/local/vpopmail/bin/vadddomain FQDN Password

【おまけ】SPFの設定

固定IP8個の場合だと以下のような感じIPアドレスは、自分の物に書き換えてください。

txt   "v=spf1 +ip4:192.168.0.0/29 ~all"