2011年06月17日

Apache2 で DoSアタック を華麗にかわしたい。オーレッ!!

お仕事で使っているサーバさんたちが、とあるアレな国からの大量アクセス攻撃(というか、クロールしてるだけみたいだけど)を受けて負荷が上がってしまいました。

マシンを増やせば何とかなるレベルなんですが、1台でも増やせば維持費が月額いくらと地味に響いてくるわけです。
そこで、Apache2に『mod_dosdetector』を導入してみました。

どんなものかというと、同じIPから単位時間あたりに閾値以上のアクセスが来たら環境変数をフラグアップ。
その値をmod_rewriteで見て何処へでも好きなところへ飛ばせるという超便利ツールです。

下記からダウンロード出来ます。
http://moddosdetector.sourceforge.net/

作った方のブログ
http://d.hatena.ne.jp/stanaka/20070204/1170553603


使い方は、ここが詳しかったです。
http://wp.serpere.info/archives/465

で、このサイトを参考にしながら、以下のように書きました。
--------------------
#DoS検知を有効化。
DoSDetection on

#攻撃をうけたぜ!っていうログをdos_suspect_log に残しておく設定
LogFormat "%{SuspectHardDoS}e %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" dos_suspect
CustomLog "logs/dos_suspect_log" dos_suspect env=SuspectDoS
CustomLog "logs/access_log" combined env=!SuspectDoS

#favicon もimageとして認識させて、監視対象から除外
AddType image/vnd.microsoft.icon .ico
DoSIgnoreContentType image|javascript|css

#5秒おきに評価
DoSPeriod 5

#10回/5秒のアクセスだったらグレー(SuspectDoS)≫ログに記録
DoSThreshold 10
#25回/5秒のアクセスだったら黒(SuspectHardDoS)≫攻撃と判定してRewriteへ
DoSHardThreshold 25

#黒なら30秒禁止、明けたら再評価
DoSBanPeriod 30

#攻撃者IPの保持数
DoSTableSize 100


#DoS検出時の制御
RewriteEngine On
RewriteCond %{ENV:SuspectHardDoS} =1
RewriteRule .* - [R=503,L]
--------------------

ええ、基本コピペですが何か?
( ΦωΦ)負荷問題は解決しましたので、めでたしめでたし。

皆様、有難うございました。
posted by どら at 01:28| Comment(0) | TrackBack(0) | Techメモ

2011年04月26日

ActivePerlで XMLRPC::Lite を使いたい。

Linux上にXMLRPCサービスを提供するシステムを組んでみました。

で、それをテストするなら別環境から呼んでみた方が面白いかなと考え、WindowsのActivePerlでやってみようと思い立ちました。
ところが XMLRPC::Lite を探しても ppm に無い…。あれ?雨


で、なんとかしてみたら、なんとかなったのでメモ。

XMLRPC::LiteをActivePerl5.10に導入する方法。

1.下準備として下記を実行
--------------------------------
C:\> perl -MCPAN -e shell
cpan> install MD5
cpan> install XML::parser
cpan> install MIME::Lite
cpan> install MIME::Parser
cpan> quit
--------------------------------

2.CPANサイトよりSOAP::Liteをダウンロードして解凍する
--------------------------------
http://search.cpan.org/~mkutter/SOAP-Lite-0.710.08/
--------------------------------

3.下記を実行する
--------------------------------
C:\SOAP-Lite\> perl Makefile.PL
C:\SOAP-Lite\> nmake
C:\SOAP-Lite\> nmake test(Apache環境がないとCGIのテストモジュールがハングするっぽい)
C:\SOAP-Lite\> nmake install
--------------------------------

SOAP::Liteインストール時に、XMLRPC::Liteも同時にインストールされる。

めでたし、めでたし。
posted by どら at 22:47| Comment(0) | TrackBack(1) | Techメモ

2011年04月25日

あれ? Apache2.2で ProxyPassReverse がうまくいかない?

mod_proxy と mod_proxy_balancer の組み合わせで下記のようなことを、やりたかったのですが、なぜかうまくいかず若干はまってしまったのです。

----------------------------
ProxyPass    / balancer://cluster/foo/var/
ProxyPassReverse / balancer://cluster/foo/var/
<Proxy balancer://cluster>
  BalancerMember http://app_a:8080 loadfactor=10 retry=10 keepalive=On
  BalancerMember http://app_b:8080 loadfactor=10 retry=10 keepalive=On
  BalancerMember http://app_c:8080 loadfactor=10 retry=10 keepalive=On
</Proxy>
----------------------------


他のマシンでは上手くいっているのだけれど、とあるマシンだけうまく動かず、/target へ リダイレクトした後のURLが、/foo/var/target になってる。(ErrorLogではそんなページありませんと。まぁそうよね。)

で、ちょろっと検索かけてみたら、あっさり見つかった _ノ乙(、ン、)_ ←リアル、ググレカス。

http://ftp.riken.jp/net/apache//httpd/CHANGES_2.2
----------------------------
Changes with Apache 2.2.12
----------------------------
 *) mod_proxy: Complete ProxyPassReverse to handle balancer URL's. Given;
    BalancerMember balancer://alias http://example.com/foo
    ProxyPassReverse /bash balancer://alias/bar
   backend url http://example.com/foo/bar/that is now translated /bash/that
   [William Rowe]
----------------------------

なんのことはない(; ´ ω`)使ってるApacheのバージョンが2.2.11だったゎ。

どうやら、Apache2.2.12以上なら先ほどの書き方で良いのだけれど、2.2.11以前では、以下のように書くしかないみたいです。


----------------------------
ProxyPass    / balancer://cluster/foo/var/
ProxyPassReverse / http://app_a:8080/foo/var/
ProxyPassReverse / http://app_b:8080/foo/var/
ProxyPassReverse / http://app_c:8080/foo/var/
<Proxy balancer://cluster>
  BalancerMember http://app_a:8080 loadfactor=10 retry=10 keepalive=On
  BalancerMember http://app_b:8080 loadfactor=10 retry=10 keepalive=On
  BalancerMember http://app_c:8080 loadfactor=10 retry=10 keepalive=On
</Proxy>
----------------------------

ProxyPassReverse A B は、B内のレスポンスに含まれるLocationヘッダ情報をA用に改変して戻す機能を有しているので、balancer://cluster/なんてサーバは存在しないと解釈してしまうってことらしいんよ|ωΦ`)へー。

でも、ver. 2.2.12 で、それをうまいことなんとかしてくれたのね。

thx William >ω<)ノシ
posted by どら at 11:00| Comment(0) | TrackBack(0) | Techメモ