雑記

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|
2007|01|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|09|11|
2009|02|03|05|06|07|08|10|11|12|
2010|01|03|04|05|06|07|08|09|10|
2011|05|06|09|10|
2012|03|07|09|12|
2013|01|02|04|05|07|08|10|11|
2014|04|05|08|10|12|
2015|01|05|
2016|09|
2024|06|
2025|01|

2008-06-01 [長年日記]

Hikiで言及のないTrackbackを拒否する

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を受け付ける条件をより緩和できます。

しばらくこれで様子見。


2008-06-11 [長年日記]

HP ProLiantサーバ オンラインPower Calculator

HP社のProLiantシリーズの消費電力シミュレータなんてものがあるんですね。CPUやメモリ/HDDの容量を設定し、システムの利用率をスライドさせると、それぞれの状況での実際の消費電力を表示してくれます。

画像はDL320G5pの結果で、E4600,メモリ1Gx2,SATA 160G HDD x2で100%利用の場合144Wだそうです。なかなか便利。DL320G5pシミュレーション


2008-06-13 [長年日記]

ARP Spoofing監視(とちょっとだけ対策)

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コマンドの出力とかを見て調整する必要があると思います。


2008-06-29 [長年日記]

[Ruby] <%=ul_display 0, 'hikidoc.rb 書式拡張' %>

Ruby会議に触発されて、書式拡張版 hikidoc.rbを公開してみます。ここで使っているhikidoc.rbも差し替えて、今日の日記からこの拡張版書式で書いています。

(元のテストをパスするという意味で)hikidoc-0.0.2との互換性を保ちつつ、以下のような機能を追加します。

画像リンク
"[[" で始まるリンク書式のタイトルに画像ファイルを指定した場合に、<a href="URL"><img src="FILE"></a>のようなHTMLを生成する
^Jで<br>
リスト要素の途中などに強制改行を入れたいときに、(こんな感じで)^J^Jを入れると改行できる
無変換タグの指定
特定のタグを変換しない。webgenのuseERBオプションのために残してある。
スタイルシート用のclass,id属性の指定
".cls#id."という書式を使うと各要素のclass,id属性が指定可能になる。^J例:.cls#id.foo => <p class="cls" id="id">foo</p>^Jリストやテーブルでは、各要素ごとにclass,idを指定可能です。
"====" でも<hr>
webgenとの'----'の解釈の衝突を回避します

表を使ったclass属性の指定サンプル

例えば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

さらに詳しい変換ルールについては、こちらのテスト をどうぞ。これが仕様です(^^;。

[Ruby] webgenで(拡張)hikidoc書式を使う

そもそもhikidoc.rbの書式拡張を始めたのは、webgenで使いたいと思ったのがきっかけでした。というわけで、その方法です。

webgenでhikidoc.rbを使うためにやることは簡単です。

  1. gem等でwebgenとhikidocをインストールします。
  2. content-converterの定義ファイル をwebgenのcontentconvertersディレクトリ(/usr/local/lib/ruby/gems/1.8/gems/webgen-0.4.7/lib/webgen/plugins/contentconverters/など)にhiki.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で処理されます。