雑文発散

追記
過去の日記

2014-10-22 [長年日記]

[Fluentd][Elasticsearch] DDD (DoS Driven Development) を始めよう

第三tDiary.Net への Dos が発生した時に「どこからだ?」と探すのに、grep とか awk とか sort とか使って、次のように IP アドレスを特定している。

% cat tdiary_access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10

これでアクセスが多い IP アドレスの上位10個が表示される。例えばこんな感じ。まぁ、いちおう IP アドレスの詳細は隠しておこう。

% cat access.log | awk '{print $1}' | sort | uniq -c | sort -n | tail -10
   7968 107.x.x.x
   9960 74.x.x.x
  15081 104.x.x.x
  15082 104.x.x.x
  15109 104.x.x.x
  15200 104.x.x.x
  15902 74.x.x.x
  17336 68.x.x.x
  17712 68.x.x.x
  17866 68.x.x.x

現在ほとんど更新されていない日記へのアクセスも多くて、それらの合計が15,000件をオーバーしているとか、明らかに異常な状態ではある。ちなみにこの例のログは weekly ローテーションの設定をしていて、まだローテーション前の状態(つまり、まだ、今週の合計値ではない)。

で、今は上記の方法で IP アドレスを特定し、iptables の REJECT に設定して BAN しているのだけど、そろそろそういう時代じゃないよな、という思いが募ってきた。

世の中では Fluentd + Elasticsearch + Kibana によるログ監視が流行ってたりするようだし、ちょっとその構成を作って、DoS アクセス元の特定をブラウザベースで行える環境を作ってみよう。

DoS から始まる開発、DoS Driven Development の始まりである。


2014-10-21 [長年日記]

[tDiary] IE6.0 を拒否した結果のサーバメトリクス

IE6.0 を拒否した後のメトリクスが安定していて笑えるレベル。元の状況がひどすぎたってのもあるとは思うけど。

tdiary3 server metrics

グラフが空白の部分は DoS によって死んでいたタイミング。

あ、ちなみにこれは Mackerel のグラフ。監視対象サーバにエージェントを入れるだけで、こんな綺麗なグラフがすぐ出てくるのは楽でいいね。mrtg.cfg とか nagios.cfg とか悩みながら書いていた頃が懐かしい(笑)


2014-10-20 [長年日記]

[tDiary] 第三tDiary.Net で IE6.0 のアクセスを拒否するようにしました

まだ継続して DoS を食らっていて、今日もまたサーバが反応しなくなってしまっていた。

該当の IP が含まれる範囲を丸ごと iptables レベルで BAN したのだけど、それ以外の対策として IE6.0 のアクセスを拒否する設定を追加した。

これは、第三tDiary.Netへ来ている「コメント spam を投げようとしているっぽいアクセス」の USER_AGENT に MSIE 6.0 が含まれる率が非常に高いという判断から行なっている。

普通に日記を読み書きする人なら、もう IE6 とか使ってないだろうしね。


2014-10-19 [長年日記]

[Mac] Homebrew と Homebrew Cask でのインストールスクリプトを作った

昨日の Yosemite アップグレートと Homebrew の環境構築しなおしに合わせて、Hombebrew で使っているパッケージ群のインストールをシェルスクリプト化した。

本当は brewfile でやったみようと思っていたのだけれど、「Brewfileで管理するのはもうオワコン」なんて話もあったので、単純なシェルスクリプトにしてしまった。

来たるべき新マシンでのセットアップを夢想して、Google Chrome や 1Password などのアプリケーション群も Homebrew Cask を使ってインストールするように、前述のシェルスクリプトへ追記した。

このスクリプト、今のところ Dropbox に保存しているんだけど、Dropbox そのものもこのスクリプト内でインストールするように記述している。

本当に新規マシンでのインストールを考えたら、GitHub などの Web 上に載っけておくのが正しいよなぁ、きっと。

その他の設定ファイル群も Dropbox 上に置いちゃっているので、そろそろ整理して GitHub へ上げておくかな。


2014-10-18 [長年日記]

[Emacs][Mac] OS X Yosemite (10.10) に Emacs HEAD (25.0) をインストールした

OS X Yosemite へのアップグレードが公開されたので、メインマシンである MacBook Air 13" (Mid 2012) へインストールした。

Public Beta の時にサブマシンへインストールしていたのもあって、Yosemite そのものに大きな驚きは無かった。Beta の時に iTunes が起動しなくなってしまったので、ちょっと心配していたけど、特に問題なく起動できたのでその懸念点も解消した。

OS のアップグレードを機会に Homebrew 環境も整理したのだけど、以前に行なった「Emacs HEAD (24.4) に inline patch を当ててビルドしてみた」の方法だと、Emacs HEAD のコンパイルに失敗するようになっていた。

調べてみたら configure.ac のパッチ当てで失敗していたので、その部分を直してコンパイルが通るようにしてみた。

更にこいつを Homebrew の自作 Formula に取り込んだ。

Homebrew には、本家以外の Formula を使うための tap という機能があるので、そいつを使って上記のリポジトリを登録(tap)してからインストールを実行する。

brew install の後ろが suzuki/emacs/emacs になっているのは間違っているわけではなく、本家のリポジトリと同じ Formula 名を使う場合の TIPS (?) みたいなヤツだそうだ(この辺は自信なし)。

% brew tap suzuki/emacs
% brew install suzuki/emacs/emacs --cocoa --srgb --use-git-head --HEAD --verbose

これで Emacs HEAD がコンパイルできた。M-x emacs-version でバージョン表記を見ると、Emacs 25.0.50.1 と出てきた。Emacs 24.4 がリリースプロセスに入ったみたいなので、HEAD のバージョンは 25.0 になったのかな。

Emacs 25.0 on OS X 10.10 Yosemite

で、こいつを起動したら、init-loader が無いよ、というエラーが出た。ん?なんだろ?と思ったら、バージョンが変わったことによって、これまで Cask でインストールしていた 24.4 用のパッケージは使われず、新たに 25.5 用のパッケージを再インストールしてやる必要があった。

こちらは、Cask ファイルがあるところで cask install を実行するだけで済んだ。

% cd ~/.emacs.d
% cask install

これは本当に Cask にしておいて良かった案件だなぁ。

で、肝心の inline-patch の動作なんだけど、、、なんとなく動いているけど、全ては動いていないような状態。

例えば、(mac-get-cursor-type)(mac-get-cursor-color) などはうまく動いているようだ。

(mac-get-cursor-type)
box
(mac-get-cursor-color)
"blue"

でも、(mac-toggle-input-method)nil が返ってくるだけで、動作はしていないように見える。

(mac-toggle-input-method)
nil

ここの修正を追っていくのはちょっと難儀だなー。分からないところが多すぎる。

日本語モード・英語モードでカーソルの色を変える機能などの「自分が欲しい機能」はだいたい動いているので、個人的には今のところこれで満足してしまっている。