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を導入済みです。

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/11/09 17:45:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:oil999 No.1

回答回数1728ベストアンサー獲得回数320

ポイント350pt

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

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

他8件のコメントを見る
id:halohalolin

ありがとうございます。

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

2012/11/12 13:47:45
id:halohalolin

oil999さんに頼り切りでも悪いので、別質問として仕切りなおすことにしました。

http://q.hatena.ne.jp/1352727678
Windows64ビット版Apache2.2で質問です、mod_security2の導入方法について教えて下さい。

またご関心がございましたら、今後ともよろしくお願いいたします。

2012/11/12 22:43:15

その他の回答2件)

id:oil999 No.1

回答回数1728ベストアンサー獲得回数320ここでベストアンサー

ポイント350pt

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

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

他8件のコメントを見る
id:halohalolin

ありがとうございます。

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

2012/11/12 13:47:45
id:halohalolin

oil999さんに頼り切りでも悪いので、別質問として仕切りなおすことにしました。

http://q.hatena.ne.jp/1352727678
Windows64ビット版Apache2.2で質問です、mod_security2の導入方法について教えて下さい。

またご関心がございましたら、今後ともよろしくお願いいたします。

2012/11/12 22:43:15
id:pigmon88 No.2

回答回数501ベストアンサー獲得回数25

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

id:halohalolin

pigmon88さん、興味を持っていただいてありがとうございます。

質問文には500文字数制限があるので、コメントに記載しています。
よろしければよろしくお願い致します。

2012/11/09 10:23:06
id:a-kuma3 No.3

回答回数4974ベストアンサー獲得回数2154

ポイント150pt

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, ... ) 



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

他1件のコメントを見る
id:a-kuma3

ごちゃごちゃ書きすぎました (^^ゞ


gcc が使えるコマンドプロンプトでの操作です。

Apache がインストールされてるところが c:\apache2.2 だとします。
C:\Apache2.2\include には、httpd.h や http_core.h が存在してるはず。

mod_evasive20.c があるディレクトリに行きます。

gcc -I C:\Apache2.2\include -c mod_evasive20.c

で、うまくすると、mod_evasive20.o ができる。
syslog.h が無い、とか怒られそうな気もします。
回答に書いた、LOG マクロの中身を空っぽにするようにして、syslog.h へのインクルードを消します。
これで、コンパイルが通るはず。

もし、mod_evasive20.o ができたとしたら、

gcc -shared -L C:\Apache2.2\lib -o mod_evasive.so mod_evasive20.o -lhttpd

で、mod_evasive.so が出来上がるんじゃないか、と。

2012/11/09 17:23:12
id:halohalolin

a-kuma3さんありがとうございます。

導入方法が分かれば、他のApacheモジュール導入にも役立ちそうなので、参考にさせて頂きます!

2012/11/09 17:50:31
  • id:halohalolin
    mod_evasiveを自分の環境でビルドすると、以下のようなメッセージとエラーが出ます。
    よろしくお願いいたします。

    C:\Users\Administrator\Desktop\mod_evasive>"C:\Program Files\Apache Software Foundation\Apache2.2\bin\apxs.bat" -a -i -c mod_evasive20.c
    C:/Perl/site/bin/gcc.exe /nologo /MD /W3 /O2 /D WIN32 /D _WINDOWS /D NDEBUG
    -I"C:\PROGRA~1\APACHE~1\Apache2.2\include" /c /Fomod_evasive20.lo mod_evasive20
    .c

    gcc.exe: /nologo: No such file or directory
    gcc.exe: /MD: No such file or directory
    gcc.exe: /W3: No such file or directory
    gcc.exe: /O2: No such file or directory
    gcc.exe: /D: No such file or directory
    gcc.exe: WIN32: No such file or directory
    gcc.exe: /D: No such file or directory
    gcc.exe: _WINDOWS: No such file or directory
    gcc.exe: /D: No such file or directory
    gcc.exe: NDEBUG: No such file or directory
    gcc.exe: /c: No such file or directory
    gcc.exe: /Fomod_evasive20.lo: No such file or directory
    mod_evasive20.c:24:24: sys/socket.h: No such file or directory
    mod_evasive20.c:26:24: netinet/in.h: No such file or directory
    mod_evasive20.c:27:23: arpa/inet.h: No such file or directory
    mod_evasive20.c:32:20: syslog.h: No such file or directory
    In file included from C:/PROGRA~1/APACHE~1/Apache2.2/include/httpd.h:43,
    from mod_evasive20.c:35:
    C:/PROGRA~1/APACHE~1/Apache2.2/include/ap_config.h:234:28: ap_config_auto.h: No
    such file or directory
    C:/PROGRA~1/APACHE~1/Apache2.2/include/ap_config.h:235:30: ap_config_layout.h: N
    o such file or directory
    mod_evasive20.c: In function `access_checker':
    mod_evasive20.c:215: error: `LOG_PID' undeclared (first use in this function)
    mod_evasive20.c:215: error: (Each undeclared identifier is reported only once
    mod_evasive20.c:215: error: for each function it appears in.)
    mod_evasive20.c:215: error: `LOG_DAEMON' undeclared (first use in this function)

    mod_evasive20.c:215: error: `LOG_ALERT' undeclared (first use in this function)
    apxs:Error: Command failed with rc=65536
    .

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません