qmail/vpopmailのインストール

 qmailとvpopmailを利用してメールサーバーを構築します。

 今回、別のマシンにメールサーバーを立ち上げる機会があったので、インストール手順を整理したいと思います。前回ではqmailをインストールしましたが段階的に、POPbeforeSMTP、APOPに対応させ、最終的にvpopmailをインストールしました。最終的にはqmailとvpopmailだけでいいのですが、途中何段階もあり分かりづらくなったので不要なものを省いて1からの説明です。
qmailのみでメールサーバーを構築したい場合はqmailのインストールを参照して下さい。qmailがインストールしてあり、後vpopmailをインストールのみの場合はvpopmailのインストールを参照して下さい。

 vpopmailは仮想ドメインや仮想ユーザーを作成する為にインストールします。また、今回は使用しませんが、MySQLと組み合わせてユーザー管理が出来るので大規模なシステム名にも向いていると思います。 私がvpopmailを選択した最大の理由は仮想ユーザーが使える点です。これによりOSのユーザーとメールユーザーを別に扱管理できます。セキュリティー的にも重要な事だと思います。(qmailのみだと、OSのユーザーとメールのユーザーが同一です。ようするにメールユーザーを作成しようと思ったらOSにユーザーを作成しなければなりません)。また、vpopmailではAPOPもデフォルトで使用できる点も評価できます。


インストールの流れは次のようになります。
作業は全てrootで行います。
  1. ソースコードのダウンロード
  2. サービス用ユーザー作成
  3. qmailのmake及びインストール
  4. 設定ファイルの編集
  5. tcpserverのインストール
  6. vpopmailのmake及びインストール
  7. POP before SMTP
  8. 仮想ドメイン(virtual domain)、仮想ユーザー(virtual user)の作成
  9. 起動スクリプトの作成
  10. TELNETによる確認
  11. spam対策 badmailfromの利用
  12. 25番ポートブロック対応(リレーサーバーの設定)
  1. ソースコードのダウンロード
    今回必要になるものの一覧です。
    作業を開始する前に全て用意し、/usr/local/srcディレクトリにダウンロードしておいて下さい。
    これ以降の説明は、/usr/local/srcに全てのアーカイブがダウンロードされているとして話を進めます。
    No アーカイブ ダウンロードURL 備考
    1 qmail-1.03.tar.gz ftp://ftp.jp.qmail.org/qmail/qmail-1.03.tar.gz qmailのソースコードです。
    2 qmail-date-localtime.patch ftp://ftp.nlc.net.au/pub/unix/mail/qmail/
    qmail-date-localtime.patch
    qmailを日本時間にする為のパッチです。
    3 ucspi-tcp-0.88.tar.gz ftp://ftp.jp.qmail.org/qmail/ucspi-tcp-0.88.tar.gz tcpserverです。xinetdの代替です。
    4 vpopmail-5.3.20.tar.gz http://www.inter7.com/vpopmail.html vpopmailのソースコードです。
    5 qmail-smtpd-relay-reject http://www.qmail.org/qmail-smtpd-relay-reject smtpdのパッチです。

  2. サービス用ユーザー作成
    qmailを起動する為のユーザーを作成します。
    qmailでは数多くのデーモンが起動する為、ユーザーもたくさん作ります。
    [root root]# mkdir /var/qmail
    [root root]# groupadd -g 710 nofiles
    [root root]# useradd -M -u 710 -g nofiles -s /bin/false -d /var/qmail/alias alias
    [root root]# useradd -M -u 711 -g nofiles -s /bin/false -d /var/qmail qmaild
    [root root]# useradd -M -u 712 -g nofiles -s /bin/false -d /var/qmail qmaill
    [root root]# useradd -M -u 713 -g nofiles -s /bin/false -d /var/qmail qmailp
    [root root]# groupadd -g 711 qmail
    [root root]# useradd -M -u 714 -g qmail -s /bin/false -d /var/qmail qmailq
    [root root]# useradd -M -u 715 -g qmail -s /bin/false -d /var/qmail qmailr
    [root root]# useradd -M -u 716 -g qmail -s /bin/false -d /var/qmail qmails

    vpopmail用のユーザーも作成します。
    [root root]# groupadd -g 721 vchkpw
    [root root]# useradd -g vchkpw -u 721 vpopmail -M -s /bin/false
    [root root]# mkdir /home/vpopmail
    [root root]# chown vpopmail:vchkpw /home/vpopmail

    ここで作成したユーザーは実際にログインや、コマンドを実行する事がないので、シェル(-sオプション)に/bin/falseを指定します。また、"-M"オプションを付加する事で、 dot-ファイルを作成しないようにします。
    ここで指定しているグループIDやユーザーIDは指定しなくても良いです。重複さえしなければ何でもよいです。/etc/passwdや/etc/groupを参照して重複しない値を指定して下さい。
  3. qmailのmake及びインストール
    [root src]# tar zxvf qmail-1.03.tar.gz
    [
    root src]# cd qmail-1.03
    日本時間対応のパッチをあてます。
    [
    root qmail-1.03]# patch -p1 < ../qmail-date-localtime.patch
    smtpdのパッチを当てます。メールアドレスに!,%,2つ目の@がある場合に正常にエラーとします。
    [
    root qmail-1.03]# patch -p1 < ../qmail-smtpd-relay-reject
    [root qmail-1.03]# make setup check
    [root qmail-1.03]# ./config-fast smtp.ryouto.jp 
    <-- サーバー名を指定します。
     サーバー名smtp.ryouto.jpはDNSサーバーの設定時にaliasとして設定しています。この他、私のマシンはwww.ryouto.jpやpop.ryouto.jpなどの別名も付けています。
  4. 設定ファイルの編集
    /var/qmail/control/localsを編集します。
    このファイルはqmailがメールを受け取るドメインを指定するファイルです。
    localhost          <--追加します。
    smtp.ryouto.jp
    ryouto.jp          <--追加します。

    /var/qmail/control/rcpthostsを編集します。
    SMTPのRCPTを許可するドメインを指定します。ここで指定されないドメインへのメール送信はsmtpサービスが拒否します。つまり、他のsmtpサーバーより自ドメイン宛に送信されてきたメールや、ローカル内で送受信しているメールは受け取りますが、このsmtpサーバーを使って他のドメイン(ここではryouto.jp以外)へのメール送信が出来ないと言う事です。これによりスパムメールの中継に利用出来なくなります。
    但し、後述するRELAYCLIENT の設定によりここで指定しないドメインへのメール送信を可能にします。
    localhost          <--追加します。
    smtp.ryouto.jp
    ryouto.jp
              <--追加します。

  5. tcpserverのインストール
    tcpserverは詳細なアクセス制御が行えるサーバーツールです。
    また、セキュリティー面でも優れているようです。
    qmailはこのtcpserverを使って起動する事とします。
    では、tcpserverをインストールします。
    [root qmail]# cd /usr/local/src
    [
    root src]# tar zxvf ucspi-tcp-0.88.tar.gz
    [
    root src]# cd ucspi-tcp-0.88
    [
    root ucspi-tcp-0.88]# make setup check

  6. vpopmailのmake及びインストール
    vpopmailをインストールします。
    POP認証後の有効時間は10分と指定しています。好みに合わせて調整して下さい
    今回使用するバージョンではAPOPが有効になっていますが、バージョンが異なるとAPOPが有効でない場合があるみたいです。
    [root src]# tar zxvf vpopmail-5.3.20.tar.gz
    [root src]# cd vpopmail-5.3.20
    [
    root vpopmail-5.3.20]#./configure --enable-roaming-users=y --enable-relay-clear-minutes=10 --enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp --enable-default-domain=ryouto.jp --enable-logging=y
    [root vpopmail-5.3.20]# make
    [root vpopmail-5.3.20]# make install-strip

  7. POP before SMTP
    続いてPOP before SMTPの設定です。
    SMTPのアクセスコントロールにはtcp.smtp.cdbファイルを利用します。
    tcp.smtp.cdbの作成には、まずtcp.smtpファイルを作成し、続けてtcprulesを実行する事で作成します。

    /home/vpopmail/etc/tcp.smtpを作成します。内容は下記の通りです。
    127.:allow,RELAYCLIENT=""
    次にtcprulesを実行し、目的のtcp.smtp.cdbファイルを作成します。
    [root etc]# tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp
    このファイルの指定内容では、127.x.x.xのネットワークからアクセスに限り/var/qmail/control/rcpthostsで指定した設定は無視されます。全てのドメインへメール送信が可能という事です。
    通常、メールユーザーがPOP認証を行うとそのユーザーのIPアドレスがRELAYCLIENT=""の設定と共にこのファイルに追加されます。これにより、そのIPアドレスからは/var/qmail/control/rcpthostsの制限を受けずにメール送信が出来るようになります。追加されたIPアドレスは一定時間経過すると次に説明するclearopensmtpによりこのファイルより削除されます。これにより、POP認証後の一定時間に限りメール送信が可能になっているわけです。

     POP認証が済んだクライアント情報を定期的に削除する為、クーロンに削除スクリプトを登録します。以下の例では毎時間0,10,20,30,40,50分に削除スクリプトが起動します。
    clearopensmtpが起動した際に、POP認証後、vpopmailのconfigure時に"--enable-relay-clear-minutes"オプションで指定した時間(今回は10分)が過ぎているとPOP認証の情報が削除されます。
    この状態が、POP認証後の有効時間切れです。ちなみに、clearopensmtpを呼び出さないと一度認証したクライアントからは永遠にPOP認証済み状態になります。忘れず起動するようにして下さい。
    [root etc]# crontab -e <--クーロンの編集
    以下の内容を追記します。

    0,10,20,30,40,50 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null

  8. 仮想ドメイン(virtual domain)、仮想ユーザー(virtual user)の作成
    仮想ドメインを作成します。
    ここでは、正規ドメイン(ryouto.jp)を仮想ドメインとして作成しています。
    そして、その仮想ドメイン内に、必要なメールアカウントを作成していきます。
    この様にする事で、OSのユーザーとメールのユーザーを切り離して管理する事が可能になります。
    [root etc]# cd /home/vpopmail/bin
    [
    root bin]# ./vadddomain ryouto.jp<- ryouto.jpを仮想ドメインとして作成します。
    Please enter password for postmaster:
    <- 管理者用パスワードを入力します
    enter password again:
    <-再びパスワード入力
    作成した仮想ドメインの情報は/home/vpopmail/domains/仮想ドメイン名で作成されます。

    次に仮想ユーザーを作成します。必要なユーザー数だけ作成して下さい。
    [root bin]# ./vadduser hoge@ryouto.jp<-作成するユーザーを指定します。
    Please enter password for hoge@ryouto.jp:
    <-パスワード入力
    enter password again:
    <-再びパスワード入力

    次に、postmasterやroot宛のメールの転送設定を行います。この作業は必須ではないですが、root宛などに送られたメールも自分のメールユーザーで受け取りたいなら設定しておくと便利です。
    次の例では、root宛のメールをhoge@ryouto.jpに転送する設定です。
    まず、.qmail-rootファイルを作成し、以下の内容を記述します。(ファイル名先頭の"."は忘れずに!)
    &hoge@ryouto.jp
    ファイルの命名は".qmail-"+ユーザー名です。"/home/vpopmail/domains/仮想ドメイン名"ディレクトリに作成します。ユーザーは仮想ユーザーとして作成していなくてもかまいません。webでよく使うwebmaster@ryouto.jpなどもこの転送指定のファイルだけ作成しておくと便利です。
     また、/var/qmail/aliasディレクトリの下に.qmail-root、.qmail-postmaster、.qmail-mailer-daemonファイルを同じ内容で作成しておきます。
  9. 起動スクリプトの作成
    qmailに付属していたサンプルのファイルを元にrcファイルを作成します。
    qmailを作成する際にMailboxからMaildir形式に変更します。
    [root bin]# cd /var/qmail
    [
    root qmail]# cp /var/qmail/boot/home /var/qmail/rc
    [
    root qmail]# vi rc
    qmail-start ./Mailbox splogger qmail
    <--この行のMailboxをMaildir/に変更する。
                             ↓ 最後の/を忘れずに

    qmail-start ./Maildir
    / splogger qmail


    次に/etc/rc.d/init.d/qmailファイルを作成します。
    711710はqmaildのユーザーIDとグループIDです。本ページと異なるIDを付与した場合は環境に合わせて変更して下さい。
    #!/bin/sh

    [ -f /var/qmail/rc ] || exit 0
    PATH=$PATH:/var/qmail/bin:/usr/local/bin

    case "$1" in
        start)
            echo -n "Starting... qmail"
            csh -cf '/var/qmail/rc &'

            /usr/local/bin/tcpserver -H -R -l smtp.ryouto.jp -v \
            -x /home/vpopmail/etc/tcp.smtp.cdb -u
    711 -g 710 0 smtp \
            /var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd 2 &

            /usr/local/bin/tcpserver -H -R -l smtp.ryouto.jp -v 0 pop3 \
            /var/qmail/bin/qmail-popup smtp.ryouto.jp /home/vpopmail/bin/vchkpw \
            /var/qmail/bin/qmail-pop3d Maildir 2>&1 | /var/qmail/bin/splogger pop3d 2 &

            touch /var/lock/qmail
            ;;
        stop)
            echo "Shutting down qmail."
            PID=`/bin/ps -aefw | grep qmail | awk '{print $2}'`
            if [ ! -z "$PID" ] ; then
                /bin/kill ${PID} 1> /dev/null 2>&1
            fi
            rm -f /var/lock/qmail
            ;;
        *)
            echo "Usage: "$0" {start|stop}"
            exit 1
    esac
    exit 0
    作成したファイルには実行権限を与えます。
    そして、runlevelの設定をします。起動、停止の順番は環境に合わせて下さい。
    [root init.d]# chmod +x qmail
    [
    root init.d]# cd ../rc3.d/
    [
    root rc3.d]# ln -s ../init.d/qmail S84qmail
    [
    root rc3.d]# cd ../rc5.d/
    [
    root rc5.d]# ln -s ../init.d/qmail S84qmail
    [
    root rc5.d]# cd ../rc0.d/
    [
    root rc0.d]# ln -s ../init.d/qmail K06qmail
    [
    root rc0.d]# cd ../rc6.d/
    [
    root rc6.d]# ln -s ../init.d/qmail K06qmail

    また、現在のsendmailコマンドを削除し、qmailへのリンクとします。
    [root root]# rm /usr/lib/sendmail
    [root root]# rm /usr/sbin/sendmail
    [root root]# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
    [root root]# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

  10. TELNETによる確認
    メールの送受信及びPOP before SMTPが行えるか確認してみる。
    メーラーが無い環境でもテスト出来るようにtelnetを使って確認します。

    まずはPOP認証前にメール送信を試み、エラーとなる事を確認します。
    但し、RCPT TOで指定するメールアドレスが/var/qmail/control/rcpthostsで指定されているドメインの場合はエラーになりません。(つまり〜@ryouto.jp宛(例えばhoge@ryouot.jp)ではエラーになりません。)
    >telnet www.ryouto.jp smtp
    220 smtp.ryouto.jp ESMTP
    HELO
    <-- HELOとまずは入力
    250 smtp.ryouto.jp
    MAIL FROM:hoge@ryouto.jp  
    <-- 差し出し人メールアドレス
    250 ok
    RCPT TO:xxx@xxx.ne.jp 
    <--送信先メールアドレス
    553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
    QUIT
    <-- QUITで終了します。
    221 smtp.ryouto.jp
    Connection closed by foreign host
    .
    次にPOP認証を行います。
    ここでは使いませんが、"LIST"でメール一覧、"RETR+LISTで取得した番号"でメール内容の確認、"DELE+LISTで取得した番号"でメールの削除などが行えます。
    >telnet www.ryouto.jp pop3
    +OK <701.1058746882@smtp.ryouto.jp>
    USER hoge  
         <-- USER ユーザー名を入力
    +OK
    PASS hogehoge  <-- PASS ユーザーのパスワードを入力
    +OK
    QUIT                  
    <--QUITで終了します。
    +OK
    Connection closed by foreign host.
    再びメール送信を試みます。
    今度はメールを送信できる事が確認できます。
    >telnet www.ryouto.jp smtp
    Trying 61.213.124.89...
    Connected to ryouto.jp.
    Escape character is '^]'.
    220 smtp.ryouto.jp ESMTP
    HELO <-- HELOとまずは入力
    250 smtp.ryouto.jp
    MAIL FROM:hoge@ryouto.jp  <-- 差し出し人メールアドレス
    250 ok
    RCPT TO:xxx@xxx.ne.jp  <--送信先メールアドレス
    250 ok
    DATA                              
    <-- 本文の開始を指示
    354 go ahead
    test                          
    <-- 適当に本文を書きます
    .                              
    <-- 本文の終了は"."です。"."を入力しエンターで終了します。
    250 ok 1058746983 qp 705
    QUIT                                <--QUITで終了します。
    221 smtp.ryouto.jp
    Connection closed by foreign host.

  11. spam対策 badmailfromの利用
    最近、SPAMメールが毎日のように送られてくる。そしてそれは毎回同じメールアドレスから送られてくる。この様なうっとうしいメールはbadmailfromに登録する事で、受信を拒む事が可能なので早速その設定をします。

    /var/qmail/control/badmailfromファイル(なければ作成します。)に以下の記述をする事で受信拒否を指定します。
    @ドメイン名      ドメインごと拒否する場合
    xxx@ドメイン名  
    特定のメールアドレスを拒否する場合
    ここで指定された、ドメイン、メールアドレスからメールが来ると(MAIL FROMで指定されると)次のようなエラーを返し、拒否します。
    553 sorry, your envelope sender is in my badmailfrom list (#5.7.1)
     
  12. 25番ポートブロック対応(リレーサーバーの設定) 2007/5/22追記
    私の利用するインターネットプロバイダが25番ポートブロック(Outbound Port 25 Blocking)を開始しました。
    この為、自前のメールサーバーから25番ポートを利用して送信するメールは全て拒否されてしまいます。
    固定IPの場合は許可されるらしいが、私の場合は動的IPを使用しています。

    こまった...。
    そういえば、ダイナミックDNSサービスの会社から以前リレーサーバー(メール中継サーバー)の案内が来ていることを思い出し、確認するとサブミッションポート(587番)で受け付けるリレーサーバーを用意しているらしいです。(私の利用するダイナミックDNSはDHISです。)

    ならば、話は早い。
    qmailにリレーサーバーの設定をすれば終了です。
    リレーサーバーの設定はsmtproutes ファイルで設定します。
    /var/qmail/control/smtproutesファイル(なければ作成)に以下の記述をする事でリレーサーバーを設定します。
    :relay.portside.net:587
    書式は以下の通りです。
    「リレー対象のドメイン名(空にすると全てが対象)」:「リレーサーバー」:「リレーサーバーのポート番号」
    上記設定例では、全てのメール送信においてリレーサーバーを使用します。(この記載例は私の利用するダイナミックDNSのリレーサーバーなので、自分の環境で利用できるリレーサーバー名もしくはIPを記述してください。)
    利用可能なリレーサーバーが無い場合などは、別の手段を考える必要がありそうですが結構大変そうですね。

    #smtproutesファイルはリモートメールサーバーへ配送する場合のみ参照される為、ローカルのメール送信に、影響を与えません。
最後に、qmailのサービスを立ち上げて終了です。


Copyright (C)2003-2007 ryouto.jp. All Rights Reserved.