同サイトのページだが探しにくいのでメモ。
SPF(Sender Policy Framework) : 迷惑メール対策委員会
SPFの歴史的背景や、SPF設定時のプロパティの解説や記述例。
間違いから学ぶSPFレコードの正しい書き方 : 迷惑メール対策委員会
SPFレコードを設定する際に間違いやすい例を参考に解説。
同サイトのページだが探しにくいのでメモ。
SPF(Sender Policy Framework) : 迷惑メール対策委員会
SPFの歴史的背景や、SPF設定時のプロパティの解説や記述例。
間違いから学ぶSPFレコードの正しい書き方 : 迷惑メール対策委員会
SPFレコードを設定する際に間違いやすい例を参考に解説。
SpamAssasinのみをインストールしたくなったのでメールサーバ再構築のついでに試してみる。メールサーバ構築のまとめ でPostfix+MySQL+postfixadminは構築済みとして想定しています。そちらではウィルスチェックも導入しているため今回はスパムチェックのみの導入。
また、学習機能があるようなので試してみる。スパム判定の精度が高まるみたい。
コレに合わせて postfixadmin +procmailな環境でメールディレクトリの自動作成・削除 のメールディレクトリ作成スクリプトに .Spam を作るコマンドを追加。
yum install spamassassin
/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 }
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
スパムメールの判定制度を上げるために学習する事が出来る。また、迷惑メールではないメールの学習も可能。
# /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
入れなおしたらかなりの確率でスパムメールを排除してくれる!
参考:
こんなエントリ(ネットショップ運営者必見?迷惑メール扱いを回避する手順 :: drk7jp )があるので、とりあえずDKIMを導入してみる。
DKIMを導入するに以前は dkim-milter を使うのが一般的だったようだけど、最近では 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
$ sudo opendkim-genkey -D /etc/opendkim/keys/clicktx.jp/ -d clicktx.jp -s default
default.private default.txt という鍵ペアが出来る。
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で設定する - 風見鶏の目
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
設定ファイル /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 には、TXT フィールドとシグニチャをつけるドメイン、セレクタ、対応する秘密鍵を1行につき1ドメインずつ書いていく。
ドメインに対する秘密鍵を指定いてあげるのかな。
$ sudo vi /etc/opendkim/KeyTable default._domainkey.clicktx.jp clicktx.jp:default:/etc/opendkim/keys/clicktx.jp/default.private
SigningTable には、どのメールアドレスに対してはどの TXT フィールドを参照するかを指定する。ここではワイルドカードが使える。
ワイルドカードを使って ***@clicktx.jp のメールが参照するTXTレコードを指定してあげる。
$ sudo vi /etc/opendkim/SigningTable *@clicktx.jp default._domainkey.clicktx.jp
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
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
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/
ドメインごとに用意しなくてはならないのかな?
自分で管理しているドメインならデフォルトのキーペアを設定して使い回してしまってもいいのかしら?
解除申請も出来なくなってしまいました。
以前はリンクをクリックして解除できたのですが、、、。
telnetでsmtpしてもHELOでドメイン名返しているし、helocheck@cbl.abuseat.orgにメールを送ることで出来るチェックも異常ない感じ。
それでもHELOで”localhost.localdomain”返すなや!って怒られてる。
どうもIPアドレスブロックごとごっそり登録する傾向があるようなので、他の迷惑なユーザーのせいじゃないかと疑っているけれど、そんな事よりもメールが送れない方が深刻な問題。
メールサーバがspamじゃないよ!って対策を色々してみてきたものの、信頼あるサーバにリレーして配信してもらうほうが確実なのかも。
Gmailのサーバを使うのもいいけど、どうやら2000通までの制限があるし、設定しないとgmailのメールアドレスに書き換えられて送られるらしいのでプロバイダ経由にすることに。
送信に関する制限事項 - Google Apps ヘルプ
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 で^^;
$ 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の再送設定はデフォルトだとちょっとお人よしですよも行うことをおすすめします。
参考
今まで逆引き設定していなかったメールサーバから送ったメールには
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ではこれだけで迷惑メールと判断されなくなった。
上記対応をして一時的に改善しても、1日程度経つと再び迷惑メールに振り分けられる場合がある。この場合はメールヘッダに X-YahooFilteredBulk: 111.222.33.4 等と入っている可能性があるので、Yahooに問い合わせる必要がある。
全てが青い文字で no relays accepted. となればおk.
Yahoo!メール(ベータ版) ヘルプ - [迷惑メール]フォルダに振り分けられたくないメールがある
へ行き、一番下の「解決しましたか?」でいいえを選択すると問い合わせフォームになるのでそこから問い合わせる。
きちんとすれば、予想以上に早い対応をしてもらえる。
対応後にはこんなメールを頂ける。
◯◯◯◯ ◯◯様 Yahoo!メールカスタマーサービス◯◯です。 このたびは、調査および調整に必要な情報をご提供くださいまして、 誠にありがとうございました。 お問い合わせの「Yahoo!メール・迷惑メールフォルダへのメール振り分け」に ついてご案内いたします。 お知らせいただいた情報をもとに調査を行い、ご利用のメールサーバーに 問題がないことを確認しましたので、弊社にて調整を実施いたしました。 ・・・以下(ry
まさに Amazon EC2のサーバからメール送信をするまでにやるべきこと (スパムメール扱いを回避する!) - RX-7乗りの適当な日々 の
DNS逆引き設定
SPFの設定
SPAMメールのブラックリストに対する解除申請
のまんまですが。
とりあえず逆引き設定で迷惑メールに振り分けられる問題は改善したのだけど、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
参考: