taka2さんの方法は,最初のMTAOBのIPアドレスを把握して,それに対してそれ以外のアドレスからの接続があった場合,そのIPを拾うということでした.ですが,私の場合,先のコメントで書いたように,下記のようなReceived行のメイルを受けています.(by 以下に mgate が6回も表れており,最後の by mgateが本来のIPアドレスをつかまえています.)
Received: from mgate.center.wakayama-u.ac.jp (mgate.center.wakayama-u.ac.jp [133.42.248.34]) by wada5.cv (Postfix) with ESMTP id 7B0D3E982FE for <twada@wada1.sys.wakayama-u.ac.jp>; Tue, 17 Apr 2007 01:05:32 +0900 (JST) Received: from mgate.center.wakayama-u.ac.jp (mgate.center.wakayama-u.ac.jp [127.0.0.1]) by mgate.center.wakayama-u.ac.jp (8.13.6/8.13.6) with ESMTP id l3GGHprR012095 for <twada@wada1.sys.wakayama-u.ac.jp>; Tue, 17 Apr 2007 01:17:51 +0900 Received: from leo.ieee.org (leo.ieee.org [140.98.193.29]) by mgate.center.wakayama-u.ac.jp (8.13.6/8.13.6) with ESMTP id l3GGHmxA012065 for <twada@wada1.sys.wakayama-u.ac.jp>; Tue, 17 Apr 2007 01:17:49 +0900 Received: from gemini3.ieee.org (gemini3.ieee.org [140.98.193.188]) by leo.ieee.org (8.12.10/8.12.10) with ESMTP id l3GGHhvL011239 for <twada@ieee.org>; Mon, 16 Apr 2007 12:17:43 -0400 Received: from hormel8.ieee.org (hormel8.ieee.org [140.98.193.231]) by gemini3.ieee.org (Postfix) with ESMTP id B1CA84D178 for <twada@ieee.org>; Mon, 16 Apr 2007 12:17:42 -0400 (EDT) Received: from mgate.center.wakayama-u.ac.jp (mgate.center.wakayama-u.ac.jp [133.42.248.34]) by hormel8.ieee.org (8.13.8+Sun/8.13.8) with ESMTP id l3GGHc8f020641 for <twada@ieee.org>; Mon, 16 Apr 2007 12:17:39 -0400 (EDT) Received: from mgate.center.wakayama-u.ac.jp (mgate.center.wakayama-u.ac.jp [127.0.0.1]) by mgate.center.wakayama-u.ac.jp (8.13.6/8.13.6) with ESMTP id l3GGHcvO012055 for <twada@ieee.org>; Tue, 17 Apr 2007 01:17:38 +0900 Received: from mail.sys.wakayama-u.ac.jp (mail.sys.wakayama-u.ac.jp [133.42.159.1]) by mgate.center.wakayama-u.ac.jp (8.13.6/8.13.6) with ESMTP id l3GGHbn6012050 for <twada@ieee.org>; Tue, 17 Apr 2007 01:17:37 +0900 Received: by mail.sys.wakayama-u.ac.jp (Postfix, from userid 1086) id CBA673823E3; Tue, 17 Apr 2007 01:17:37 +0900 (JST) Received: from mgate.center.wakayama-u.ac.jp (mgate.center.wakayama-u.ac.jp [133.42.248.34]) by mail.sys.wakayama-u.ac.jp (Postfix) with ESMTP id AB0ED3823E2 for <twada@sys.wakayama-u.ac.jp>; Tue, 17 Apr 2007 01:17:37 +0900 (JST) Received: from mgate.center.wakayama-u.ac.jp (mgate.center.wakayama-u.ac.jp [127.0.0.1]) by mgate.center.wakayama-u.ac.jp (8.13.6/8.13.6) with ESMTP id l3GGHbYb012047 for <twada@sys.wakayama-u.ac.jp>; Tue, 17 Apr 2007 01:17:37 +0900 Received: from alert.hindawi.org ([82.129.218.7]) by mgate.center.wakayama-u.ac.jp (8.13.6/8.13.6) with SMTP id l3GGGuca011900 for <twada@sys.wakayama-u.ac.jp>; Tue, 17 Apr 2007 01:17:36 +0900 x-esmtp: 0 0 1 Message-ID: <twadasyswakayama-uacjpvtcsatwadasyswakayama-uacjp@hindawi>
バグレポート (スコア:3, 参考になる)
というのは、メール送信者IPアドレスを抽出する(NNIPF/PERL/header.plの中のmain'HeaderAnalysis)時に、メールヘッダの最初から走査して、Received:行の内、最後にMTAOBのリストに一致したものからメール送信者IPアドレスを抽出しているように見えます(違ったらすまん)。普通、Received:行は、新しいものが最初の方に来ますから、MTAOBのリストと一致するものの中で、一番古いものと一致することになります。
という事は、MTAOBのリストを知っているスパマーは、偽のReceived:行を紛れ込ませることによって、この偽のメール送信者IPアドレスを与えることが可能です。普通、スパマーが挿入するReceived:行の方が古いですから。
通常、MTAOBのリストは、DNSのMXレコードを引けば知ることができそうですから、割と簡単にこの攻撃は成立します。
ところで、このコード、汚いです。せめてインデントだけでもマトモにした方が…役に立たないきれいなコードより役に立つ汚いコードを書く方が偉いとは思いますが。
俺様がリファクタリングしてやろうか、っつーか、Rubyで書き直したろか、っつーか、MILTERにできんか、っつーか。きれいに書き直したらまだバグが見つかりそうな気も…
作り直すのなら (スコア:2, 興味深い)
作り直しを考えるのなら、DNSBLとして振舞うように仕立てると、ヘッダ解析しなくてもメールサーバが接続元IPアドレスを拾ってくれるし、負荷や管理対象絞込みの観点でもメールサーバとうまく分離できて幸せかもしれませんよ。
Re:作り直すのなら (スコア:1)
インターネットから引けるMXレコードに載ってるようなMTA向けであれば、おっしゃる通りだと思います。
Re:作り直すのなら (スコア:1)
いや、組織内のローカルなDNSBLサーバって位置づけでいいじゃないですか。
メールサーバが参照するローカルなDBバックエンドサーバのひとつってことで、アカウントや設定情報を抱えたLDAPサーバと同じようなところに置けば。
Re:作り直すのなら (スコア:2, 参考になる)
読み返して勘違いに気づきました。
組織のボーダゲートウェイなメールサーバから中継されて受け取る自分のメールサーバにフィルタを仕掛けたいってことですか。 それならまあ確かにReceivedヘッダにしか情報がないかな。
確かに (スコア:1)
jcode.plではなくEncodeの方に書き直したりとか、フィルタの部分だけクラス化させたりとか、`hostname`をSys::Hostnameモジュールを使った方が良いと思う。
# あ・・・う・・・見てたらうずうずと・・・
Re:バグレポート (スコア:1)
この問題をよくよく考えると、「外部からMTAOBに接続した部分のReceived:行の抽出」って簡単にはできそうにないですね。
MXにサーバが複数あって、セカンダリMX以降のサーバが外から受信して、プライマリMXのホストに転送した場合、
Received: は新しい順に「プライマリMXホストが受け取ったときのもの」「セカンダリMXホストが受け取ったときのもの」と並びます。
スパム送信ホストががセカンダリMXを偽装したヘッダを付けてプライマリMXに接続した場合にも、やはり「プライマリMX」「セカンダリMX」と並びますから、この二つはホスト名ベースでは区別できません。
Received: には、新しい順には、内部ホスト群→MTAOBホスト群→外部ホスト群、と並ぶはずですから、
MTAOBはホスト名だけではなく、IPアドレスも把握した上で、
「最初のMTAOBホスト群の中で、MTAOB以外のIPアドレスから接続したもの」というReceived:行を検出すればいいのかな。
Re:バグレポート (スコア:1)
Re:バグレポート (スコア:1)
過去のReceived:列を正しく喰うオートマトンを作ったところで、それがすべてのケースを網羅しているとは限りませんよね。障害が起こった場合、別の経路でメールを受け取る仕組みになってるかも知れないわけだし。
「Macではウイルスを心配しなくてよい」程度の話ですね。あまりカッコのイイ主張ではない気がします。
Re:バグレポート (スコア:1)
Re:バグレポート (スコア:1)
Re:バグレポート (スコア:1)
皆さんコメントありがとうございます.
ちなみに,httpdのログを調べ,6000台ほどのアクセス元IPアドレスの弁別度を調べたところ,99%以上の弁別度をもつものが約4%くらい含まれていました.ある意味,感心しました.
Re:バグレポート (スコア:0)
わざわざPerl4を探してきたんですかね。
発想は興味深いだけに惜しいです。