spamが来る。
それはもうたくさん来る。
spamassassinではじいているので、読まなければいけないと言うことはないのだが、気分が悪い。
で、世の中にはアドレス収集ロボットとか言うものがあるらしい。
いろいろなリソースからメールアドレスを収集するものだと思うのだが、幸いうちには来ていないらしい。
なんで来ていないと判断できるかと言うと、うちのwebページにはいくつかのメールアドレスが載っているのだが、そこにはメールが来ないから。
ちなみに、会社のメールアドレスには嫌ってほどspamが来る。昔、net newsとかに投稿したのがまずいのかしらん?
前置きが長くなったが、アドレス収集ロボットを捕獲するなんて言うページを見つけたので、必要ないのにphpの勉強もかねてうちにも設置してみた。
ログをどのように取るか悩んだのだが、後からの利用しやすさを考えて、DBに入れることにした。
PostgreSQLに新しいユーザとDBを追加して、以下のテーブルを作る。
※ trap と言うユーザが、trap+?の形式のメールを受け取れるようにするのは、postfixの設定。
あとは、トップページからリンクを張って出来上がり。
リンクを張るときには、通常のサイト訪問者がたどらないように、aタグと/aタグの間には何も入れないこと。
これで、このページを踏んでメールを送ってくれば、ログと比較することでどのIPから収集されたかがわかる。
ちなみに、ログを参照するためのページは以下のような感じ。
このままだと、連続でアクセスされた場合にDBが膨れ上がってしまう。
テーブルに参照回数などのフィールドを追加し、同じサイトからのアクセスの場合はレコードが増えないようにした方が良いかもしれない。
まあ、今のところはまったくアクセスがないようなので、この状態でしばらく様子を見てみることにしよう。
それはもうたくさん来る。
spamassassinではじいているので、読まなければいけないと言うことはないのだが、気分が悪い。
で、世の中にはアドレス収集ロボットとか言うものがあるらしい。
いろいろなリソースからメールアドレスを収集するものだと思うのだが、幸いうちには来ていないらしい。
なんで来ていないと判断できるかと言うと、うちのwebページにはいくつかのメールアドレスが載っているのだが、そこにはメールが来ないから。
ちなみに、会社のメールアドレスには嫌ってほどspamが来る。昔、net newsとかに投稿したのがまずいのかしらん?
前置きが長くなったが、アドレス収集ロボットを捕獲するなんて言うページを見つけたので、必要ないのにphpの勉強もかねてうちにも設置してみた。
ログをどのように取るか悩んだのだが、後からの利用しやすさを考えて、DBに入れることにした。
PostgreSQLに新しいユーザとDBを追加して、以下のテーブルを作る。
create table log ( id int, time timestamp, remote_addr text, user_agent text, via text, forward text ); create sequence log_id;続いて、餌用のページを作る。
<html> <head> <meta http-equiv="Context-Type" content="text/html" charset="shift_jis"> <meta name="robots" content="noindex,nofollow"> <title>trap</title> </head> <body> このページは、アドレス収集ロボットに対する罠です。<br> 以下のアドレスにメールすると、spamを送付するサイトとして記録します。<br> <br> This page is trap for collect address robots. Do not send any emails to following address.<br> <br> <?php $addr = getenv("REMOTE_ADDR"); $useragent = getenv("HTTP_USER_AGENT"); $via = getenv("HTTP_VIA"); $forward = getenv("HTTP_X_FORWARDED_FOR"); $conn = pg_connect("dbname=trap user=trap"); if ($conn) { $rec = pg_query($conn, "select nextval('log_id');"); if ($rec) { $row = pg_fetch_array($rec, 0); $id = $row[0]; $query = sprintf("insert into log (id, time, remote_addr, user_agent, via, forward) values (%d, 'now', '%s', '%s', '%s', '%s');", $id, pg_escape_string($addr), pg_escape_string($useragent), pg_escape_string($via), pg_escape_string($forward)); pg_query($conn, $query); } pg_close($conn); } echo "<a href=\"mailto:trap+$id@wizard-limit.net\">trap+$id@wizard-limit.net</a>"; ?> </body> </html>肝は、
- metaタグを使って通常の検索ロボットには収集されないようにすること。
- アクセスをDBに記録する。
- DBに記録した情報とリンクするメールアドレスを生成し、餌としてまく。
※ trap と言うユーザが、trap+?の形式のメールを受け取れるようにするのは、postfixの設定。
あとは、トップページからリンクを張って出来上がり。
リンクを張るときには、通常のサイト訪問者がたどらないように、aタグと/aタグの間には何も入れないこと。
これで、このページを踏んでメールを送ってくれば、ログと比較することでどのIPから収集されたかがわかる。
ちなみに、ログを参照するためのページは以下のような感じ。
<html> <head> <meta http-equiv="Context-Type" content="text/html" charset="shift_jis"> <meta name="robots" content="noindex,nofollow"> <title>trap</title> </head> <body> <?php $conn = pg_connect("dbname=trap user=trap"); ?> IP一覧 <table border cellspacing="0"> <tr><th>address</th><th>#</th></tr> <?php $rec = pg_query($conn, "select count(id) as c, remote_addr from log group by r emote_addr order by c desc;"); $rows = pg_num_rows($rec); for ($i = 0; $i < $rows; $i++) { echo "<tr>\n"; $row = pg_fetch_array($rec, $i); echo "<td>$row[1]</td>\n"; echo "<td>$row[0]</td>\n"; echo "</tr>\n"; } ?> </table> User agent一覧 <table border cellspacing="0"> <tr><th>User agent</th><th>#</th></tr> <?php $rec = pg_query($conn, "select count(id) as c, user_agent from log group by us er_agent order by c desc;"); $rows = pg_num_rows($rec); for ($i = 0; $i < $rows; $i++) { echo "<tr>\n"; $row = pg_fetch_array($rec, $i); echo "<td>$row[1]</td>\n"; echo "<td>$row[0]</td>\n"; echo "</tr>\n"; } ?> </table> ログ一覧 <table border cellspacing="0"> <tr><th>id</th><th>time</th><th>address</th><th>user agent</th><th>via</th><th>f orward</th></tr> <?php $rec = pg_query($conn, "select * from log order by id desc;"); $rows = pg_num_rows($rec); for ($i = 0; $i < $rows; $i++) { echo "<tr>\n"; $row = pg_fetch_array($rec, $i); echo "<td>$row[0]</td>\n"; echo "<td>$row[1]</td>\n"; echo "<td>$row[2]</td>\n"; echo "<td>$row[3]</td>\n"; echo "<td>$row[4]</td>\n"; echo "<td>$row[5]</td>\n"; echo "</tr>\n"; } ?> </table> <?php pg_close($conn); ?> </body> </html>
このままだと、連続でアクセスされた場合にDBが膨れ上がってしまう。
テーブルに参照回数などのフィールドを追加し、同じサイトからのアクセスの場合はレコードが増えないようにした方が良いかもしれない。
まあ、今のところはまったくアクセスがないようなので、この状態でしばらく様子を見てみることにしよう。
カテゴリ
Networkトラックバック(0)
このブログ記事を参照しているブログ一覧: アドレス収集ロボット対策Ver.0.01
このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/669
コメントする