mod_ipcountaccess.c ------------ Apache用のモジュールです。 同一IPからの同時コネクションを制限することができます。 インストールするapacheはDSOモードでコンパイルして置いて下さい。 コンパイル・インストール方法: 普通にコンパイルするだけです。 # /usr/local/apache/bin/apxs -i -a -c mod_ipcountaccess.c 使用方法: httpd.confに <必須(Win32では記述はいりません)> メイン内でのみ有効です。 XUser ユーザー名または#UID 必ずUserと同じ物を指定して下さい。 XGroup グループ名または#GID 必ずGroupと同じ物を指定して下さい。 <オプション> メイン・VirtuslHost内で有効です。 FromIPMax 制限個数 1IPからはその制限個数より多くのコネクションが張れなくなります。 (標準では0(制限しない)です) FromIPMaxLongTimeCount 制限個数 一定時間(FromIPMAXLongTimeで定義)、1IPからはその制限個数より多くのコネクションが張れなくなります。 (標準では0(制限しない)です) FromIPMaxLongTime 時間(秒) という行を追加すると、FromIPMAXLongTimeCountを有効にする時間を変更できます (標準では30(秒)です) FromIPMaxOverErrorCode エラーコード(数字) 制限(FromIPMax云々)に引っかかったときのエラーコードを変更できます。 (標準では503です) FromAllAccessMax 制限個数 そのサーバー内(VirtualHost毎)の最大アクセスが制限個数に制限されます。 (標準では0(制限しない)です) FromAccessMax 制限個数 そのサーバー内(VirtualHost毎)の最大アクセスIP個数が制限個数に制限されます。 (標準では0(制限しない)です) FromAccessMaxOverErrorCode エラーコード(数字) 制限(From云々AccessMax)に引っかかったときのエラーコードを変更できます。 (標準では503です) IPv4専用です。 httpd.confに LoadModule mod_ipcountaccess.soのファイル名 が無い場合、 LoadModule libexec/mod_ipcountaccess.so を追加して下さい。 !!警告!! FromIPMAXLongTimeCountが0以上でかつ、2038年以降の時、このモジュールは正常動作しない可能性があります。 転載について このプログラム・テキスト等の転記・転載・再配布等は一切禁止します。 どうしても転載・転記・再配布等行いたい場合 ituki@fc.to までメールでご相談下さい。 著作権について TimePlant/Ituki Kirihara/NIはこのプログラムを使った事によって生じた一切の責任を負いません。 各自の責任で使用して下さい。 使用に関して、特に金銭的請求をすることはありません。 これらのプログラムの著作権は、TimePlant/Ituki Kirihara/NIが保有しています。 このプログラムにパッチを当てた物を公開する場合、パッチファイルとして公開して下さい。 (オリジナルの部分はなるべく公開しないで下さい) このプログラムを使用されている方は、ituki@fc.toにメールでお知らせして頂けると嬉しいです。 サポート メール ituki@fc.to にて受け付けております。バグ・意見等ありましたらどうぞ。 ただ、時間がないため、対応できるかはあやしいです(^_^; 以下の場所で関連情報等を公開しています http://fc.to/ituki/ このホームページは Ituki Kiriharaの趣味のページです(^_^; バージョン履歴 version 0.4.1 2002/12/07 FromAllAccessMax FromAccessMaxを宣言した際、503エラーが発生するバグを修正。 version 0.4.0 2002/11/30 FromAllAccessMax FromAccessMax FromAccessMaxOverErrorCode追加 MAXとなってたりMaxとなっていたりしていたのをMaxに統合 version 0.3.3 2002/07/02 スレッド/プロセス毎の固有設定をスタック上に取るように変更 version 0.3.2 2002/07/02 ハンドルの解放をやってないっぽいのを修正(Win32) version 0.3.1 2002/07/02 明らかに挙動のおかしいVirtualHostの設定を修正(Win32) version 0.3.0 2002/07/01 Win32 Apacheサポート。ノーチェック(ぉぃ version 0.2.0 2001/12/26 FromIPMAXLongTime/FromIPMAXLongTimeCount追加。 MAX_TABLE_SIZEをhttpd.hのHARD_SERVER_LIMITの値を参照するように変更。 version 0.1.1 2001/10/15 FromIPMaxOverErrorCodeを指定しなかった場合に動作が不安定になるバグを修正。 FreeBSDにおいてコンパイルが通らない(union semunが重複定義)事を修正。 セマフォをきちんと初期化するように修正。 version 0.1 2001/10/13 FromIPMaxOverErrorCode,XUser,XGroup追加。 XUser,XGroupはsu_EXEC時にサーバーの動作しているUID/GIDが分からないことがあるため追加。 semunの定義を追加。 version 0.0 2001/10/06 公開。 (c) Copyright 2001 TimePlant/Ituki Kirihara/NI All rights reserved. 備考 このプログラムは、多分POSIX互換で動くと思います。 (Linux/FreeBSDでは動作中) 1(Virtual)サーバー当たり1つずつ共有メモリ・セマフォを利用しています。 その関係で、沢山VirtualHostを動かしている場合、(特にFreeBSDやSolarisでは)共有メモリ・セマフォのカーネルでの制限に引っかかる場合があります。 (参照: http://osb.sra.co.jp/PostgreSQL/Manual/PostgreSQL-7.1-ja/kernel-resources.html / カーネルリソースの管理/PostgreSQLのページ) あと、FromIPMaxが有効なサーバーでは、必ず1アクセスずつ許可されていくので、 超高負荷サーバーだとちょっと重いかもしれません。 高負荷・高アクセス・ダウンロード中心サーバーで使うと良いと思います。 おまけ MAX_TABLE_SIZEの値を大きくすると、より多くのユーザーからコネクションを張ることが出来るようになります。 といっても、1IPで1個しか消費しないので、普通はこれより大きくする必要は無いと思いますが…… 実は、ip tableの検索速度があんまり早くない(言い換えればかなり手抜き)なのですが、 まぁ、初期状態だと最大HARD_SERVER_LIMIT+2/1024個しか検索しないからほぼ問題ないでしょう。 XUserとXGroupは苦肉の策です(^_^; ホントは他の方法でApacheのUser/Groupの内容を読みたいのですが…… XUserのチェックはしてますが、XGroupのチェックはしてません。(まぁ、属性が0600だからほぼ問題ないと思いますが……) # core_moduleから取得できそうな気もしますが……誰か分かります?