nginxでもapacheでも使用可能なDoS的アクセスを検知して任意の制御をするWebサーバ拡張をmrubyで作った - 人間とウェブの未来

(情報元のブックマーク数

mrubyでDoS的な集中アクセスを検知するモジュールを書いたって話。ソース出てるので、細かいチューニングができるのが嬉しい

会社の運用メンバーと色々議論していた中で、「カジュアルにWebサーバへのDoSみたいなアクセスが来た時に検知して制御したいよねー」という話が上がったので、http-dos-detectorというnginxでもapacheでも使えるWebサーバ拡張をmrubyで書きました。
もちろんmrubyなので、mod_mrubyとngx_mrubyを使っています。ので、Rubyコードはそのまま同じコードをどちらのミドルウェアでも使えます。mod_mrubyとngx_mrubyを使えば、ちょっとしたWebサーバの拡張は両方で同じ実装に落とし込めるので便利ですね。

nginxでもapacheでも使用可能なDoS的アクセスを検知して任意の制御をするWebサーバ拡張をmrubyで作った - 人間とウェブの未来

例えば上記の例では、アクセス先のホスト名(:counter_key)に対し、5秒間(:threshold_time)で10000アクセス(:threshold_counter)あったらDoSと検知し、そこから2000アクセス(:behind_counter)の間か、10秒間(:expire_time)はDoS判定をする、という動きをします。
この辺りの挙動はサーバに合わせてパラメータを適宜チューニングすると良いです。

nginxでもapacheでも使用可能なDoS的アクセスを検知して任意の制御をするWebサーバ拡張をmrubyで作った - 人間とウェブの未来

screenshot