<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>へびにっき &#187; mod_dosdetector</title>
	<atom:link href="http://wp.serpere.info/archives/tag/mod_dosdetector/feed" rel="self" type="application/rss+xml" />
	<link>http://wp.serpere.info</link>
	<description>樹上で暮らすヘビのように生きたい</description>
	<lastBuildDate>Thu, 09 Feb 2012 11:35:51 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>mod_dosdetector-forkをApache 2.0で動かす</title>
		<link>http://wp.serpere.info/archives/2419</link>
		<comments>http://wp.serpere.info/archives/2419#comments</comments>
		<pubDate>Sat, 12 Nov 2011 01:57:30 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_dosdetector]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=2419</guid>
		<description><![CDATA[今更ながら、mod_dosdetector-forkをApache 2.0で動かすための方法をまとめておく。少しだけソースコードを編集する必要がある。 必要なもの： mod_dosdetector-forkのapache-2.0ブランチ Apache 2.2 のソースコード Download &#8211; The Apache HTTP Server Project ソースコードを編集するためのエディタ（手動で編集する場合） Linux（他のUNIX系のOSでも動くかも） 一応、自動で編集するスクリプトも作ってみたが、先に手動で編集する場合の手順をざっと説明しておく。 手順1. mod_dosdetector.c をエディタで開き、/* code for apache 2.0 */ というコメントが書いてある部分に次の1行を書き加える。 #include &#34;apache20.h&#34; 手順2. Apache 2.2のソースを展開して srclib/apr/shmem/unix/shm.c をエディタで開き、関数apr_shm_removeの定義部分をコピーして、手順1で編集した部分の直後にペーストする。最終的にこんな感じになる。 /* code for apache 2.0 */ #include &#34;apache20.h&#34; APR_DECLARE&#40;apr_status_t&#41; apr_shm_remove&#40;const char *filename, apr_pool_t *pool&#41; &#123; //..略.. &#125; 以上で必要な編集作業は終わり。ここまでの手順を自動化するスクリプトがapache20.plという名前で入っているので、これを実行してもいい。 # 展開したApache 2.2のソースディレクトリを指定する perl [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F2419%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22mod_dosdetector-fork%E3%82%92Apache%202.0%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99%22%20%7D);"></div>
<p>
今更ながら、<a href="https://github.com/tkyk/mod_dosdetector-fork">mod_dosdetector-fork</a>をApache 2.0で動かすための方法をまとめておく。少しだけソースコードを編集する必要がある。
</p>
<p>
必要なもの：
</p>
<ul> 
<li>mod_dosdetector-forkの<a href="https://github.com/tkyk/mod_dosdetector-fork/tree/apache-2.0">apache-2.0ブランチ</a></li>
<li>Apache 2.2 のソースコード <a href="http://httpd.apache.org/download.cgi">Download &#8211; The Apache HTTP Server Project</a></li>
<li>ソースコードを編集するためのエディタ（手動で編集する場合）</li>
<li>Linux（他のUNIX系のOSでも動くかも）</li>
</ul>
<p>
一応、自動で編集するスクリプトも作ってみたが、先に手動で編集する場合の手順をざっと説明しておく。
</p>
<h3>手順1.</h3>
<p>
mod_dosdetector.c をエディタで開き、<code>/* code for apache 2.0 */</code> というコメントが書いてある部分に次の1行を書き加える。
</p>


<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;apache20.h&quot;</span></pre></div></div>



<h3>手順2.</h3>
<p>
Apache 2.2のソースを展開して srclib/apr/shmem/unix/shm.c をエディタで開き、関数apr_shm_removeの定義部分をコピーして、手順1で編集した部分の直後にペーストする。最終的にこんな感じになる。
</p>


<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/* code for apache 2.0 */</span>
<span style="color: #339933;">#include &quot;apache20.h&quot;</span>
APR_DECLARE<span style="color: #009900;">&#40;</span>apr_status_t<span style="color: #009900;">&#41;</span> apr_shm_remove<span style="color: #009900;">&#40;</span><span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>filename<span style="color: #339933;">,</span>
                                         apr_pool_t <span style="color: #339933;">*</span>pool<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #666666; font-style: italic;">//..略..</span>
<span style="color: #009900;">&#125;</span></pre></div></div>



<p>
以上で必要な編集作業は終わり。ここまでの手順を自動化するスクリプトがapache20.plという名前で入っているので、これを実行してもいい。
</p>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># 展開したApache 2.2のソースディレクトリを指定する</span>
<span style="color: #c20cb9; font-weight: bold;">perl</span> apache20.pl path<span style="color: #000000; font-weight: bold;">/</span>to<span style="color: #000000; font-weight: bold;">/</span>httpd-<span style="color: #000000;">2.2</span>.x</pre></div></div>



<p>
あとは通常通りのインストール手順でOK。
</p>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#apxsが/usr/sbinに入っている場合</span>
<span style="color: #666666; font-style: italic;">#コンパイル</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #007800;">PATH</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #007800;">$PATH</span>
&nbsp;
<span style="color: #666666; font-style: italic;">#インストール</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #007800;">PATH</span>=<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>sbin:<span style="color: #007800;">$PATH</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div>



<p>
動作確認は次の環境で行った。
</p>
<ul>
<li>ソースコードのコピー元: Apache 2.2.21</li>
<li>動作: Apache 2.0.64 on CentOS 5</li>
<li>動作: Apache 2.0.52 on CentOS 4</li>
</ul>
<p>
今後どの程度メンテナンスを行っていくかは不明なので、そこは予めご了承いただきたい。あと2.2側のコード変更によっては自動化スクリプトは動かなくなる可能性があるので、そのときは適宜手動で対応のこと。
</p>
]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/2419/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mod_dosdetector改造版バージョン1.0公開</title>
		<link>http://wp.serpere.info/archives/715</link>
		<comments>http://wp.serpere.info/archives/715#comments</comments>
		<pubDate>Tue, 18 Aug 2009 11:31:30 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[mod_dosdetector]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=715</guid>
		<description><![CDATA[mod_dosdetectorの改造版、mod_dosdetector-forkのバージョン1.0.0を公開します。 mod_dosdetector-fork-1.0.0.tar.gz （GitHubプロジェクトページ） プログラム本体は3ヶ月前とほぼ全く同じ状態ですが、より使いやすくするために以下のような追加・修正を行っています。 詳細な説明を含むREADMEを追加 サンプル設定ファイル（dosdetector-sample.conf）を追加 Makefileを修正（installターゲットでビルドオプションを指定できるようになった） READMEはとりあえず日本語で書いてみましたが、いずれ英訳するつもりです。またバージョンが1.0.0という切りの良い数字になっているのは、オリジナル（最新版0.2）との混乱を避けるためであって、特に深い意味はありません。 READMEにも含まれていますが、オリジナルと大きく違うのは以下の3点です。 DoSチェックの対象としないアクセスを環境変数で指定できる 不要なサブリクエストの生成処理を取り除くことでパフォーマンスが改善されている 共有メモリ処理が改善されている それぞれが技術的に何を意味するのかはこのブログのmod_dosdetectorタグを参照してください。 またせっかくなのでオリジナルの配布物に含まれていたspecファイルも全面的に修正しておきました。RPMパッケージを作るにはspecファイルとtarballを適切な場所に配置して rpmbuild -bb mod_dosdetector-fork.spec を実行してください。以下のファイルを含むRPMパッケージが出来上がります。 /etc/httpd/conf.d/dosdetector.conf /usr/lib/httpd/modules/mod_dosdetector.so CentOS 5上でしかテストしていませんが、Apache 2.2が入っているFedora等ならばうまくビルドできるのではないかと思います。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F715%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22mod_dosdetector%E6%94%B9%E9%80%A0%E7%89%88%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B31.0%E5%85%AC%E9%96%8B%22%20%7D);"></div>
<p>mod_dosdetectorの改造版、mod_dosdetector-forkのバージョン1.0.0を公開します。</p>
<p><a href="http://cloud.github.com/downloads/tkyk/mod_dosdetector-fork/mod_dosdetector-fork-1.0.0.tar.gz">mod_dosdetector-fork-1.0.0.tar.gz</a><br />
（<a href="http://github.com/tkyk/mod_dosdetector-fork/tree/master">GitHubプロジェクトページ</a>）</p>
<p>プログラム本体は3ヶ月前とほぼ全く同じ状態ですが、より使いやすくするために以下のような追加・修正を行っています。</p>
<ul>
<li>詳細な説明を含むREADMEを追加</li>
<li>サンプル設定ファイル（dosdetector-sample.conf）を追加</li>
<li>Makefileを修正（installターゲットでビルドオプションを指定できるようになった）</li>
</ul>
<p>READMEはとりあえず日本語で書いてみましたが、いずれ英訳するつもりです。またバージョンが1.0.0という切りの良い数字になっているのは、オリジナル（最新版0.2）との混乱を避けるためであって、特に深い意味はありません。</p>
<p>READMEにも含まれていますが、オリジナルと大きく違うのは以下の3点です。</p>
<ul>
<li>DoSチェックの対象としないアクセスを環境変数で指定できる</li>
<li>不要なサブリクエストの生成処理を取り除くことでパフォーマンスが改善されている</li>
<li>共有メモリ処理が改善されている</li>
</ul>
<p>それぞれが技術的に何を意味するのかはこのブログの<a href="http://wp.serpere.info/archives/tag/mod_dosdetector">mod_dosdetectorタグ</a>を参照してください。</p>
<p>またせっかくなのでオリジナルの配布物に含まれていたspecファイルも全面的に修正しておきました。RPMパッケージを作るには<a href="http://cloud.github.com/downloads/tkyk/mod_dosdetector-fork/mod_dosdetector-fork.spec">specファイル</a>と<a href="http://cloud.github.com/downloads/tkyk/mod_dosdetector-fork/mod_dosdetector-fork-1.0.0.tar.gz">tarball</a>を適切な場所に配置して</p>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rpmbuild <span style="color: #660033;">-bb</span> mod_dosdetector-fork.spec</pre></div></div>



<p>を実行してください。以下のファイルを含むRPMパッケージが出来上がります。</p>
<pre>
/etc/httpd/conf.d/dosdetector.conf
/usr/lib/httpd/modules/mod_dosdetector.so
</pre>
<p>CentOS 5上でしかテストしていませんが、Apache 2.2が入っているFedora等ならばうまくビルドできるのではないかと思います。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/715/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>mod_dosdetector 改造一段落</title>
		<link>http://wp.serpere.info/archives/499</link>
		<comments>http://wp.serpere.info/archives/499#comments</comments>
		<pubDate>Sun, 31 May 2009 04:36:33 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_dosdetector]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=499</guid>
		<description><![CDATA[mod_dosdetectorの改造は、先日の共有メモリ処理の改善をもって一段落。今後は実際に運用しながらバグを取りつつ、ドキュメントでも書きつつ、またオリジナルの mod_dosdetector に対するフィードバックも考えていこうと思う。 やり残したこと。 ディレクティブ有効範囲の矛盾の解消 mod_dosdetector はクライアント情報を管理するのに共有メモリを使用している。共有メモリ・セグメントはサーバ中に唯一つしか存在しないので、DoS判定の閾値や継続時間などの設定値も当然サーバ中で唯一になっているべきである。ところが実際には、ディレクティブはどこにでも（.htaccessにでも）何度でも書くことができる。 この矛盾した状況を解消するには、設定は全て httpd.conf のグローバルスコープにしか書けないように変更すれば良い。しかし「設定は一箇所にまとめておいてね！」という紳士規定によって得られる「どこにでも設定を書くことができる」というメリットを捨ててまで、そうする価値があるかと言われると…よく分からない。 Apache 2.0 対応 参考：mod_dosdetector を Apache 2.0 系で動かすパッチ こちらは技術的には特に難しくない。しかしきちんとした配布物としてまとめようとすると、途端に面倒くさくなる。というのも、2.0 に足りていない一部の機能を 2.2 のソースコードからバックポートしてくる必要があるために、ライセンス/ファイル構成/アーキテクチャ判定の面で一気に複雑になってしまうからだ。機能の本質とは関係のない部分で、そういった複雑さを持ち込むのは、やはり気が進まない。 （この点、mod_fcgid は Apache License に違反しているのではないだろうか…） これらやり残したことは、いつか良いアイデアが浮かんだら、取り組むつもり。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F499%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22mod_dosdetector%20%E6%94%B9%E9%80%A0%E4%B8%80%E6%AE%B5%E8%90%BD%22%20%7D);"></div>
<p><a href="http://github.com/tkyk/mod_dosdetector-fork/tree/master">mod_dosdetectorの改造</a>は、先日の共有メモリ処理の改善をもって一段落。今後は実際に運用しながらバグを取りつつ、ドキュメントでも書きつつ、またオリジナルの mod_dosdetector に対するフィードバックも考えていこうと思う。</p>
<p>やり残したこと。</p>
<h3>ディレクティブ有効範囲の矛盾の解消</h3>
<p>mod_dosdetector はクライアント情報を管理するのに共有メモリを使用している。共有メモリ・セグメントはサーバ中に唯一つしか存在しないので、DoS判定の閾値や継続時間などの設定値も当然サーバ中で唯一になっているべきである。ところが実際には、ディレクティブはどこにでも（.htaccessにでも）何度でも書くことができる。</p>
<p>この矛盾した状況を解消するには、設定は全て httpd.conf のグローバルスコープにしか書けないように変更すれば良い。しかし「設定は一箇所にまとめておいてね！」という紳士規定によって得られる「どこにでも設定を書くことができる」というメリットを捨ててまで、そうする価値があるかと言われると…よく分からない。</p>
<h3>Apache 2.0 対応</h3>
<p>参考：<a href="http://blog.mizzy.org/articles/2007/07/26/mod_dosdetector_for_apache_20">mod_dosdetector を Apache 2.0 系で動かすパッチ</a></p>
<p>こちらは技術的には特に難しくない。しかしきちんとした配布物としてまとめようとすると、途端に面倒くさくなる。というのも、2.0 に足りていない一部の機能を 2.2 のソースコードからバックポートしてくる必要があるために、ライセンス/ファイル構成/アーキテクチャ判定の面で一気に複雑になってしまうからだ。機能の本質とは関係のない部分で、そういった複雑さを持ち込むのは、やはり気が進まない。</p>
<p>（この点、<a href="http://sourceforge.net/projects/mod-fcgid">mod_fcgid</a> は Apache License に違反しているのではないだろうか…）</p>
<p>これらやり残したことは、いつか良いアイデアが浮かんだら、取り組むつもり。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/499/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>APR 共有メモリの初期化処理</title>
		<link>http://wp.serpere.info/archives/494</link>
		<comments>http://wp.serpere.info/archives/494#comments</comments>
		<pubDate>Thu, 28 May 2009 12:53:49 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_dosdetector]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=494</guid>
		<description><![CDATA[mod_dosdetector 改造版。共有メモリの初期化処理を改善した。かなり試行錯誤を繰り返すことになったが、自分なりに理解をした上で修正できたと思う。 共有メモリ機構においては、セグメントの「名前」が共有の鍵となる。名前の衝突にはくれぐれも注意しなければならない。 新たに共有メモリ・セグメントを作成する際、既にその名前が使用されていると、作成に失敗する 同じ名前を指定して attach すれば、どんなプロセスでも共有に参加できる。異なるソフトウェアに属する異なるプロセスが、異なる意図を持って同じメモリにアクセスすれば、メモリ内容は破壊されプロセスはクラッシュする 名前の衝突を防ぐための一つの工夫として、共有メモリ・セグメントの名前を”捨てて”しまう方法がある。名前を捨てることで、新たに別のプロセスが共有に参加することはできなくなる（既に共有に参加しているプロセスからは変わらずアクセスできる）。また名前を捨てた後なら、新たに同じ名前で共有メモリを作ることができるようになる。 APR では apr_shm_remove を使うことで名前を捨てることができる。上に挙げた2つの問題は、それぞれ次のようにして回避できる： apr_shm_create を実行する前に、その名前で apr_shm_remove を実行する 共有メモリの作成と初期化が終わった時点で apr_shm_remove を実行する （もちろん厳密に言えば remove と create の間で他のプロセスが create する可能性とか、remove を実行する前にプロセスがクラッシュする可能性とかも考えられるわけだが、大部分のトラブルは回避できるはずである）。 mod_dosdetector ではバージョン0.2からこれらの対策が施されたのだが、（多分古いコードの名残で？）remove/create を実行する前に、まず既存の共有メモリ・セグメントに attach を試みるコードが入っていた。これだと偶然に同じ名前のセグメントが存在した場合にクラッシュする危険性がある。 多分もともとは、Apache が不正終了するなどして共有メモリが破棄されなかった → 再起動の際の apr_shm_create が名前の衝突でコケる、という事態に備えてこのような手順を導入したのではないかと思う。しかし対策1と2によって名前衝突の危険性はほとんどなくなったはずなので、この処理はもう役目を終えたのではないか、と考える。 参考： 共有メモリをAPRで使用するには コンパクトに必要な情報がまとめられている apr_shm_attach() and APR_EEXIST apr_shm_remove が追加されるに至った議論]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F494%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22APR%20%E5%85%B1%E6%9C%89%E3%83%A1%E3%83%A2%E3%83%AA%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96%E5%87%A6%E7%90%86%22%20%7D);"></div>
<p><a href="http://github.com/tkyk/mod_dosdetector-fork/tree/master">mod_dosdetector 改造版</a>。共有メモリの初期化処理を改善した。かなり試行錯誤を繰り返すことになったが、自分なりに理解をした上で修正できたと思う。</p>
<p>共有メモリ機構においては、セグメントの「名前」が共有の鍵となる。名前の衝突にはくれぐれも注意しなければならない。</p>
<ol>
<li>新たに共有メモリ・セグメントを作成する際、既にその名前が使用されていると、作成に失敗する</li>
<li>同じ名前を指定して attach すれば、どんなプロセスでも共有に参加できる。異なるソフトウェアに属する異なるプロセスが、異なる意図を持って同じメモリにアクセスすれば、メモリ内容は破壊されプロセスはクラッシュする</li>
</ol>
<p>名前の衝突を防ぐための一つの工夫として、共有メモリ・セグメントの名前を”捨てて”しまう方法がある。名前を捨てることで、新たに別のプロセスが共有に参加することはできなくなる（既に共有に参加しているプロセスからは変わらずアクセスできる）。また名前を捨てた後なら、新たに同じ名前で共有メモリを作ることができるようになる。</p>
<p>APR では <a href="http://apr.apache.org/docs/apr/1.3/group__apr__shm.html#gee8b7d9b952ff6157ddbb00fabb477e0">apr_shm_remove</a> を使うことで名前を捨てることができる。上に挙げた2つの問題は、それぞれ次のようにして回避できる：</p>
<ol>
<li>apr_shm_create を実行する前に、その名前で apr_shm_remove を実行する</li>
<li>共有メモリの作成と初期化が終わった時点で apr_shm_remove を実行する</li>
</ol>
<p>（もちろん厳密に言えば remove と create の間で他のプロセスが create する可能性とか、remove を実行する前にプロセスがクラッシュする可能性とかも考えられるわけだが、大部分のトラブルは回避できるはずである）。</p>
<p>mod_dosdetector ではバージョン0.2からこれらの対策が施されたのだが、（多分古いコードの名残で？）remove/create を実行する前に、まず既存の共有メモリ・セグメントに attach を試みるコードが入っていた。これだと偶然に同じ名前のセグメントが存在した場合にクラッシュする危険性がある。</p>
<p>多分もともとは、Apache が不正終了するなどして共有メモリが破棄されなかった → 再起動の際の apr_shm_create が名前の衝突でコケる、という事態に備えてこのような手順を導入したのではないかと思う。しかし対策1と2によって名前衝突の危険性はほとんどなくなったはずなので、この処理はもう役目を終えたのではないか、と考える。</p>
<p>参考：</p>
<dl>
<dt><a href="http://nap-web.eng.kagawa-u.ac.jp/index.php?%B6%A6%CD%AD%A5%E1%A5%E2%A5%EA%A4%F2APR%A4%C7%BB%C8%CD%D1%A4%B9%A4%EB%A4%CB%A4%CF">共有メモリをAPRで使用するには</a></dt>
<dd>コンパクトに必要な情報がまとめられている</dd>
<dt><a href="http://qaix.com/apache-http-server/191-538-apr-shm-attach-and-apr-eexist-read.shtml">apr_shm_attach() and APR_EEXIST</a></dt>
<dd>apr_shm_remove が追加されるに至った議論</dd>
</dl>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/494/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mod_dosdetector 改造継続中</title>
		<link>http://wp.serpere.info/archives/487</link>
		<comments>http://wp.serpere.info/archives/487#comments</comments>
		<pubDate>Fri, 22 May 2009 14:43:51 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_dosdetector]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=487</guid>
		<description><![CDATA[tkyk&#8217;s mod_dosdetector-fork at master &#8211; GitHub オリジナルに対して最小限の変更のみ加えたバージョンはcompat-2タグ まずバグ修正。前回エントリ時点でのmasterブランチおよびcompat-1タグには実にしょぼいバグがあった。「フラグの逆転」という初歩的なミスによって、DoSIgnoreContentType　の効果が逆転する状態になっていた……。C言語に不慣れなのがこういう形で露呈するとは。どうやら脳内で ! 演算子を論理 false のチェックだと見なしてしまうらしい。C言語の場合、! はあくまでも「ゼロかどうかを調べる」演算子だと肝に銘じておこう。 その後masterブランチでは、クライアントの管理処理を全部クリティカルセクションに押し込む、という修正を行った。それなりに大きな規模の修正になった。これで共有メモリに対する更新処理は全てロックの中に収まったはず。動作は全く変わっていないはず。「DoS攻撃の検出」と「検出結果に応じた処理」が綺麗に分離されて、コードの見通しはよくなったはず、である。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F487%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22mod_dosdetector%20%E6%94%B9%E9%80%A0%E7%B6%99%E7%B6%9A%E4%B8%AD%22%20%7D);"></div>
<p><a href="http://github.com/tkyk/mod_dosdetector-fork/tree/master">tkyk&#8217;s mod_dosdetector-fork at master &#8211; GitHub</a><br />
オリジナルに対して最小限の変更のみ加えたバージョンは<a href="http://github.com/tkyk/mod_dosdetector-fork/tree/compat-2">compat-2</a>タグ</p>
<p>まずバグ修正。前回エントリ時点でのmasterブランチおよびcompat-1タグには実にしょぼいバグがあった。「フラグの逆転」という初歩的なミスによって、DoSIgnoreContentType　の効果が逆転する状態になっていた……。C言語に不慣れなのがこういう形で露呈するとは。どうやら脳内で ! 演算子を論理 false のチェックだと見なしてしまうらしい。C言語の場合、! はあくまでも「ゼロかどうかを調べる」演算子だと肝に銘じておこう。</p>
<p>その後masterブランチでは、クライアントの管理処理を全部クリティカルセクションに押し込む、という修正を行った。<a href="http://github.com/tkyk/mod_dosdetector-fork/commit/e3456ca1d3a9273caf6f47b7b5a523b9791d3bc0">それなりに大きな規模の修正</a>になった。これで共有メモリに対する更新処理は全てロックの中に収まったはず。動作は全く変わっていないはず。「DoS攻撃の検出」と「検出結果に応じた処理」が綺麗に分離されて、コードの見通しはよくなったはず、である。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/487/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>改造版 mod_dosdetector</title>
		<link>http://wp.serpere.info/archives/483</link>
		<comments>http://wp.serpere.info/archives/483#comments</comments>
		<pubDate>Sun, 17 May 2009 12:58:04 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_dosdetector]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=483</guid>
		<description><![CDATA[mod_dosdetector の改造版をgithubで公開した。元のライセンスに従ってMITライセンスとなっている。 今のところ、最大の違いは次の2点である： 無視するアクセスを環境変数「NoCheckDoS」で指定できるようになった DoSIgnoreContentTypeが指定されていない場合、サブリクエストの生成を行わないようにした 例えば画像/js/cssファイルに対するアクセスを無視するには、次のように SetEnvIf で指定する。DoSIgnoreContentType は指定しなくて良い。 SetEnvIf Request_URI &#34;\.(gif&#124;jpe?g&#124;ico&#124;js&#124;css&#124;png)$&#34; NoCheckDoS これで各アクセスごとのサブリクエストが行われなくなるので、パフォーマンスも改善されるはず。abを使った単純なテストでは、20%程度は効果があるようだ（並列20、合計10000アクセスで実験）。 Requests per second: 1638.03 [#/sec] (mean) Time per request: 12.210 [ms] (mean) Time per request: 0.610 [ms] (mean, across all concurrent requests) Requests per second: 2058.26 [#/sec] (mean) Time per request: 9.717 [ms] (mean) Time per request: 0.486 [ms] (mean, across [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F483%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E6%94%B9%E9%80%A0%E7%89%88%20mod_dosdetector%22%20%7D);"></div>
<p><a href="http://sourceforge.net/projects/moddosdetector/">mod_dosdetector</a> の改造版を<a href="http://github.com/tkyk/mod_dosdetector-fork/tree/master">githubで公開</a>した。元のライセンスに従ってMITライセンスとなっている。</p>
<p>今のところ、最大の違いは次の2点である：</p>
<ul>
<li>無視するアクセスを環境変数「NoCheckDoS」で指定できるようになった</li>
<li>DoSIgnoreContentTypeが指定されていない場合、サブリクエストの生成を行わないようにした</li>
</ul>
<p>例えば画像/js/cssファイルに対するアクセスを無視するには、次のように SetEnvIf で指定する。DoSIgnoreContentType は指定しなくて良い。</p>


<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">SetEnvIf</span> Request_URI <span style="color: #7f007f;">&quot;<span style="color: #000099; font-weight: bold;">\.</span>(gif|jpe?g|ico|js|css|png)$&quot;</span> NoCheckDoS</pre></div></div>



<p>これで各アクセスごとのサブリクエストが行われなくなるので、パフォーマンスも改善されるはず。abを使った単純なテストでは、20%程度は効果があるようだ（並列20、合計10000アクセスで実験）。</p>
<pre>
Requests per second:    1638.03 [#/sec] (mean)
Time per request:       12.210 [ms] (mean)
Time per request:       0.610 [ms] (mean, across all concurrent requests)
</pre>
<pre>
Requests per second:    2058.26 [#/sec] (mean)
Time per request:       9.717 [ms] (mean)
Time per request:       0.486 [ms] (mean, across all concurrent requests)
</pre>
<p>もし上記の変更点「だけ」が欲しいという方は、<del datetime="2009-06-07T13:22:59+00:00">compat-1タグ</del> <a href="http://github.com/tkyk/mod_dosdetector-fork/tree/compat-2">compat-2 タグ</a>をチェックアウトしてほしい。今後masterブランチでは（既に取り掛かっているものも含め）</p>
<ul>
<li>共有メモリ処理と排他処理の整理</li>
<li>設定ディレクティブまわりの整理</li>
<li>Apache 2.0系への対応</li>
<li>諸々のコードのクリーンアップ</li>
</ul>
<p>といった課題にチャレンジしていくつもりである。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/483/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mod_dosdetector 継続調査</title>
		<link>http://wp.serpere.info/archives/473</link>
		<comments>http://wp.serpere.info/archives/473#comments</comments>
		<pubDate>Thu, 14 May 2009 14:39:08 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_dosdetector]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=473</guid>
		<description><![CDATA[先日 mod_dosdetector について調べて以来、Apache モジュールについて俄然興味が湧いてきた。もともとは mod_dosdetector の正確な動作を確かめたかっただけなのだが、処理の流れを追うために Apache のソースコードにまで手を出して読みふけっているうちに、夢中になってしまった。普段から馴染み深いソフトウェアだけに、動作の裏側が分かってくるとすごく面白い。勢い、この分野で定本と言われる『The Apache Modules Book』も買ってしまった。 とりあえず mod_dosdetector で気になっているのは 無視するアクセスを Content-Type で指定するのは適当か？Content-Type を取得するにはサブリクエストの生成を行う必要があるので、オーバーヘッドが大きい。URLを対象にした方が良いのではないか？ あるいは、無視するアクセスの選別自体は mod_setenvif などに任せて、mod_dosdetecotr 側では環境変数をチェックすれば済むのではないか？ 共有メモリに対してロックの外で更新操作を行っている箇所があるが、問題は無いのか？ C言語の勉強を兼ねてこれらの改造にチャレンジしてみよう。]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F473%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22mod_dosdetector%20%E7%B6%99%E7%B6%9A%E8%AA%BF%E6%9F%BB%22%20%7D);"></div>
<p><a href="http://www.amazon.co.jp/Apache-Modules-Book-Application-Development/dp/0132409674%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0132409674"><img class="alignleft" src="http://ecx.images-amazon.com/images/I/51sQph2MYyL._SL160_.jpg" alt="" width="121" height="160" /></a>先日 mod_dosdetector について調べて以来、Apache モジュールについて俄然興味が湧いてきた。もともとは mod_dosdetector の正確な動作を確かめたかっただけなのだが、処理の流れを追うために Apache のソースコードにまで手を出して読みふけっているうちに、夢中になってしまった。普段から馴染み深いソフトウェアだけに、動作の裏側が分かってくるとすごく面白い。勢い、この分野で定本と言われる『<a name="evtst|a|0132409674" href="http://www.amazon.co.jp/Apache-Modules-Book-Application-Development/dp/0132409674%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0132409674">The Apache Modules Book</a>』も買ってしまった。</p>
<p>とりあえず mod_dosdetector で気になっているのは</p>
<ul>
<li>無視するアクセスを Content-Type で指定するのは適当か？Content-Type を取得するにはサブリクエストの生成を行う必要があるので、オーバーヘッドが大きい。URLを対象にした方が良いのではないか？</li>
<li>あるいは、無視するアクセスの選別自体は mod_setenvif などに任せて、mod_dosdetecotr 側では環境変数をチェックすれば済むのではないか？</li>
<li>共有メモリに対してロックの外で更新操作を行っている箇所があるが、問題は無いのか？</li>
</ul>
<p>C言語の勉強を兼ねてこれらの改造にチャレンジしてみよう。</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/473/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mod_dosdetector の使い方</title>
		<link>http://wp.serpere.info/archives/465</link>
		<comments>http://wp.serpere.info/archives/465#comments</comments>
		<pubDate>Thu, 07 May 2009 12:12:38 +0000</pubDate>
		<dc:creator>tkykmw</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_dosdetector]]></category>
		<category><![CDATA[サーバ管理]]></category>

		<guid isPermaLink="false">http://wp.serpere.info/?p=465</guid>
		<description><![CDATA[『サーバ/インフラを支える技術』で知ったDoS攻撃判定モジュール mod_dosdetector の使い方。mod_dosdetecotr のバージョンは 0.2、環境は Apache 2.2.3 @ CentOS 5。 ※改造版も公開しています。 インストール wget http://ncu.dl.sourceforge.net/sourceforge/moddosdetector/mod_dosdetector-0.2.tar.gz tar xvzf mod_dosdetector-0.2.tar.gz cd mod_dosdetector-0.2 make sudo make install httpd.conf 設定例 # 実際にはこの一行は make install で追加される LoadModule dosdetector_module modules/mod_dosdetector.so &#160; DoSDetection on DoSPeriod 5 DoSThreshold 10 DoSHardThreshold 25 DoSBanPeriod 30 DoSTableSize 100 DoSIgnoreContentType image&#124;javascript&#124;css DoS判定の肝となる数値は DoSPeriod, DoSThreshold, DoSHardThreshold, DoSBanPeriod の4つで、上の例ではだいたい次のような意味になる： 同一IPアドレスから5秒間に10回以上のアクセスがあった場合「DoS攻撃の疑いあり」と見なし、その後30秒間のアクセスに対しては環境変数 [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_jade" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwp.serpere.info%252Farchives%252F465%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22mod_dosdetector%20%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%22%20%7D);"></div>
<p>『<a name="evtst|a|4774135666" href="http://www.amazon.co.jp/24%E6%99%82%E9%96%93365%E6%97%A5-%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%82%92%E6%94%AF%E3%81%88%E3%82%8B%E6%8A%80%E8%A1%93-%E2%80%BE%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%A9%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E3%80%81%E3%83%8F%E3%82%A4%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%80%81%E7%9C%81%E5%8A%9B%E9%81%8B%E7%94%A8-PRESS-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774135666%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dhebinikki09-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4774135666">サーバ/インフラを支える技術</a>』で知ったDoS攻撃判定モジュール <a href="http://sourceforge.net/projects/moddosdetector">mod_dosdetector</a> の使い方。mod_dosdetecotr のバージョンは <a href="http://d.hatena.ne.jp/stanaka/20070801/1185921764">0.2</a>、環境は Apache 2.2.3 @ CentOS 5。</p>
<p><strong>※<a href="http://wp.serpere.info/archives/715">改造版</a>も公開しています。</strong></p>
<h3>インストール</h3>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>ncu.dl.sourceforge.net<span style="color: #000000; font-weight: bold;">/</span>sourceforge<span style="color: #000000; font-weight: bold;">/</span>moddosdetector<span style="color: #000000; font-weight: bold;">/</span>mod_dosdetector-<span style="color: #000000;">0.2</span>.tar.gz
<span style="color: #c20cb9; font-weight: bold;">tar</span> xvzf mod_dosdetector-<span style="color: #000000;">0.2</span>.tar.gz
<span style="color: #7a0874; font-weight: bold;">cd</span> mod_dosdetector-<span style="color: #000000;">0.2</span>
<span style="color: #c20cb9; font-weight: bold;">make</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div>



<h3>httpd.conf 設定例</h3>


<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #adadad; font-style: italic;"># 実際にはこの一行は make install で追加される</span>
<span style="color: #00007f;">LoadModule</span> dosdetector_module modules/mod_dosdetector.so
&nbsp;
DoSDetection     <span style="color: #0000ff;">on</span>
DoSPeriod        <span style="color: #ff0000;">5</span>
DoSThreshold     <span style="color: #ff0000;">10</span>
DoSHardThreshold <span style="color: #ff0000;">25</span>
DoSBanPeriod     <span style="color: #ff0000;">30</span>
DoSTableSize     <span style="color: #ff0000;">100</span>
DoSIgnoreContentType  image|javascript|css</pre></div></div>



<p>DoS判定の肝となる数値は DoSPeriod, DoSThreshold, DoSHardThreshold, DoSBanPeriod の4つで、上の例ではだいたい次のような意味になる：</p>
<ol>
<li>同一IPアドレスから5秒間に10回以上のアクセスがあった場合「DoS攻撃の疑いあり」と見なし、その後30秒間のアクセスに対しては環境変数 SuspectDoS をセットする（値は&#8221;1&#8243;）</li>
<li>さらに5秒間のアクセス回数が25回に達した場合、「激しいDoS攻撃の疑い」と見なし、環境変数 SuspectHardDoS もセットする（値は&#8221;1&#8243;）</li>
<li>初めに「DoS攻撃の疑いあり」と判定してから30秒が経過したら、次のアクセスでもう一度判定をやり直す。直近5秒のアクセスが10回を下回っていれば、疑いは晴れる</li>
</ol>
<p>アクセス数の計測はファイルの種類・有無を問わずに行われるため、デフォルトではページ内の画像やCSSなども計測対象となってしまう。それらを除外したい場合は、DoSIgnoreContentType ディレクティブで除外したいファイルの MIME type を正規表現で指定しておく（ファイル名（URL）ではないので注意）。各種画像ファイル・JavaScript・CSSファイルを除外したい場合は上例のように設定しておけば良い。</p>
<p>ただし多くの環境では拡張子 ico に対する MIME type の指定は行われていないはずなので、そのままだと favicon.ico が text/plain 等と見なされて除外されない（.ico に限らず、未設定の場合は httpd.conf の DefaultType になる）。次のように AddType を追加しておけば image と判定される。</p>


<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">AddType</span>  image/vnd.microsoft.icon  .ico</pre></div></div>



<p>ちなみにこれがアイコンファイルの<a href="http://www.iana.org/assignments/media-types/image/vnd.microsoft.icon">正式な MIME type</a> である。</p>
<h3>DoS攻撃に対する防御設定</h3>
<p>mod_dosdetector が行うのはあくまでも攻撃の”検出”だけなので、防御する方法はまた別に設定する必要がある。多くの場合は mod_rewrite と併用することになるだろう。例えば「激しいDoS攻撃の疑い」なアクセスに対してステータスコード503 + 静的なHTMLを返す場合は次のように設定する（Apache 2.2 only）。</p>


<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span>
<span style="color: #00007f;">RewriteCond</span> %{ENV:SuspectHardDoS} =<span style="color: #ff0000;">1</span>
<span style="color: #00007f;">RewriteRule</span> .*  - [R=<span style="color: #ff0000;">503</span>,L]
&nbsp;
<span style="color: #00007f;">ErrorDocument</span> <span style="color: #ff0000;">503</span> /server_is_busy.html</pre></div></div>



<p>しかし現実には、攻撃の判定とその後の防御は、匙加減が難しい。どの程度のアクセスを攻撃と見なすかはサイトによって千差万別だろうし、あまりに頻繁・過剰な反応をしてしまうとユーザが離れてしまう。</p>
<p>そこで個人的には、まず厳し目の設定を行って、ログを取ってみることをおすすめする。「DoS攻撃の疑いあり」なアクセスを普通のログと分けて記録するには次のように設定する。</p>


<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">LogFormat</span> <span style="color: #7f007f;">&quot;%{SuspectHardDoS}e %h %l %u %t <span style="color: #000099; font-weight: bold;">\&quot;</span>%r<span style="color: #000099; font-weight: bold;">\&quot;</span> %&gt;s %b <span style="color: #000099; font-weight: bold;">\&quot;</span>%{Referer}i<span style="color: #000099; font-weight: bold;">\&quot;</span> <span style="color: #000099; font-weight: bold;">\&quot;</span>%{User-Agent}i<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span> dos_suspect
<span style="color: #00007f;">CustomLog</span> logs/dos_suspect_log dos_suspect env=SuspectDoS</pre></div></div>



<p>ログの行頭に環境変数 SuspectHardDoS が記録されるため、どのような経過をたどって「疑いあり」から「激しい攻撃の疑い」へと移行したかも分かる。</p>
<p>後はこの記録を見つつ、通常のアクセスが引っかからないような適当な設定を探ることになる。もしサーバリソースの都合上、どうしても通常のアクセスが引っかてしまう可能性があるのなら、その時は防御方法をより穏当なものに設定することもできる（このあたりの柔軟性は mod_dosdetector の設計の妙だと思う）。</p>
<h3>その他</h3>
<p>上で触れなかったディレクティブについて少々：</p>
<dl>
<dt>DoSDetection</dt>
<dd>DoS判定機能の有効・無効を設定。on で有効</dd>
<dt>DoSTableSize</dt>
<dd>クライアントの追跡記録の最大保存数。この数値を大きくすればより多くのクライアントを同時に追跡できるが、メモリ使用量と負荷が上昇する</dd>
<dt>DoSShmemName</dt>
<dd>クライアントの追跡記録を保存しておくための共有メモリの名前。普通は設定する必要は無いはず</dd>
</dl>
<h3>最後に</h3>
<p>素晴らしいソフトウェアをオープンソースとして公開してくださった田中慎司さん（そして株式会社はてな）に感謝！</p>

]]></content:encoded>
			<wfw:commentRss>http://wp.serpere.info/archives/465/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

