Tag: メールサーバ



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月 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






    2009年 10月 14

    より新しい記事 2011-01-12
    http://perl.no-tubo.net/2011/01/06/メールサーバ構築のまとめ(複数のバーチャルド/

    CentOS5.3

    いろいろ構築した結果、メールサーバは Postfix +MySQL +Dovecot +postfixadmin で構成する事に決めた。
    postfixadminを使う利点は、

    • 複数のバーチャルドメインでの運用が可能&管理が楽
    • ドメインの追加やメールアドレスの追加がブラウザからGUIで出来る

    さらに、procmailとspamassassin、Clam AntiVirusを使って、スパムメール対策とウィルス対策も行う。

    バーチャルドメイン環境でprocmailとspamassassinを使うにコツがいる(らしい)

    ネットでの情報が少ない(ヒットしない)のでメモ。

    メールサーバの構築

    メールサーバの構築は メールサーバー構築(Postfix+Dovecot) – CentOSで自宅サーバー構築 を参考に行った。

    おやじさんのPostfixによるSMTPサーバの構築(RedHat標準版編)も参考になる。

    ウィルス対策

    ウィルス対策は アンチウィルスソフト導入(Clam AntiVirus) – CentOSで自宅サーバー構築 を参考に行った。

    スパムメール対策

    スパムメール対策は メールサーバーでウィルス&スパムチェック(Postfix+Clam AntiVirus+SpamAssassin) – CentOSで自宅サーバー構築 を参考に行った。

    postfixのMySQL対応化とpostfixadminの導入

    Postfixによるメールサーバ構築 (Postfix+MySQL+Dovecot+postfixadmin) を参考に行った。

    MySQL対応は CentOS5.3 PostfixをMySQL対応にするで行った。

    リンク先で作成した(cat となっているが vi 等で新規作成する事)

    /etc/postfix/mysql_virtual_alias_maps.cf
    /etc/postfix/mysql_virtual_domains_maps.cf
    /etc/postfix/mysql_virtual_mailbox_maps.cf
    /etc/postfix/mysql_virtual_mailbox_limit_maps.cf

    のファイルにはMySQLのパスワードが含まれているのでパーミッションの変更を行う事。

    chmod 640 /etc/postfix/mysql_*
    chown root.postfix /etc/postfix/mysql_*

    メールの保存は/mail 以下となる。

    だいたいうまくいくのだが、多少の変更が必要。

    spamassassinを有効にするにはprocmailでメールボックスに配送しなければならない。

    バーチャルドメインの場合procmailが使えないという記事が多かったので心配だったが、

    postfixのバーチャルドメイン管理でのspamフィルタについて

    を読むとどうやら使えるらしい。

    Postfixの設定

    main.cfの設定。

    http://centos.bungu-do.jp/2008/11/postfix_3_postfix.html のmain.cf 設定を少々変更。

    cp /etc/postfix/main.cf /etc/postfix/main.cf.org
    vi /etc/postfix/main.cf
    -------------------------------------------------------------------------------
    myhostname = mail.example.com ←自メールサーバFQDN
    mydomain = example.com ←自サーバドメイン
    #myorigin = $mydomain
    myorigin = $myhostname
    
    #inet_interfaces = localhost
    inet_interfaces = all
    
    #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
    mydestination =
    
    #relay_domains = $mydestination
    relay_domains = $mydestination
    
    home_mailbox = Maildir/
    
    # IF YOU USE THIS TO DELIVER MAIL SYSTEM-WIDE, YOU MUST SET UP AN
    # ALIAS THAT FORWARDS MAIL FOR ROOT TO A REAL USER.
    #
    #mailbox_command = /some/where/procmail
    #mailbox_command = /some/where/procmail -a "$EXTENSION"
     mailbox_command = /usr/bin/procmail ←追記
    
    smtpd_banner = $myhostname ESMTP unknown
    
    local_transport = virtual
    # virtual_transport = virtual ←コメントアウト
    virtual_transport = procmail ←追記
    virtual_mailbox_base = /mail
    virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
    virtual_alias_domains = $virtual_alias_maps
    virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
    virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
    virtual_minimum_uid = 10000
    virtual_uid_maps = static:10000
    virtual_gid_maps = static:10000
    
    maximal_backoff_time = 800s
    minimal_backoff_time = 100s
    bounce_queue_lifetime = 60m
    maximal_queue_lifetime = 60m
    
    #mailbox_size_limit = 1024000000
    message_size_limit = 20480000
    
    #virtual_mailbox_limit = 51200000
    virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
    virtual_mailbox_limit_override = yes
    virtual_overquota_bounce = yes
    virtual_mailbox_limit_inbox = yes
    
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    smtpd_sasl_local_domain = $myhostname
    smtpd_client_restrictions = reject_rbl_client bl.spamcop.net
    smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
    -------------------------------------------------------------------------------

    master.cfの設定。

    vi /etc/postfix/master.cf
    
    最終行に追記
    procmail unix - n n - - pipe
      flags=R user=vuser argv=/usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc

    procmailのルール、/etc/procmailrcを新規作成する。

    vi /etc/procmailrc
    
    SHELL=/bin/bash
    PATH=/usr/bin:/bin
    DEFAULT=/mail/$DOMAIN/$USER\@$DOMAIN/
    #LOGFILE=/mail/procmail.log
    LOGFILE=${DEFAULT}.procmail.log
    #LOCKFILE=/mail/procmail.lock
    LOCKFILE=/mail/$USER\@$DOMAIN.procmail.lock
    VERBOSE=ON
    
    :0fw
    |/usr/bin/spamc

    LOGFILEはテスト段階では/mail/procmail.logにしておくと楽。

    VERBOSE=ON は詳細ログを記録する設定なので本格運用する際にはコメントアウトする。

    また、LOCKFILEはユーザー数が増えた時の為に各ユーザーごとにロックファイルを使うようにしてみた。

    ログの肥大化を防ぐため、ログローテーション設定ファイル新規作成する。

    vi /etc/logrotate.d/procmail
    
    /mail/*/*/.procmail.log {
        missingok
        nocreate
        notifempty
    }

    注意点として、バーチャルドメインでの運用の場合ローカルユーザーのメールボックスにメールが配信されない。root宛のメールも然り。

    root宛のメールが普段使っているメールアドレス宛に配信されるようにしておく。

    vi /etc/aliases
    
    # Person who should get root's mail
    #root:          marc
    root:           myname@domain.com ←最終行に追加
    
    newaliases

    myname@domain.comにroot宛のメールが届くようになる。

    テスト

    メールを配信してみてヘッダ情報を見る。

    spamasassinが適用されていれば

    X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on xxx.xxxx.jp
    X-Spam-Level:
    X-Spam-Status: No, score=-0.1 required=13.0 tests=AWL,CONTENT_TYPE_PRESENT, ISO2022JP_BODY,ISO2022JP_CHARSET,X_MAILER_PRESENT autolearn=ham version=3.2.5

    Clam AntiVirusが適用されていれば

    X-Virus-Scanned: amavisd-new at xxxx.jp

    がヘッダ情報に挿入されているはず。

    その他のテスト方法は各リンクに掲載されていた通り。

    ユーザーメールディレクトリが作成されない

    ・・・なぜかメールディレクトリが作成されない。

    spamチェックのためメール配送をprocmailにするとディレクトリ作成されない事が判明。

    メール用ディレクトリは /mail 以下で、ユーザーが vuser 、グループが vuser 、パーミッションは0771。

    とりあえずユーザー postfix にセカンダリグループ vuserを追加してみたら既存のドメインには作成される。

    新規にドメイン追加>メールアドレス追加の場合は作成されない。

    この後したい事

    postfixadminでドメイン、メールユーザー等を削除した場合は各ディレクトリが削除されない。

    postfixadminのconfig.inc.phpにオプション設定があるが、シェルスクリプトで各動作が行えるようだ。

    シェルスクリプト・・・書けねぇ。。。

    postfixadminでメールボックスを削除する
    PostfixAdminのイケてないところ

    この辺に該当の対処が書かれている。

    cronを使って削除する方法のようだ。

    postfixadmin/ADDITIONS 内にある、

    postfixadmin-domain-postdeletion.sh
    postfixadmin-mailbox-postcreation.sh
    postfixadmin-mailbox-postdeletion.sh

    こいつらを使えば出来るかな?

    以下は分かりにくいのでまとめてみた

    postfixadmin +procmailな環境でメールディレクトリの作成・削除

    自動メールボックス作成に挑戦

    .. continue reading ..


    Filed under: CentOS5.x,postfix,postfixadmin

    Trackback Uri