メールサーバ



2012年 9月 10

こんなエントリ(ネットショップ運営者必見?迷惑メール扱いを回避する手順 :: drk7jp )があるので、とりあえずDKIMを導入してみる。

DKIMを導入するに以前は dkim-milter を使うのが一般的だったようだけど、最近では OpenDKIM を使うようだ。

参考:

  • CentOS6.2でOpenDKIM(DomainKeys Identified Mail)のインストール、設定 | 実験酒場
  • Postfix + dkim-milterからOpenDKIMに移行する » blog::dameningen
  • 準備

    OpenDKIMのインストール

    ※rpmforgeまたはepelリポジトリが必要。

    $ sudo yum install opendkim
    
    ==============================================================================================================
    Package                    Arch                Version                         Repository               Size
    ==============================================================================================================
    Installing:
    opendkim                   i386                2.5.2-1.el5.rf                  rpmforge                258 k
    Installing for dependencies:
    libopendkim                i386                2.5.2-1.el5.rf                  rpmforge                159 k
    
    Transaction Summary
    ==============================================================================================================
    Install       2 Package(s)
    Upgrade       0 Package(s)

    秘密鍵の作成

    ドメインごとに保管場所を作成する必要があるのでまずは保管場所を作る。

    $ sudo mkdir /etc/opendkim/keys/clicktx.jp

    OpenDKIMに付属しているスクリプトで鍵ペアを作成する

    $ sudo opendkim-genkey -D /etc/opendkim/keys/clicktx.jp/ -d clicktx.jp -s default

    default.private default.txt という鍵ペアが出来る。

    DNSに登録

    default.txt の内容(TXTレコード)をDNSに設定するのだけれど、バグがあるので注意。

    元の内容

    default._domainkey IN TXT "v=DKIM1;=rsa; p=MIGfMA...." ; ----- DKIM default for clicktx.jp

    修正後の内容

    default._domainkey IN TXT "v=DKIM1;k=rsa; p=MIGfMA...." ; ----- DKIM default for clicktx.jp

    ※ =rsa を k=rsa に直すこと。

    うちはValueDomainのDNSサーバを使っているので、

    txt default._domainkey v=DKIM1;k=rsa; p=MIGf...中略...IDAQAB

    として設定する。
    うちのDNSサーバは ns*.value-domain.com を使っているのでこの方法でいいみたいだけど、eNom「dns*.name-services.com」の場合は設定方法が違うみたいなので注意。
    参考:Google Appsの「DKIM」をVALUE-DOMAINで設定する – 風見鶏の目

    TXTレコードの確認

    DNSが浸透してから行う必要がある。
    nslookup コマンドで

    $ nslookup -q=txt default._domainkey.clicktx.jp
    Non-authoritative answer:
    *** Can't find default._domainkey.clicktx.jp: No answer

    こんなんでたらまだ浸透していません。

    オーナー変更

    TXTレコードが正しく引けるようなら秘密鍵の所有者を変更してopendkim が読み込めるようにする。

    $ sudo chown -R opendkim:opendkim /etc/opendkim/keys

    OpenDKIMの設定

    設定ファイル /etc/opendkim.conf

    $ sudo vi /etc/opendkim.conf
    
    # Selects operating modes. Valid modes are s (signer) and v (verifier). Default is v.
    #Mode    v
    Mode    sv  ←追記 sは送信時の署名、vは受信時の確認
    
    # Gives the location of a private key to be used for signing ALL messages.
    # KeyFile /etc/opendkim/keys/default.private  ←コメントアウト
    
    # Gives the location of a file mapping key names to signing keys. In simple terms,
    # this tells OpenDKIM where to find your keys. If present, overrides any KeyFile
    # setting in the configuration file.
    #KeyTable       /etc/opendkim/KeyTable
    KeyTable       refile:/etc/opendkim/KeyTable  ←追記
    
    # Defines a table used to select one or more signatures to apply to a message ba
    sed
    # on the address found in the From: header field. In simple terms, this tells
    # OpenDKIM how to use your keys.
    #SigningTable   /etc/opendkim/SigningTable
    SigningTable    refile:/etc/opendkim/SigningTable  ←追記
    
    # Identifies a set of "external" hosts that may send mail through the server as
    one
    # of the signing domains without credentials as such.
    ExternalIgnoreList     refile:/etc/opendkim/TrustedHosts  ←コメントを外す
    
    # Identifies a set internal hosts whose mail should be signed rather than verifi
    ed.
    InternalHosts  refile:/etc/opendkim/TrustedHosts    ←コメントを外す

    KeyTableの設定

    KeyTable には、TXT フィールドとシグニチャをつけるドメイン、セレクタ、対応する秘密鍵を1行につき1ドメインずつ書いていく。

    ドメインに対する秘密鍵を指定いてあげるのかな。

    $ sudo vi /etc/opendkim/KeyTable
    default._domainkey.clicktx.jp clicktx.jp:default:/etc/opendkim/keys/clicktx.jp/default.private

    SigningTableの設定

    SigningTable には、どのメールアドレスに対してはどの TXT フィールドを参照するかを指定する。ここではワイルドカードが使える。

    ワイルドカードを使って ***@clicktx.jp のメールが参照するTXTレコードを指定してあげる。

    $ sudo vi /etc/opendkim/SigningTable
    *@clicktx.jp default._domainkey.clicktx.jp

    TrustedHostsの設定

    TrustedHosts には、DKIM シグニチャをつけるべきメールサーバをリストアップしておく。

    との事。ローカルサーバだけでいいのかな?
    デフォルトで 127.0.0.1 が指定してある。そのままでもおkの模様。

    $ sudo vi /etc/opendkim/TrustedHosts
    127.0.0.1

    # opendkim起動

    $ sudo /etc/rc.d/init.d/opendkim start

    # 自動起動の設定
    マシンを再起動した時に自動起動。

    $ sudo /sbin/chkconfig opendkim on

    Postfixの設定

    main.cfの最終行に追記

    $ sudo vi /etc/postfix/main.cf
    # DKIM
    smtpd_milters     =    inet:127.0.0.1:8891

    Postfixを再起動

    $ sudo /etc/rc.d/init.d/postfix restart

    DKIMのテスト

    sa-test@sendmail.net へ空メールを送る。
    DKIMだけじゃなく他のチェックもしてくれる。
    Spamhausとかに登録されているとブラックリストに載っているよ!って弾かれます…。

    ヘッダではなく本文に記載されます。
    以下のようになっていればおk?

    Authentication System:       DomainKeys Identified Mail (DKIM)
       Result:                   DKIM signature confirmed GOOD
       Description:              Signature verified, message arrived intact
       Reporting host:           services.sendmail.com
       More information:         http://dkim.org/
       Sendmail milter:          http://opendkim.org/

    その他

    ドメインごとに用意しなくてはならないのかな?
    自分で管理しているドメインならデフォルトのキーペアを設定して使い回してしまってもいいのかしら?


    Filed under: CentOS5.x,postfix,インストールメモ

    Trackback Uri






    2012年 3月 4

    [Postfix] 自宅メールサーバが迷惑メールサーバと思われているので、プロバイダ経由でメール配信する設定 でプロバイダ経由で送信するのはいいけど、メーリングリストのように一度に大量の相手にメールを送るときにサーバビジーとなり、メールキューが貯まる。

    Mar 2 07:12:45 mail postfix/smtp[2760]: 23AAD323853: to=, relay=smtp.hoge.com[xxx.xxx.xxx.xx]:587, delay=4343, delays=4281/31/0.12/30, dsn=4.0.0, status=deferred (host smtp.hoge.com[xxx.xxx.xxx.xx] said: 421 Server Busy, Please Try Later (in reply to MAIL FROM command))

    時間が経てば再配送してくれるのだけれど、随分時間がかかる。
    調べてみるとPostfixのデフォルトだとお人好しな設定の様子。

    参考ブログ [Postfix] 再送設定 – abs(life) によると

    失敗から再送までのpostfixの動きは、
    送信失敗
    deferredに入れる
    queue_run_delay(1000秒)毎にdeferredをチェック
    minimal_backoff_time(1000秒)を超えるメールがあれば送信
    また失敗したらminimal_backoff_timeの倍(2000秒)の時間後に再送
    またまた失敗したらminimal_backoff_timeの倍の倍(4000秒)の時間後に再送
    maximal_backoff_time(4000秒)を超えるまでこれを繰り返し
    maximal_backoff_timeを超えてしまったら、maximal_backoff_time間隔で再送
    maximal_queue_lifetime(5日)を超えてしまったら再送をあきらめる
    bounce_queue_lifetime(5日)を超えたら送信もとにエラーメール送信

    とのことで、もうちょっと早めに再送して欲しい感じ。

    $ sudo vi /etc/postfix/main.cf
    ### 設定ファイルの最後の方に追記
    
    minimal_backoff_time = 100s
    maximal_backoff_time = 600s
    maximal_queue_lifetime = 24h
    bounce_queue_lifetime = 24h
    queue_run_delay = 100s

    こんな設定に。

    Postfixをリロードして設定を反映。

    $ sudo /etc/init.d/postfix reload

    Filed under: postfix

    Trackback Uri






    2012年 3月 2

    The Spamhaus Project

    The Spamhaus Project

    解除申請も出来なくなってしまいました。
    以前はリンクをクリックして解除できたのですが、、、。

    telnetでsmtpしてもHELOでドメイン名返しているし、helocheck@cbl.abuseat.orgにメールを送ることで出来るチェックも異常ない感じ。

    それでもHELOで”localhost.localdomain”返すなや!って怒られてる。

    どうもIPアドレスブロックごとごっそり登録する傾向があるようなので、他の迷惑なユーザーのせいじゃないかと疑っているけれど、そんな事よりもメールが送れない方が深刻な問題。

    結局プロバイダのメールサーバにリレー

    メールサーバがspamじゃないよ!って対策を色々してみてきたものの、信頼あるサーバにリレーして配信してもらうほうが確実なのかも。

    Gmailのサーバを使うのもいいけど、どうやら2000通までの制限があるし、設定しないとgmailのメールアドレスに書き換えられて送られるらしいのでプロバイダ経由にすることに。
    送信に関する制限事項 – Google Apps ヘルプ

    接続情報DBファイルの作成

    isp_passwd(名前はなんでもいいのですが)ってファイルを作り、プロバイダの接続情報を書きます。
    詳しくは参考サイトをご覧下さい。

    # cd /etc/postfix
    # vi isp_passwd
    
    smtp.hoge.com aaa@hoge.com:password
    

    アクセス権を変えます。

    # chmod 600 ./isp_passwd

    先ほどのファイルから isp_password.db ファイルを作成します。

    # postmap isp_password

    ボクの環境では /usr/sbinにpathが通っていなかったので /usr/sbin/postmap で^^;

    Postfixの設定ファイル(main.cf)を編集

    $ sudo vi /etc/postfix/main.cf
    
    .....
    relayhost = [smtp.hoge.com]:587
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/isp_passwd
    smtp_sasl_mechanism_filter = login, plain, cram-md5
    smtp_sasl_security_options = noanonymous
    .....
    

    Postfixをリロード

    # /etc/init.d/postfix reload

    配信状況

    YahooとGmail宛に試してみましたが、どちらも迷惑メールとして判断されず、きちんと受信箱に配送されました。

    ただ、メールのソースを見ると以前に対策したSPFは
    Received-SPF: softfail となっています。(プロバイダのIPアドレスになるので当然ですが)

    スパムメール判定にはあまり関係なさそうな感じですね。

    2012-3-4追記:
    Postfixの再送設定はデフォルトだとちょっとお人よしですよも行うことをおすすめします。

    参考

  • Postfixでのリレー設定方法 – Linuxで自宅サーバ構築(新森からの雑記)
  • Postfixでsmtp-authの外部smtpにメールをリレーする方法(OP25B対策) – いろいろwiki@princo.org
  • Postfix+SMTP-AUTHでメールをプロバイダに中継 | Kazuizm

  • Filed under: postfix

    Trackback Uri






    2011年 6月 30

    DNSの逆引き設定

    今まで逆引き設定していなかったメールサーバから送ったメールには

    Received: from sv.domain.com (sv.domain.com [127.0.0.1])
    	by mail.domain.com (Postfix) with SMTP id…

    のようなヘッダとなっていて、localhost(127.0.0.1)から送られたものだとされていた。

    これが迷惑メールとされる一因なので、mail.domain.com はちゃんとしたサーバですよー、と知らせるためにグローバルなIPアドレスをあててあげる。

    DNSの逆引きはドメインの管理とは関係ないので、回線業者が提供するサイトなりツールから設定。メールサーバのドメインが mail.domain.com、IPアドレスが111.222.33.4 の場合。
    111.222.33.4にmail.domain.comを割り当てる。

    逆引きを設定すると

    Received: from 111.222.33.4  (EHLO maildomain.com) (111.222.33.4)
      by mta...

    のようなヘッダとなる。

    Gmailではこれだけで迷惑メールと判断されなくなった。

    Yahooメールでの対策

    上記対応をして一時的に改善しても、1日程度経つと再び迷惑メールに振り分けられる場合がある。この場合はメールヘッダに X-YahooFilteredBulk: 111.222.33.4 等と入っている可能性があるので、Yahooに問い合わせる必要がある。

    オープンリレーを許可していないか確認する。

    第三者中継チェック RBL.JP

    全てが青い文字で no relays accepted. となればおk.

    Yahooに問い合わせ

    Yahoo!メール(ベータ版) ヘルプ – [迷惑メール]フォルダに振り分けられたくないメールがある
    へ行き、一番下の「解決しましたか?」でいいえを選択すると問い合わせフォームになるのでそこから問い合わせる。

    きちんとすれば、予想以上に早い対応をしてもらえる。
    対応後にはこんなメールを頂ける。

    ◯◯◯◯ ◯◯様
    
    Yahoo!メールカスタマーサービス◯◯です。
    このたびは、調査および調整に必要な情報をご提供くださいまして、
    誠にありがとうございました。
    
    お問い合わせの「Yahoo!メール・迷惑メールフォルダへのメール振り分け」に
    ついてご案内いたします。
    
    お知らせいただいた情報をもとに調査を行い、ご利用のメールサーバーに
    問題がないことを確認しましたので、弊社にて調整を実施いたしました。
    ・・・以下(ry

    まさに Amazon EC2のサーバからメール送信をするまでにやるべきこと (スパムメール扱いを回避する!) – RX-7乗りの適当な日々

    DNS逆引き設定
    SPFの設定
    SPAMメールのブラックリストに対する解除申請

    のまんまですが。

    SPFについて

    とりあえず逆引き設定で迷惑メールに振り分けられる問題は改善したのだけど、SPF(Sender Policy Framework)を設定しておくともっとよさそう。

    SPFは 送信者(from) が taro@domain.com なら domain.com が評価対象となる。メールサーバは関係ないようだ。fromのFQDN部分が使われる様子。

    DNSの設定でTXTレコードを設定する。

    Yahooでパスしたメールには

    Received-SPF: pass (mail.domain.com: domain of info@domain.com designates 27.....

    のようなヘッダが追記されていた(当然受信側のメールサーバがSPFに対応していることが前提)

    チェックするにはこのようなツールも。

    Sendmail – SPFレコードチェック
    http://www.sendmail.co.jp/sa/spfcheck.html

    参考:

  • Amazon EC2のサーバからメール送信をするまでにやるべきこと (スパムメール扱いを回避する!) – RX-7乗りの適当な日々
  • サービスから送るメールがスパム扱いされないために。
  • メール送信者認証技術 SPF/Sender ID についてお勉強 :: drk7jp
  • Sender ID:送信者側の設定作業 - @IT
  • 間違いから学ぶSPFレコードの正しい書き方 : 迷惑メール対策委員会

  • Filed under: postfix

    Trackback Uri






    2011年 1月 6

  • 2013/02/23追記 dovecot2にアップグレードしたエントリーはこちら
  • 2013/02/22追記 TLS対応。エントリーはこちら
  • 2013/01/15追記 wpの設定を変えたこともあり見難いので随時記事を添削します。
  • 2013/01/13追記 PostfixのMySQL対応はyumで出来るようです。詳しくは該当箇所で
  • 2012/08/31追記 master.cf の設定に漏れがありました。詳しくは該当箇所で
  • 2012/09/05追記 main.cf の設定に追加しました。詳しくは該当箇所で

  • 設定項目などはほぼコピペ。自分用のメモ。
    記事中の各リンク先の通り設定したのではなかなか実現できないので多少アレンジしています。

    ローカルのUNIXユーザーはMairdir/方式でメールを使いたい。
    バーチャルドメイン複数の運用、かつ、Web GUIでメールアカウントを管理したい。
    スパムメールとウィルスもチェックしたい。

    このような要望のもと、メールサーバを立て直した際に以前書いた記事をまとめてみた。
    さすがに長文になったので続きを読むにした。

    • CentOS5.5 i386とする
    • MySQLは設定済み前提
    • ローカルのUNIXユーザはMaildir方式でメールを利用する。
      メールボックスは ~/home/username/Mairdir
    • 複数のドメインをバーチャルドメインで扱う。
      メールボックスは /mail/domain.tld/user@domain.tld
    • PostfixをMTAとしてバーチャルドメインでのメールアカウントはMySQLで管理する。
    • Clam AntiVirusでウィルスチェックを行う。
    • SpamAssassinでスパムチェックを行う。このため各メールボックスへの配送(transport)はprocmailで行う。

    スガラボット (守田 直哉)さんのコメントを参考にすると、メールボックスは /mail/domain.tld/user@domain.tld/Mairdir にしておいた方がdovecot2を使う時に良さそうです。

    .. continue reading ..


    Filed under: postfix,インストールメモ

    Trackback Uri