2009年8月16日日曜日

SPAM対策あれこれメモ



現状のスパム対策に関する頭の整理を兼ねたメモ。

今のところ色々な方法が考案されているけどS25Rに関連する話(greylistingとtarpittingを組み合わせる)が効果高そうな気がしていて前から試したかったのですが面倒でやっていなかった。が、今の環境ではWebメールからシコシコ読む事が多くなったのでスパムを捨てるのが面倒くさいという事で効果測定をする事に。その前に現状よく語られるSPAM対策の個人的な理解と見解を。

HELO

ここの情報をどこまで信用してフィルタしてしまっていいのか疑問を感じる。

RBL(DNSBL)

ブラックリストの仕組みとしては有用だと思うけど、IPベースでフィルタするので巻き添えを食らってメールが届かなくなる事があるのがコワイ。でも自前で作るとメンテが面倒くさい。

Bayesian filter

話題になり始めた頃に試したが、効果は非常に高い気がした。ただし、100%間違えなく振り分けるという事は不可能なので、結局誤認識して捨てられていないかという所謂ゴミ箱漁りをしたくなるので本末転倒だと感じている。実際友達に送ったメールがそういうのに引っかかってて連絡がつかなかったなんて事もあったので余計な気を回す必要が増えて嫌い。個人的な見解ではサーバ側でやるよりもユーザが勝手にやれば良いと思う。とはいえこれはPOPでとったメールに対しては有効だけど、IMAPだとユーザ側でやるのはちょっと面倒かも。

S25R

スパムの殆どはプロバイダから送られてくるという観点でのもの。というわけでプロバイダから送られてくる物は殆どひっかけられるわけだけど、自宅サーバの人からの物も捨ててしまう。個人的な見解では動的IPでメールサーバやる事自体がナンセンスだと思うし、そんなもん捨ててしまえとは思うけどネ。結局のところgreylistingの前フィルタとしてしか意味が無いと思っている。

tarpitting

やりたい事はわかるけど、息を止めている時間をかなり長めにしないと効果が無さそうなデータが出ている様だし、サーバ側の負荷になるので正直好みではない。積極的に導入する気がしないので今後実験サーバをたてる際にでも見てみたい。と言う事でこれはまだ試してません。

greylisting

今回試したい目玉だった。一見さんは再送を強いるという事で着信が遅くなってしまうのが問題。ただし、普通のサーバなら不達は無いし、一回しかトライしないサーバだとしても送信者にエラーくらいは返すだろう。S25Rを使って怪しい物だけに適用する事でマイナス部分をかなり減らせる。また、SQLGrey等だと自動的にリストを作ってくれるので面倒が少ない。

番外編IPでフィルタ

アジア系とか南米系とか自分と関係無いだろうと思っているIPを根こそぎ拒否してしまうもの。正直気持ちはわかるけど過激すぎる気がする。酷いところは日本以外のIPは全部遮断とかもあったし・・・。ホームページでもこういうフィルタをしているところがあって情報を収集している際にはねられて一寸イラっとした事もちらほら。ある意味鎖国だよねぇ・・・日本人らしい対応だと思うけど。うちの環境では出来ない方法だな。




まぁ、とりあえずこんなところかな。

正直どれもリスクがあって手放しにこれだっという対策は無いと感じている。S25R+greylist、そしてサーバとしての自前のブラックリストを簡単に管理出来る仕組みを入れるというところがリスクを考えた場合の落としどころとしては良いところかなと。

で、実際にpostfix+sqlgreyを設定してみた効果はというと日本のアダルト系、出会い系のスパムはgreylistでほぼ壊滅に追い込めた。が、海外系のバイアグラだのなんだのってメール、しかもbotネットから来ていると思われるメールは再送をきちんとやってくれてスルーされてしまって結局期待してたほど劇的な効果は無かった。

この結果から言える結論としては



  1. 日本のSPAM業者は効率向上の為に真面目にサーバをSPAM向けにチューンしている。そのおかげでgreylistやおそらくtarpitが非常に有効。

  2. botネットを使う様な連中は物量で攻めて来るので1の様なチューンをしておらずノーマルなサーバから送っている為に普通のサーバと見分けがつかない為すり抜けてしまう。




こんなところだと思う。で1は対策しやすいとして2に関しては頭が痛いところ。見かけ上普通のサーバなのでブラックリストを使う位しか思いつかないけど、自動化出来ないといたちごっこだし、同じホストからの再送もそれほど無いので費用対効果が薄い感じ。同じ内容を複数のサーバから送ってくる(botネット)からそういう部分でフィルタは出来る気がしているけど、やっぱりコンテンツフィルタは抵抗があるな・・・。ブラックリストの仕組みにアドレス、ホストだけじゃなくて内容も保存しておいてコンペアとるなんてのも良いのかな??

もうちょっと様子見&統計をとってみたいと思う。




2009年8月14日金曜日

はじめの一歩



大分放置していたここだけど、無駄に金払うのもなんなので再開してみようと思う。(二年も経ってやがる・・・)

現在夏休み中。ちょっと仕事の都合で突然日程が確定したので予定は0。子供の相手をしつつ、ふとiPhoneの開発を真面目にはじめてみようと思い立つ。

で、とりあえず証明書を登録しないと実機での実行が出来ないのでこの作業をする。

http://d.hatena.ne.jp/uzulla/20080911#p1

解説してるサイトは色々あるみたいだけど、とりあえずここを参考にする事にする。一応メモも含めてリンク張っておく。感謝。

証明書をアップするところは名称がちょっと違っていたけど最近文言が変わったのかな?このサイトには「Add Certificate」を押せとあるけど「request certificate」になってた。

まぁ、この段階でトラブル発生したわけですが・・・。

証明書をアップロードした段階でふと気づいたんだけど名前が化けてる。別に実用上は問題無いのかもしれないけど気になったのでリジェクトして再登録をしようと思ったけど、この情報ってAppleのユーザ情報のDBから引っ張ってくるみたいだけど、開発者のページの個人情報編集ページでは名前は変更出来ないのであった。

まぁ、これ、かな~り昔から問題だと思っている不具合なんです。Appleの個人情報のDBが日本語のページだと日本語しか受け付けないくせに開発者のページだと英語しか受け付けないというショボイ仕様になっていて、しかも英語サイト側ではこの日本語の情報をうまく扱えず、文字化けした挙げ句にクエリーがこけちゃって先に進めなくなるなんて笑えない状況。こんなお粗末なサイトって今時の他の大手IT系?のサイトみてもどこも無いと思うんだけどどうなんすか。

過去の資産引きずって、しかもそのフレームワークの開発が止まってしまっているのが問題なんでしょうけど使いにくすぎなんで即刻直して欲しい。他の国の人たちも困ってるんじゃないかね。開発者のページには日本語使うと化けるから云々と書いてあるけど、上に書いた様に同じ情報をiTunesだか何だか忘れたけど購入時の情報としても使っていたりするので、そっちは日本語にしないと駄目だから渋々日本語にするとまた英語ページで以下略と。まぁ、アカウントを英語用と日本語用にわけるのが正解だと思います。複数アカウント管理するのイヤなんでそのままにしてますが、Appleが心を入れ替えて作り直してくれるのがベストです。

前にもβ版入れようとした時だかなんだかにこれで引っかかって、Appleにクレームをつけた後に、返事が来る前にどこかのページで自分でなおせた記憶があるんだけど色々Appleにからむページを見てみたけど思い出せないのでAppleに変更の依頼をしてみた。日本側の対応は素晴らしいスピードだったけど、その後アメリカ側に作業を依頼したみたいで・・・そこで現在止まっています。ウーム。

しかしどこでいじったんだっけなぁ・・・。イチイチメールで依頼するのもまどろっこしいし。

とりあえず実機で動かすのは後にして遊んでみようと思う。といったところで何も有益な情報の無い状態で今日の日記は終わり。




はじめの一歩 Part2



終わりなんて書いてみたけど、書き終わってみたらユーザー情報の更新が終わっていた。素晴らしい。

というわけで先に進もう。一応実機で自作プログラムを動作させるまでは終わったけど、先ほど書いたサイトの情報はいくつか間違っていたので補足。

基本的な流れは問題無し。ただし、証明書をキーチェーンアクセスで登録する際にシステムで登録せよと書いてあるけど、これはログインにしないとXcodeが探しにいけずにprofile doesn't match any valid certificate/private key pair in the default keychainなんてエラーになってしまった。というわけでログインにして下さい。(何故かシステムの方に登録した物を削除したいのにいくら削除を選んでも削除されなかった。ロックははずしてるのにな。)

余談だけど、オーガナイザーのDEVICES>[iPhone名]の中のProvisioningに追加のプロセスで追加のタイミングでは何も表示されなかった。これは現在β版のSDKをつかっているからかもしれない。まぁ、気にせず進むべし。

それから、App IDは適当にと書いてあるけどDescriptionは確かに名前か説明を書いておけばいいので適当で良いけど、Bundle Identifier (App ID Suffix)はドメイン名+作ってるアプリ(プロジェクト)名にしておくのが無難。別に何か適当にcom.example.testappとか固定でも良いけど。

あとは手順通りにしておけばXcodeのメニューのプロジェクト>プロジェクト設定を編集の中のビルドタブ>Code Signing>コード署名ID>Any iPhone OS Deviceのところで自分の登録した物がみえているはず。それを選択して一端ウィンドウを閉じる。

次に同じくプロジェクト>アクティブターゲット"HOGE HOGE"を編集を開きプロパティタブの識別子を先ほどの開発ページのBundle Identifier (App ID Suffix)に登録した物で置き換える事で作業終了。