Tag: 迷惑メール対策



2014年 3月 15

同サイトのページだが探しにくいのでメモ。

SPF(Sender Policy Framework) : 迷惑メール対策委員会
SPFの歴史的背景や、SPF設定時のプロパティの解説や記述例。

間違いから学ぶSPFレコードの正しい書き方 : 迷惑メール対策委員会
SPFレコードを設定する際に間違いやすい例を参考に解説。


Filed under: postfix,メモ

Trackback Uri






2013年 4月 28

SpamAssassin

SpamAssasinのみをインストールしたくなったのでメールサーバ再構築のついでに試してみる。メールサーバ構築のまとめ でPostfix+MySQL+postfixadminは構築済みとして想定しています。そちらではウィルスチェックも導入しているため今回はスパムチェックのみの導入。

また、学習機能があるようなので試してみる。スパム判定の精度が高まるみたい。

  • .Spam ディレクトリの作成
  • スパムメールの学習
  • 通常のメールの学習

コレに合わせて postfixadmin +procmailな環境でメールディレクトリの自動作成・削除 のメールディレクトリ作成スクリプトに .Spam を作るコマンドを追加。

SpamAssassinのインストール

yum install spamassassin

procmailの設定

  • バーチャルドメインでのメールアカウントを使用。
  • 保存ディレクトリは /mail/domain.tld/user@domain.tld とする。
  • $DOMAINと$USERは Postfixのmaster.cfで取得している。

/etc/procmailrc を新規作成する。SpamAssassinの起動条件は参考ブログより引用。

# vi /etc/procmailrc

SHELL=/bin/bash
PATH=/usr/bin:/bin
DEFAULT=/mail/$DOMAIN/$USER\@$DOMAIN/
LOCKFILE=/mail/procmail.lock
LOGFILE=/mail/procmail.log   # ログ出力先
#VERBOSE=ON   # 詳細ログ出力

# メールヘッダー中に「 X-Spam-*** 」の記述がなければ spamassassin を起動します
:0fw
*!^X-Spam.*
|spamassassin

# メールヘッダー中に「 X-Spam-Status: Yes 」の記述があれば、「 .Spam 」ディレクトリにメールを格納します
:0
* ^X-Spam-Status: Yes
$DEFAULT/.Spam/

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

# vi /etc/logrotate.d/procmail

/mail/procmail.log {
    missingok
    nocreate
    notifempty
}

Postfixとprocmailを連携させる

main.cf の設定

# vi /etc/postfix/main.cf

....最終行付近
# virtual_transport = virtual  ←コメントアウト
virtual_transport = procmail  ←追記
procmail_destination_recipient_limit = 1 ←追記

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

SpamAssassin起動

# service spamassassin start

SpamAssassin自動起動設定

# chkconfig spamassassin on

Postfixを再起動して設定を有効化

# /etc/rc.d/init.d/postfix restart

スパムメールの学習

スパムメールの判定制度を上げるために学習する事が出来る。また、迷惑メールではないメールの学習も可能。

スパムメールを学習するコマンド(全てのユーザのSpamフォルダを対象)
# /usr/bin/sa-learn --spam /mail/*/*/.Spam/cur
通常のメールを学習するコマンド(全てのユーザの受信フォルダを対象)
# /usr/bin/sa-learn --ham /mail/*/*/cur

参考ブログではcronに設定していたけど、Spamメールを確認してから手動でコマンドを実行するようにする。~/binにコマンドスクリプトを作成してsudoで実行できるようにしておく。

$ mkdir ~/bin
$ vi ~/bin/spam-learn 
#!/bin/sh

/usr/bin/sa-learn --spam /mail/*/*/.Spam/cur

# スパムメール保存ディレクトリの中身を強制的に消去してよいのなら以下の記述を追加
/bin/rm -f /mail/*/*/.Spam/cur/*
echo 'All Spam Mail Deleted.'

$ chmod 700 ~/bin/spam-learn
$ sudo chown root:root ~/bin/spam-learn

スパムメール学習コマンドを使う時

メーラーでSpamフォルダに迷惑メールしか無いと確認してから以下のコマンドで学習&スパムメール削除

$ sudo spam-learn

入れなおしたらかなりの確率でスパムメールを排除してくれる!

参考:


Filed under: postfix,メールサーバ

Trackback Uri






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