Hikiを使って公開しているページに対するTrachBack SPAMがひどいので、tDiaryのソースなどを参考にしつつ、言及のないTrackBackをはじくよう設定。tDiaryのspamlinkcheck.rbをベースに「言及リンク」よりは条件を緩めて、ページへのリンク、ページのタイトル、筆者(私)の名前、サイトのタイトルのいずれかがTrackBack元のページに含まれていれば受け付けるようにしました。
まずmisc/plugin/trackback.rb にres_error()メソッドを追加
def res_error( msg )
response = <<-END
<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>1</error>
<message>#{msg}</message>
</response>
END
head = {
'type' => 'text/xml',
'Vary' => 'User-Agent'
}
head['Content-Length'] = response.size.to_s
head['Pragma'] = 'no-cache'
head['Cache-Control'] = 'no-cache'
print @cgi.header( head )
print response
end
次に、同じファイルの trackback_post メソッド内に以下のソースを追加。
begin
chkf = false
src_uri = url.dup.untaint
allow_keys = [ "#{@conf.index_url}?#{@page.escape}", utf8_to_euc(@db.get_attribute(@page, :title)), @conf.author_name, @conf.site_name ]
Timeout::timeout( 10 ) do
require 'open-uri'
open( src_uri ) do |f|
src_data = f.read( 100 * 1024 ).to_euc
allow_keys.each do |k|
if src_data.include?(k)
chkf = true
break
end
end
end
end
unless chkf
res_error("Sorry, Your trackback has refused by SPAM filter. Please contact me if you are not a SPAMMER.\n")
return
end
rescue
res_error("Sorry, something wrong and I cannot accept your trackback.\n")
return
end
allow_keysに要素を増やせばTrackBackを受け付ける条件をより緩和できます。
しばらくこれで様子見。
HP社のProLiantシリーズの消費電力シミュレータなんてものがあるんですね。CPUやメモリ/HDDの容量を設定し、システムの利用率をスライドさせると、それぞれの状況での実際の消費電力を表示してくれます。
画像はDL320G5pの結果で、E4600,メモリ1Gx2,SATA 160G HDD x2で100%利用の場合144Wだそうです。なかなか便利。
2時間で作ってみた;)。
cronでまわすことを想定。監視だけならarpwatch使えば済む話ですが、ルータだけ監視できるとか、最後に書いたような通信遮断やパトランプをまわすとかの処理の追加も簡単にできるので、それなりに有用かなと。
#!/bin/sh
##### 設定用変数 #####
router_ip='192.158.0.254' # ルータのIPアドレス
expected_arp='01:23:45:67:89:ab' # ルータの本来のMACアドレス
alert_to='who@example.com' # 警告メールあて先
##### コマンドパス(FreeBSD用) #####
ARP_CMD='/usr/sbin/arp'
AWK_CMD='/usr/bin/awk'
MAIL_CMD='/usr/bin/mail'
SED_CMD='/usr/bin/sed'
# ARP Spoofing チェック
actual_arp=`$ARP_CMD $router_ip | $AWK_CMD '{print $4}'`
if [ "x$expected_arp" != "x$actual_arp" ]; then
# メール通知
echo "$actual_arp" | \
$MAIL_CMD -s "[Security Alert] ARP Spoofing detected." $alert_to
# 逆ARP Spoofing
$ARP_CMD -d $router_ip
$ARP_CMD -s $router_ip $expected_arp temp pub
# 攻撃ホストの通信遮断
ip_list=`$ARP_CMD -a | $AWK_CMD '{if ($4 == "'$actual_arp'") {print $2}}' | $SED_CMD 's/[()]//g'`
for spoofer_ip in $ip_list
do
echo "$ARP_CMD -d $spoofer_ip"
if [ "x$spoofer_ip" = "x$router_ip" ]; then
echo "$ARP_CMD -s $spoofer_ip $expected_arp temp pub"
else
echo "$ARP_CMD -s $spoofer_ip 00:00:00:00:00:00 temp pub"
fi
done
fi
対策の方は攻撃側のARPテーブルチェック・改ざんの頻度によってはあまり意味が無いです。
あと、FreeBSD以外のOSで使う場合はarpコマンドの出力とかを見て調整する必要があると思います。
Ruby会議に触発されて、書式拡張版 hikidoc.rbを公開してみます。ここで使っているhikidoc.rbも差し替えて、今日の日記からこの拡張版書式で書いています。
(元のテストをパスするという意味で)hikidoc-0.0.2との互換性を保ちつつ、以下のような機能を追加します。
例えばtDiaryの場合、
{{'<style type="text/css"><!--'}} {{'table.ct { background-color: #ff9; }'}} {{'td.cd1 { background-color: #fdd; }'}} {{'td.cd2 { background-color: #dfd; }'}} {{'td.cd3 { background-color: #ddf; }'}} {{'td.cd4 { background-color: #aaa; }'}} {{'-->'}} {{'</style>'}}
のようにスタイルを定義した上で、
.ct. .ctr1.||!.cl0.l0||!.cr1.r1||!.cr2.r2 .ctr2.||!.cl1.l1||.cd1.1||.cd2.2 .ctr3.||!.cl2.l2||.cd3.3||.cd4.4
といった記述をすれば、下のような結果が得られます。
.ct. .ctr1.||!.cl0.l0||!.cr1.r1||!.cr2.r2 .ctr2.||!.cl1.l1||.cd1.1||.cd2.2 .ctr3.||!.cl2.l2||.cd3.3||.cd4.4
さらに詳しい変換ルールについては、こちらのテスト をどうぞ。これが仕様です(^^;。
そもそもhikidoc.rbの書式拡張を始めたのは、webgenで使いたいと思ったのがきっかけでした。というわけで、その方法です。
webgenでhikidoc.rbを使うためにやることは簡単です。
以上の作業で"hikidoc"と"hikierb"の2つの書式が使えるようになります。両者の違いはhikidocエンジンで処理する前にerbで処理するかどうかという点のみです。hikidocはerb処理がない、またはwebgenのuseERBを使う場合、hikierbはerbの処理結果の出力部分にもhiki記法を使いたい場合、といった風に使い分けます。簡単な例を使って説明すると、hikierbでは、
<% 5.times do |i| -%> <%= "* #{i}" %> <% end -%>
が
* 0 * 1 * 2 * 3 * 4
のように展開されてからhikidoc.rbで処理されます。