S.C. MAGI-SYSTEM 日記
Diary
2009年になって、実に3年ぶりに更新再開。

hns - 日記自動生成システム - Version 2.19.9

2004年03月21日() [n年日記]

[天気:晴れ](家) 起床:10:30 就寝:24:00

#1 [Web] Openbot form TW

総統選挙で沸き立つどこかの国から DoS 攻撃を受けました。
受けたのは今日の 14:09:24 から 16:29:05 までの 140分間。
実に総計 785 リクエストです。単純に考えて10秒に1回のペース。
しかし、実際には等間隔で定期的に来るのではなくて、 あるタイミングで 100 近いリクエストを同時に、 しかも全て日記のある CGI に対して *1 投げてくる 激烈凶悪 な bot です。
この時のすさまじさは MRTG を見てもらうと分かるかもしれません。
ピーク時には load average が 30 を越え、sendmail がリクエストを拒否。 また squid は swap が足りなくなって core を吐く…と散々でした。
でもこれでサーバが止まることにならなかっただけ助かりましたね。
早速昨日のApacheモジュールダイエットが効いたのでしょうか?(笑)
ログにはこんな感じに残っています。
202.1.239.117 - - [21/Mar/2004:14:09:24 +0900] "GET /robots.txt HTTP/1.0" 200 43
"-" "Openbot/3.0+(robot-response@openfind.com.tw;+http://www.openfind.com.tw/robot.html)"
あまりに腹が立つので IP を晒します。
ところでこの IP アドレス、どこが保有しているのか whoisで調べてみましたが…
inetnum:      202.1.232.0 - 202.1.239.255
netname:      YAHOO-ASIA
descr:        streaming media, e-mail, instant messenger, www,  etc
country:      HK
とあるので、どうやら Yahoo! 香港の検索 bot らしい。
bot 自体は TW 製なんだけど、運用しているのは HK なのか。
ちなみに本家の方の Openbot は 66.237.60.96 (robot66.openfind.com) のように .openfind.com で逆引きされるので、ホスト名ベースで拒否すれば大丈夫。
いくらリンクを順にたどる bot だからって、CGIに対してのリクエストか そうでないかくらいは識別できるだろうに。
まあ、あっちの国の人に日本の「察する」なんて文化が理解できる はずがないので、アドレスブロックごと ipf でパケットを落とす。

…はぁ。
*1: 一度に30以上も perl が同時に起動する…悪夢を想像してみて下さい。

#2 [*BSD] sieve

Cyrus IMAP Server に付属してくる sieve を試してみました。
この sieve というのは imapd が lmtpd 経由でメールを受け取って、 ユーザのメールボックスに配信する際に仕分けやフィルタリングをすることのできるものです。
国内で紹介されているサイトは非常に少なく、調べた限りでは ここ[nekojita.org]ここ[dendai.ac.jp] くらいでしょうか。
書き方が結構特殊で、perlもどきみたいな感じです。

実際の設定の仕方ですが Cyrusのドキュメント が参考になります。
まず cyrus.confで sieve を有効にする必要があります。
(snip)
# UNIX sockets start with a slash and are put into /var/imap/socket
SERVICES {
  # add or remove based on preferences
  imap		cmd="imapd" listen="imap" prefork=0
  imaps		cmd="imapd -s" listen="imaps" prefork=0
  pop3		cmd="pop3d" listen="pop3" prefork=0
  pop3s		cmd="pop3d -s" listen="pop3s" prefork=0
  sieve		cmd="timsieved" listen="sieve" prefork=0	# これです
(snip)
ところで、この設定では cyrus の master daemon が "sieve" という名前の port で sieve のサービスを listen していることになっていますが、 実は /etc/servicesには "sieve" という名前のサービスは 存在しません 。(笑)
Cyrus のドキュメントによると "sieve" は port 2000 を想定しているそうですが、 FreeBSD の port 2000 は "callbook" となっていました。
まあ /etc/servicesの port 2000 を "sieve" に書き直すのもいいのですが、OSのファイルをあまり いじりたくないので、上記の cyrus.confの listen=" sieve " を listen=" callbook " に書き換え。
ここで
melchior% telnet localhost 2000
Trying ::1...
Connected to localhost.
Escape character is '^]'.
"IMPLEMENTATION" "Cyrus timsieved v2.2.3"
"SASL" "NTLM LOGIN PLAIN OTP DIGEST-MD5 CRAM-MD5"
"SIEVE" "fileinto reject envelope vacation imapflags notify subaddress relational regex"
OK
logout
OK "Logout Complete"
Connection closed by foreign host.
となれば大丈夫。
続いて sieve のスクリプトを書く。
今回はうちの CTM 用のアカウントで例を示します。
require ["fileinto", "regex", "reject"];

if allof (
	header :contains "to" [
		"ctm-cvs-cur@freebsd.org",
		"openbsd-cvs@openbsd.org",
		"openbsd-cvs-x11@openbsd.org",
		"openbsd-cvs-xf4@openbsd.org"
	],
	header :regex "Subject" "^ctm-mail"
) {
	keep;	# CTMのメールは保持
} elsif anyof (
	header :contains ["to","cc"] [
		"ctm-announce@freebsd.org",
		"ctm-users@freebsd.org",
		"mailman-owner@freebsd.org"
	]
) {
	redirect "xxx@yyy.zzz";	# CTM以外のメールで、ML経由のものは
				# 管理者アカウントへリダイレクト
} else {
	reject;	# それ以外は SPAM なので、リジェクト
}
この内容を sieve.scriptに書くとします。
そうしたら
melchior% sieveshell localhost
Please enter your password: ******
> put sieve.script
(文法エラーがある場合はここでエラーが出ますので修正)
> list
sieve
> activate sieve
> list
sieve  <- active script
> quit
これで完了です。
ちなみに sieve を無効にしたい場合は "deactivate" とします。

今回は CTM 用のアカウントでの SPAM 避け (というかCTM以外を無視する) の設定でしたが、 メーリングリストなどに複数入っていたりする場合、
if header :contains "List-Id" "DarwinPorts development" {
	fileinto "INBOX.ml.darwinports";	# ml/darwiportsボックスに移動
}
みたいな感じに仕分けできます。
また、ヘッダや Subject 、宛先に応じて
if header :is "X-MAGI-NOTICE" "IP change" {
	redirect "xxx@keitai.zzz";	# まず携帯のメアドに転送
	keep;				# 一応、ここにも残しておく
}
みたいに IP アドレスが変わったら携帯に通知する…なんてこともできます。(笑)

sieve はサーバ側で設定してしまえばクライアントを選ばないし、 ただの仕分けやフィルタリングだけでなく、状況に応じた転送ができるので 覚えるといろいろと便利かもしれませんね。

#3 [Home] 7days

実際には 7 どころかあと 5日 なんですけど…
ちょっと今週末は現実逃避しすぎました。(笑)
明日から国試が終わるまではネットワークから自分を切り離すことにします。
なので日記も更新しませんので、どうぞよろしく。


最近の日記
2009年12月31日
定期アップデート
2009年04月03日
定期アップデート
2009年03月22日
定期アップデート
2009年01月26日
pomera
2009年01月23日
今日のBOT
2009年01月22日
BOT
2009年01月20日
Seagate HDD
PowerPCの備忘録
RSS feed
abuse
2009年01月19日
Windows 7 beta
2009年01月16日
perl-after-upgrade
2009年01月14日
アクセスカウンタ
2009年01月13日
ひとまず完了
2009年01月12日
7.1-RELEASE(適用)
2009年01月10日
hns 2.19.9
2009年01月09日
recursion no
2009年01月08日
Sender ID/SPF(各論)
以上、1 日分です。
先月 2004年03月 来月
01 02 03 04 05 06
07 08 09 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Namazu for hns による簡易全文検索
詳しくは 詳細指定/ヘルプを参照して下さい
検索式:

タイトル一覧
カテゴリ分類
Powered by hns-2.19.9, HyperNikkiSystem Project