2006年03月10日

limitipconnを仕込む

キューバ方面からHTTPポートを占有してチンタラダウンロードする無作法なダウンローダが。ほかのアクセスに大いに支障を来たしていたので、とりあえずREJECTしつつ、対策を考える。

とりあえず一番簡単そうなのは、やはりIP単位のリクエスト数を絞ることだろうか。壁の中だったりすると問題があるかもしれないけど、皆で大きなダウンロードをしようというのでもない限りはまぁ大丈夫だろう。

Sargeのapache2にちょうど良さそうなものをうろうろした結果、mod_limitipconを使うことにした。残念ながらdebはまだない。

  1. tar.gzをダウンロードする。
  2. 実働環境で作ってもいいけど、-devがいろいろ入るのはナニな気がするので、とりあえず別マシンのsarge pbuilder環境で構築することにした。
  3. pbuidler環境でapt-get build-dep libapache2-mod-security のようにして、とりあえずApache2モジュール構築を作る。
  4. tar.gzを展開し、Makefile内をapxs→apxs2にしておく。
  5. makeを実行し、モジュールを作成する。さらにmake installを実行して、pbuilder環境内にインストールする。
  6. pbuilder環境内の/usr/lib/apache2/modules/mod_limitipconn.soを実環境にコピーする。
  7. 次のような/etc/apache2/mod-available/limitipconn.loadファイルを作成する。
    LoadModule limitipconn_module /usr/lib/apache2/modules/mod_limitipconn.so
    ExtendedStatus On
    
  8. a2enmod limitipconnを実行して有効にする。
  9. 制限をかけるように設定する(とりあえず全体にかけることにした)。
    <IfModule mod_limitipconn.c>
        <Location />
    	MaxConnPerIP 3
    	NoIPLimit image/*
        </Location>
    </IfModule>
    
  10. /etc/init.d/apache2 restartで再始動。
  11. wget -O /dev/null でかいファイル &を数回やってサービスを拒否されることを確認。/var/log/apache2/error.logにも記録される。