たいちょの部屋 qMail + Vpopmail + POP before SMTP + DomainKeys + spf インストール手順

最近の電子メール事情は色々と変わってきていて追っかけるのも大変です。
特に、OP25対応なんかは利用者に設定変更の通知やら何やら、サーバーメンテナンスだけでは
済まされなくなってます。
今回は、出来る限りクライアントに設定変更をお願いする事無く、今までの使い勝手を残しつつ
サーバー再構築だけで、スパム対策やらに対応出来るようにしたいと思います。

今回の構築方法は、もちろん規格外の仕様ですので、新規にメールサーバーを構築する場合等には
おすすめしませんが、既存の運用されているメールサーバーを、最小限の変更で、現在主流になりつつ
ある、メール規格に対応させようとするものです。

今回の構築目標

  • DomainKeysの対応
  • OP25最策されたISPからのメール送信対応
  • SMTP認証を導入せず、クライアントの設定変更をポート番号変更のみで済ます
  • リレー対策は、POP before SMTPを残す
  • Vpopmailでヴァーチャルドメインに対応
  • 25番ポートは、メール受け取り専用にし、メール送信は全て587を使用
  • 25番ポート=>中継拒否
  • 587番ポート=>POP before SMTPでの、中継のみ

    # インストールディレクトリ構成

    /usr/local/src/
    │
    ├ libspf-1.0.0-p3/
    │
    ├ netqmail-1.05/
    │ │
    │ └ netqmail-1.05/
    │
    └ libdomainkeys-0.68/
    

    # 必要なファイルやパッチ

    netqmail-1.05.tar.gz
     qmail-date-localtime.patch
     qmail-1.03-dk-0.53.patch

    vpopmail-5.4.9.tar.gz
    libspf-1.0.0-p3.tar.gz
    libdomainkeys-0.68.tar.gz

    ucspi-tcp-0.88.tar.gz
     ucspi-tcp-0.88.errno.patch
     ucspi-tcp-0.88.a_record.patch
     ucspi-tcp-0.88.nobase.patch

    daemontools-0.76.tar.gz
    autorespond-2.0.3.tar.gz
    ezmlm-0.53.tar.gz
    ezmlm-idx-0.40.tar.gz
    qmailadmin-1.2.11.tar.gz

    # 起動スクリプト

    起動スクリプトは、今回のサーバー構築の参考にさせて頂いた

    「Linuxで作る完全メールシステム構築ガイド―sendmail/Postfix/qmail対応」
    デージーネット (著)

    から、一部今回の構築内容向けに改造して公開しております。
    公開を承諾して頂いた、デージーネット様に感謝致します。

    下記リンクからダウンロードして頂けます。
    ダウンロードに当り、下記注意事項をよく読み、了承の上ご利用ください。
    ・ポップアップブロックの解除をお願いします
    ・この起動スクリプトの動作について、ハード構成・ソフトバージョン等によっては
     動作しない場合が有ります。本サイト管理者及び、デージーネット様へ質問を頂い
     ても回答致しかねます。
    ・本スクリプトを使用して運用した結果の影響については、責任を負いかねますの
     でご了承ください。
    ・本スクリプトの二次配布・公開に関しては下記アドレスまでご連絡頂けます様お
     願いいたします。
     メール:

    qmail
    qmail-smtpd
    qmail-pop3d

    # spfパッチの導入

    cd /usr/local/src
    tar zxf libspf-1.0.0-p3.tar.gz
    cd libspf-1.0.0-p3/
    ./configure
    make
    make install

    # Domain Keysの導入

    cd ../
    tar zxf libdomainkeys-0.68.tar.gz
    cd libdomainkeys-0.68/
    vi dns.lib

    追 加
    -lresolv

    make
    gcc -DBIND_8_COMAT -O2 -o makeheader makeheader.c
    ./test
    cp *.h libdomainkeys.a ../netqmail-1.05

    # qMail関連グループの作成

    cd ../
    vi /etc/group

    追 加
    nofiles::1991:
    qmail::1992:
    vchkpw::1993:

    # qMail関連ユーザーの作成

    vipw

    追 加
    alias:x:1981:1991::/var/qmail/alias:/bin/false
    qmaild:x:1982:1991::/var/qmail:/bin/false
    qmaill:x:1983:1991::/var/qmail:/bin/false
    qmailp:x:1984:1991::/var/qmail:/bin/false
    qmailq:x:1985:1992::/var/qmail:/bin/false
    qmailr:x:1986:1992::/var/qmail:/bin/false
    qmails:x:1987:1992::/var/qmail:/bin/false
    vpopmail:x:1988:1993::/home/vpopmail:

    # qMailのインストール その1

    tar zxf netqmail-1.05.tar.gz
    cd netqmail-1.05
    ./collate.sh
    cd netqmail-1.05
    patch -p1 < ../../qmail-date-localtime.patch
    patch -p1 < ../../libspf-1.0.0-p3/patches/qmail/1.05/netqmail-1.05-libspf-1.0.0-RC6.diff
    patch < ../../qmail-1.03-dk-0.53.patch
    make setup check
    install -g qmail qmail-dk /var/qmail/bin/qmail-dk
    cp -p /var/qmail/bin/qmail-queue /var/qmail/bin/qmail-queue.orig

    # 初期設定

    ./config-fast [Domain]
    ./config-fast [FQDN]

    # qMailのインストール その2

    cd ../../
    mv netqmail-1.05 netqmail-1.05-add_spf
    tar zxf netqmail-1.05.tar.gz
    cd netqmail-1.05
    ./collate.sh
    cd netqmail-1.05
    patch -p1 < ../../qmail-date-localtime.patch
    patch < qmail-smtpd-relay-reject
    make
    install -g qmail qmail-smtpd /var/qmail/bin/qmail-smtpd-non-spf

    # Maildir形式にする

    vi /var/qmail/control/defaultdelivery
    ./Maildir/

    # sendmailコマンドのコピー

    mv /usr/sbin/sendmail /usr/sbin/sendmail.old
    mv /usr/lib/sendmail /usr/lib/sendmail.old
    ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail
    ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

    # tcpserverのインストール

    cd ../../
    tar zxvf ucspi-tcp-0.88.tar.gz
    cd ucspi-tcp-0.88
    patch -p1 < ../ucspi-tcp-0.88.errno.patch
    patch -p1 < ../ucspi-tcp-0.88.a_record.patch
    patch -p1 < ../ucspi-tcp-0.88.nobase.patch
    make
    make setup
    make check

    # デーモンツール等のインストール

    mkdir -p /package
    chmod 1755 /package
    cd /package
    tar zxvf daemontools-0.76.tar.gz
    cd admin/daemontools-0.76
    vi src/error.h
    変 更
    extern int errno;

    #include <errno.h>

    ./package/install

    # autorespondのインストール

    cd /usr/local/src
    tar zxvf autorespond-2.0.3.tar.gz
    cd autorespond-2.0.3
    make
    make install

    # ezmlmのインストール

    cd ../ tar zxvf ezmlm-0.53.tar.gz
    tar zxvf ezmlm-idx-0.40.tar.gz
    mv -f ezmlm-0.53/issub.c ezmlm-0.53/issub.bak
    mv -f ezmlm-0.53/subscribe.c ezmlm-0.53/subscribe.bak
    mv -f ezmlm-idx-0.40/* ezmlm-0.53
    cd ezmlm-0.53
    patch < idx.patch
    vi error.h
    変 更
    extern int errno;

    #include <errno.h>

    make clean
    make
    make man
    cp ezmlmrc.jp ezmlmrc
    make setup

    # vpopmailのインストール

    cd ../
    mkdir -p /home/vpopmail/etc
    chown -R vpopmail:vchkpw /home/vpopmail
    chmod 755 /home/vpopmail
    vi /home/vpopmail/etc/tcp.op25

    作 成 [POP befor SMTP 用]
    ***.***.***.***:allow,RELAYCLIENT="",DKSIGN="/etc/domainkeys/default",QMAILQUEUE="bin/qmail-dk"
    :allow

    vi /home/vpopmail/etc/tcp.smtp

    作 成 [メール受信用]
    :allow,SPF_ACTION="4",DKVERIFY="DEGIJKfh",QMAILQUEUE="bin/qmail-dk"

    tcprules /home/vpopmail/etc/tcp.op25.cdb /home/vpopmail/etc/tcp.op25.tmp < /home/vpopmail/etc/tcp.op25
    tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp
    tar zxvf vpopmail-5.4.9.tar.gz
    cd vpopmail-5.4.9
    vi vpopmail.c
    変 更
    fprintf( fs_tmp_file, "%s:allow,RELAYCLIENT=\"\",RBLSMTPD=\"\"t%d\n",

    fprintf( fs_tmp_file, "%s:allow,RELAYCLIENT=\"\",RBLSMTPD=\"\",DKSIGN=\"/etc/domainkeys/default\",QMAILQUEUE=\"bin/qmail-dk\"\t%d\n",

    ./configure --enable-roaming-users=y --enable-clear-passwd=y \
    --enable-tcpserver-file=/home/vpopmail/etc/tcp.op25 --enable-relay-clear-minuts=15
    make make install-strip
    crontab -e
    追 加
    0,10,20,30,40,50 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null

    # ドメインの追加

    /home/vpopmail/bin/vadddomain [Domain]

    # qmailadminのインストール

    tar zxf qmailadmin-1.2.11.tar.gz
    cd qmailadmin-1.2.11
    ./configure --enable-cgibindir=/httpd/cgi-bin --enable-htmldir=/httpd \
    --enable-no-cache --enable-imagedir=/httpd/image --enable-imageurl=/image \
    --disable-help --enable-modify-quota --disable-ezmlm-mysql
    make
    make install

    # 起動スクリプトの登録

    cp qmail /etc/init.d/
    cp qmail-pop3d /etc/init.d/
    cp qmail-smtpd /etc/init.d/
    chmod 755 /etc/init.d/qmail
    chmod 755 /etc/init.d/qmail-pop3d
    chmod 755 /etc/init.d/qmail-smtpd
    chkconfig --add qmail
    chkconfig --add qmail-pop3d
    chkconfig --add qmail-smtpd
    chkconfig qmail on
    chkconfig qmail-pop3d on
    chkconfig qmail-smtpd on

    # ドメインキーの作成

    mkdir /etc/domainkeys
    cd /etc/domainkeys
    openssl genrsa -out private.key 1024
    openssl rsa -in private.key -out public.key -pubout
    cp private.key default
    chmod 600 /etc/domainkeys/*
    chown qmaild /etc/domainkeys/default
    grep -v ^- public.key | perl -e 'while(<>){chop;$l.=$_;}print "t=y; p=$l;\n";'
    表示された文字をコピーしておく事

    # domainkeysのDNS登録

    DNSのレコードに下記を追加
    _domainkey.domain.jjp. IN TXT "t=y; o=~; n=[所有者情報(会社名等)]; r=[管理者メールアドレス]"
    default._domainkey IN TXT "[コピーした文字];"

    コピーした文字例 ⇒ "t=y; p=ABCDEFGHIJK~~XYZ;"

    # SPFのDNS設定

    DNSのレコードに下記を追加
    MXレコードに登録されているIPのみ一括指定する場合
    IN TXT "v=spf1 +mx ~all"

    IP指定の場合
    IN TXT "v=spf1 +ip4:xxx.xxx.xxx.xxx +ip4:yyy.yyy.yyy.yyy ~all"

    # DomainKeys・SFP等の細かい設定

    spfの受信ポリシー設定

    /var/qmail/control/spfbehavior
    でもspfの動作設定が出来ますが、25と587でspfのポリシーを変更する為利用しません。

    vi /home/vpopmail/etc/tcp.smtp
    [メール受信用]
    :allow,SPF_ACTION="4",DKVERIFY="DEGIJKfh",QMAILQUEUE="/bin/qmail-dk"

    tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp

    送信側は、設定しません。
    設定してしまうと、メールが送信出来なくなります。

    0: SPF ルックアップを行いません, Received-SPF ヘッダも作りません
    1: Received-SPF ヘッダの生成だけ行います, ブロックはしません
    2: DNS ルックアップで問題があるとテンポラリエラーを返します
    3: SPF の評価結果が fail (deny) であるメールをリジェクトする
    4: SPF の評価結果が softfail であるメールをリジェクトする
    5: SPF の評価結果が neutral であるメールをリジェクトする
    6: SPF の評価結果が pass にならなかったメールをリジェクトする

    おすすめは、まだ 3か4 と思われます。
    世の中の全てのDNS管理者が、SFPヘッダー情報を登録してくれたら、6に出来るのになぁ・・・・・

    DomainKeysの受信ポリシー設定

    vi /home/vpopmail/etc/tcp.smtp
    [メール受信用]
    :allow,SPF_ACTION="4",DKVERIFY="DEGIJKfh",QMAILQUEUE="/bin/qmail-dk"

    tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp

    B (b) : 署名が異常です。
    C (c) : 署名が有りません。
    D (d) : 公開鍵が有りません。
    E (e) : 認証できませんでした。
    F (f) : 公開鍵が異常です。
    G (g) : DomainKeysの処理でエラーが発生しました。
    H (h) : DomainKeysライブラリの引数が異常です。
    I (i) : DomainKeysライブラリの使用方法に誤りがあります。
    J (j) : DomainKeys処理のリソースが足りません。
    K (k) : 処理が取り消されました。

    DKVERIFYのおすすめ設定は、「 DEGIJKfh 」です。
    大文字が恒久エラーとして、小文字が一時エラーとして取り扱われます。

    QMAILQUEUE="/bin/qmail-dk"は必須設定になります。
    デフォルトのqmail-queueの代わりにqmail-dkを使用する為の設定です。
    これを忘れると、普通にキューの処理をしてしまいます。

    # Apacheのインストールと設定

    Apacheは最低限の設定で大丈夫です。
    ここでは明記しません。

    # qmailの起動

    /etc/init.d/qmail start
    /etc/init.d/qmail-smtpd start
    /etc/init.d/qmail-pop3d start

    # 動作確認

    設定が完了したメールサーバーのアカウント宛に、外部からメールを送信して、
    受信したメールのヘッダー情報を確認すると下記の様にヘッダーが記載されています。

    spf・DomainKey対策されていないサーバーからは以下のヘッダーが付きます。(一部抜粋)
    DomainKey-Status: no signature
    Received: from unknown (HELO Send.DomainName.jjp) (***.***.***.***)
    by Receipt.DomainName.jjp with SMTP; 00 Sun 0000 00:00:00 +0900
    Received-SPF: none (Receipt.DomainName.jjp: domain of SendAddress@DomainName.jjp does not designate permitted sender hosts)

    spf・DomainKey対策されているサーバーからは以下のヘッダーが付きます。(一部抜粋)
    DomainKey-Status: good
    Received: from unknown (HELO Send.DomainName.jjp) (***.***.***.***)
    by Receipt.DomainName.jjp with SMTP; 00 Sun 0000 00:00:00 +0900
    Received-SPF: pass (Receipt.DomainName.jjp: domain of SendAddress@DomainName.jjp designates ***.***.***.*** as permitted sender) receiver=Receipt.DomainName.jjp; client_ip=***.***.***.***; envelope-from=SendAddress@DomainName.jjp;
    Received: (qmail 9999 invoked by uid 99999); 00 Sun 0000 00:00:00 +0900
    DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
    s=yj20050223; d=Send.DomainName.jjp;
    h=Message-ID:Received:Date:From:Subject:To:MIME-Version:Content-Type;
    b=[rsa暗号化文字列] ;

    赤文字:結果
    黄文字:サーバー固有情報(適時読み替えてください)

    第三者機関による、設定の確認

    check-auth@verifier.port25.com

    へ空メールを送信すると、各設定が正しく行われているかのテスト結果を返信してくれます。



    Back