リロードバーボンver2を作るよ
【サーバ】2011夏モデルを作ろうpart2 さてチューニング始める?
http://toro.2ch.net/test/read.cgi/sakhalin/1325755785/
この辺で出ていたリロードバーボンver2を作ろうのスレッドじゃ
現在のよりも、「軽い・メモリ食わない・鋭敏」なのを作りたいぞ apacheのログにパイプでいぃんじゃないかなぁ。。。と。
高負荷の時云々って話があったけれども、パイプ先でメインの処理をするから重たくなるのであって、
パイプ先で抜き取りだけして、メインのお仕事は専門家に任せるってのはどうなのかしら。 物理性能的な目標はわかった。
論理性能的な目標は何?
1 どういうものがdenyされればいいのか
2 あるいはどういう現象が解消されればいいのか
3 あるいは今までのバーボンとおなじ物を新しい仕組みで実現するだけなのか http://qb7.2ch.net/_403/c403.cgi
色変えてみた
赤いところはさっさと検知してさっさとdenyってのをやればいい気がする なるほど。
論理性能的な目標はわりとどうでもよくて
今までのバーボンだと1000を遥かに越えてからバーボン入りしてるようなケースを
出だしでさっさとdenyしちゃおうって話ね。 現在のSambaがいまいち時代遅れで激しい爆撃には全く効果なしってのもある
Sambaもre-disとか使って新しい方法にするという手もあるしやりたい 現状だと
n秒間隔でチェック
チェック時にm回以上アクセスしてたらdenyってやってたんだべ?
nを小さくする(たとえば1/10)。
mを小さくする(たとえば1/100)。
ってやればOK? 現在検出は10分間隔なのよね
それを秒のオーダーの物を作りたいのよ
というか作る必要があるみたいです なぜ激しい爆撃にに対応できないのか?
というのがわからん。
なぜわからんかというと、どういう仕組なのか知らないからなんだが。
すでに腹案の仕組みがあるならゲロすれ。 >>9
真面目に処理しなきゃなんとかなりそうな気がする。
毎秒チェックするけど、全部は見ない方式。
例えば最初の100個だけ見てヤバイのはさっさと止める。 例えば・・・・例えばだよ?
毎秒、ログを持ってくる。
とにかく数え始める
どれか1つでも3個を超えたらdenyして処理を終わる。
ってやるだけでいんじゃね?
全ログ処理する必要ないし、一回の処理で全部denyできなくても
次の一秒があるじゃん的な。 >>1 のスレのあちこちに書いてあるー
apache > logbuffer の現在の仕組みを
apache | bbon > logbuffer にするのだ
bbon というパイプを書いて常駐させリアルタイムにメモリー上でmやらnを解析して
.htaccessを書き換えて即denyってな感じ ttp://httpd.apache.org/docs/2.2/programs/rotatelogs.html
こゆのて重いの? ログを解析するという現在の仕組みをやめようって話さ
書き出されたログを解析するのは遅いし重いし うん。
まあ、パイプ通そうがログを読み込もうがやることはおなじだしね。
ファイル読み書き関連のオーバーヘッドがなくなるのはええことや。 結局アノニマス総動に巻き込まれたって解釈で良いんだよね?
丸の内OCNとかSo-netはドサクサ紛れの愉快犯だよね 1. 過剰な投稿やリロードを検出する仕組み
Apacheのログソースでいいのか?
pfのoverloadとか使えない? FreeBSDに詳しい人どうすかね?
2. deny/接続拒否する仕組み
.htaccessでいいのか?
sunosさんのmod_authz_iplistを活用できないか?
※ 1.と2.をまとめてApacheのDoS対策モジュールで面倒見られないか?
3. お断りリストの管理
対象を速やかに加え、指定した期間を過ぎたらリストから消す仕組みが必要
redisなどのKVS(Key-Value Store)を活用できそうな気がする
過剰なHTTPアクセスまたはTCPコネクション要求を検出(1.)
対象のIPアドレスを.htaccessのdenyリストなりmod_authz_iplistのブラックリストに追加(2.)
同時にIPアドレスとお断り期間をKVSに登録。cronなどで定期的にKVSからデータを引っ張って上記お断りリストを更新(3.) 思いついたことをつらつらと書いてみました
話のネタにでも 一歩一歩いきますかー
はじめての httpd.conf
httpd.conf にapacheがlogbuffer経由でログ書き出せの命令が書いてあるはずー
というとで httpd.conf を見ようと思う。
しかし httpd.conf はrootじゃなきゃ見れない設定になっている @awabi
Nttecにお願いして私でも見えるところにコピーしてもらった。
みてきまーす .conf をテキスト形式に設定してローカルに落としてメモ帳でみた。
こう書いてある
##################################################
### Log
##################################################
BufferedLogs On
ListenBackLog 4096
LogLevel warn
ErrorLog /dev/null
#TransferLog "/dev/null"
#TransferLog "| exec /usr/local/sbin/logbuffer"
TransferLog "| exec /usr/sbin/rtprio 23 /usr/local/sbin/logbuffer"
LogFormat "/var/httpd/access_log %h %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""
TransferLog "| exec /usr/sbin/rtprio 23 /usr/local/sbin/logbuffer"
これを
TransferLog "| bbon2 | exec /usr/sbin/rtprio 23 /usr/local/sbin/logbuffer"
ってすればいいんだっけ?
問題は、開発中はbbon2を頻繁にmakeすることなんだ
つまり makeしたあとどうなるのか・・・
makeした新しいbbon2がどうすればすぐに置き換わるのか・・
どうすればいいの? コマンド名だからこっちだった
killall -HUP bbon2