人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Windows64ビット版Apache2.2で質問です、mod_evasiveの導入方法について教えて下さい。

私の環境ではApacheが重くなるタイミングで/server-statusを調べると、前は一部のPHPコードへのアクセスが多いのでKeep-Aliveを打ち消す施策を色々試していました(参考: http://q.hatena.ne.jp/1352183832 )。
しかし、今ではReading Requestが大量にプロセスを占めて重くなっていることに気が付きました。

mod_evasiveが有効なケースもあるということで、 http://bitly.com/aqUYGW よりソースコードを入手し、 http://bitly.com/PYTO9S より apxs_win32.zip をダウンロードしてビルド環境を用意しました。
しかし大量のエラーが出てコンパイルすることができません。
Perlは、v5.10.1を導入済みです。

よろしくお願いいたします。

●質問者: くじぇ
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● oil999
●350ポイント ベストアンサー

下記からダウンロードできるmod_dosevasive22.dllを利用してみて下さい。
http://www.apachelounge.com/viewtopic.php?t=917&start=23

ただ、Reading Requestの原因がDoS攻撃であるなら、他の対策を取った方がよいと思います。


くじぇさんのコメント
oil999 さんありがとうございます。 ところで「下記」とはどこですか? > Reading Requestの原因がDoS攻撃であるなら、他の対策を取った方がよいと思います。 Reading Requestは、Readingしか出てこないので、DoS攻撃かどうかも見分けられていない状態です。 どうやって見分けたら良いのでしょうか? また他のWindows版Apacheに対応するDoS対策についてご存知でしたらよろしくお願いします。

oil999さんのコメント
DoS攻撃かどうかを見分ける方法はないのですが、個人サイトにもかかわらずReading Requestでプロセスが重くなるようなら、Slow Read DoS攻撃を疑う必要があるでしょう。 Apacheのmod_security2で対策を講じることができます。 コンパイルにはVC++が必要です。 https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#wiki-Installation_for_Apache

くじぇさんのコメント
oil999さんありがとうございます。 mod_dosevasive22.dllのダウンロード先がわからないので、もう一度教えてもらえませんか? なおmod_security2は、他のアタックも防いでくれて大変高機能なのは魅力に感じました。 ただ、高機能すぎて搭載がかなり手間そうで、稼働中のサービスが止まったらどうしようという恐怖から、とりあえず現状はもう少しシンプルなものはないかと考えています。 って逃げですかね。

oil999さんのコメント
回答にURLを追記しました。 もしDoS攻撃を受けているとしたら、mod_dosevasiveだけでは不十分です。

くじぇさんのコメント
mod_dosevasiveへのリンク、私からも見ることが出来ました、ありがとうございます。 早速詳細を調べてみます。

くじぇさんのコメント
oil999 さんありがとうございます。 1.先のページからmod_dosevasive22.zipをダウンロード 2.mod_dosevasive22.soを Apache2.2\modules へコピー 3.httpd.conf に追記 4.Apache再起動 で、導入できたようです。 引き続きmod_security2をローカル環境で実装に挑戦してみます!

くじぇさんのコメント
うーん、元の質問から外れますがmod_security2についてうまく行きません。 README_WINDOWS.TXTのBUILD CURLまではできたんですが BUILD MOD_SECURITY-2.6にて、CMAKEコマンドを使おうとすると C:\作業フォルダ\libxml2-2.7.8.win32\include\libxml/encoding.h( 28) : fatal error C1083: include ファイルを開けません。'iconv.h': No such file o r directory とでて、失敗します。 手を抜いて、 http://www.apachelounge.com/download/ からダウンロードした mod_security-2.7.0-win32.zip を入れてみましたが、やっぱりApache2.2では動かないようですしorz

oil999さんのコメント
libiconv-を用意してみてください。 http://ftp.gnu.org/gnu/libiconv/

くじぇさんのコメント
ありがとうございます。 http://ftp.gnu.org/gnu/libiconv/より libiconv-1.14.tar.gz をダウンロードしてみたところ iconv.cは存在するのですが、iconv.hは存在していませんでした。

くじぇさんのコメント
oil999さんに頼り切りでも悪いので、別質問として仕切りなおすことにしました。 http://q.hatena.ne.jp/1352727678 Windows64ビット版Apache2.2で質問です、mod_security2の導入方法について教えて下さい。 またご関心がございましたら、今後ともよろしくお願いいたします。

2 ● pigmon88
●0ポイント

どういうエラーですか?それを書かないと。


くじぇさんのコメント
pigmon88さん、興味を持っていただいてありがとうございます。 質問文には500文字数制限があるので、コメントに記載しています。 よろしければよろしくお願い致します。

3 ● a-kuma3
●150ポイント

apxs.bat で、VC 用のコンパイルオプションを使おうとしてるみたいですね。
同じようなはまり方をしている人が、ここに。
http://d.hatena.ne.jp/hhelibex/20110310/1299766831

(apxsは何をしてくれるかっていうと、pl覗けば分かるけど、コンパイラとリンカのオプションを設定して一度に実行してくれる。makeみたいなもん。デフォでclとlink使うようになってるから、bcc使いな人は手動でやった方が早そう)

http://blog.goo.ne.jp/yulali/e/ac2377eaac7d7049fb00bd55653c08e2

Configure.pl で、うまくやってくれそうな感じですけどね。
でも、先のはてなダイアリーでは、Configure.pl もやってるみたいだし...
とりあえず、「地力でコンパイルする」で終わってるので、もうちょっと検索。


こちらは、apxs のサンプルをコンパイルしている手順を書いているところです。
http://yyamazakiya.blogspot.jp/2011_07_01_archive.html
Apache の方に、インクルードパスとライブラリパスを通しておけば良い、という感じです。

gcc -mwindows -I C:\ApacheSoftware\Apache2.2\include -L C:\ApacheSoftware\Apache2.2\lib -c mod_hoge.c
...
続いて、.soファイルをつくります。以下のようなgccを実行してください。
gcc -mwindows -I C:\ApacheSoftware\Apache2.2\include -L C:\ApacheSoftware\Apache2.2\lib -shared -o mod_hoge.so mod_hoge.o -llibhttpd

http://yyamazakiya.blogspot.jp/2011_07_01_archive.html

-mwindows が付いてるってことは、cygwin の gcc ですかね。
MinGW なら -mwindows を外す感じになるでしょう。

ヘッダファイルが2つ(ap_config_auto.hとap_config_layout.h)ありませんと出ています。
そんなファイル確かにないし、、、

http://yyamazakiya.blogspot.jp/2011_07_01_archive.html

これは、Configure.pl をやってないから、という気がします。


んで、mod_evasive のソースをちょろっと見てみたんですが、syslog を使ってるので、Windows 環境でコンパイルが通らない気がします。
それに、メールでの通知に /bin/mail とか書いてあるので、コンパイルが通っても動かないような...
あ、/bin/mail は EmailNotify を使わなきゃ、良いだけの話か。
とりあえず、syslog を使わないようにすれば、コンパイル&リンクはできそうな感じ。
例えば、

/*
#include <syslog.h>
 */
...
#define LOG( A, ... ) 



想像で書いているところが多いのですが、参考になれば、と。


くじぇさんのコメント
a-kuma3 さんありがとうございます。 VisualC++はGUIから触ったことあるが、gccやっていない私は初めて聞く用語ばっかりです。 が、なんとか理解できないか調べてみます。

a-kuma3さんのコメント
ごちゃごちゃ書きすぎました (^^ゞ gcc が使えるコマンドプロンプトでの操作です。 Apache がインストールされてるところが c:\apache2.2 だとします。 C:\Apache2.2\include には、httpd.h や http_core.h が存在してるはず。 mod_evasive20.c があるディレクトリに行きます。 >> gcc -I <span style="color:red;">C:\Apache2.2\</span>include -c mod_evasive20.c << で、うまくすると、mod_evasive20.o ができる。 syslog.h が無い、とか怒られそうな気もします。 回答に書いた、LOG マクロの中身を空っぽにするようにして、syslog.h へのインクルードを消します。 これで、コンパイルが通るはず。 もし、mod_evasive20.o ができたとしたら、 >> gcc -shared -L <span style="color:red;">C:\Apache2.2\</span>lib -o mod_evasive.so mod_evasive20.o -lhttpd << で、mod_evasive.so が出来上がるんじゃないか、と。

くじぇさんのコメント
a-kuma3さんありがとうございます。 導入方法が分かれば、他のApacheモジュール導入にも役立ちそうなので、参考にさせて頂きます!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ