どさにっき(アナログ) 〜2010年11月上旬〜

by やまや
<< = >>

2010年11月4日(木)

無題

_ あれー、いまの Mac って、control と caps lock の入れ替えがシステム環境設定でできるのか。ずっと気がついてなかった。アホだ。Panther でそれをやるには有志作成のカーネル拡張をインストールしなくちゃいけなくて、Tiger でそれが動かなくなって、以降ずっとその状態が続いてると思いこんでたよ。

_ Mac の us キーボードは control が「正しくない」位置にあるので、それを嫌って「正しい」位置にある jp キーボードを選んでたんだけど、そんなの気にせずともよくなってたんだね。もう Air 買った後だから遅いけど。あー、でも us キーボードは ~ のキーもおかしな位置にあるから、やっぱり jp キーボードで正解か(HHK や FKB8579 を使ってる身では ~ はキーボード左上ではなく右上にあるのが正しい)。jp キーボードではバックスラッシュの入力がめんどくさいけど(円記号とバックスラッシュが区別されるので)。


2010年11月7日(日)

無題

_ 外出してた間にうちの POP サーバが辞書攻撃受けてたらしい。11:53 にはじまって2秒間隔でひたすらログイン試行して、こちらが気付いて 16:37 にブロックするまでの間に7316回。とーぜんすべて失敗。IP アドレスは中国のようだけど、単なる踏み台の可能性もあるので、真の攻撃元がどこかは知らん。

_ ssh や ftp ではよくあるけど、pop を狙ってくるのはわりと珍しい。まったくないわけじゃないけどね。ssh だったら侵入した先でいろいろできるし、ftp でも web の改竄とか楽しいことできるけど、pop ってメールを読むか消すかしかできない。悪意を持ってわし個人の秘密を探りにきたのならまだわからんでもないんだが、root とか guest とか admin とかありがちなユーザ名で、つまりログインできれば誰でもいい、なんて攻撃を pop でやって何かメリットあるんだろうか。もしかしたらなんかのパスワードとかクレジットカードの番号とかが書かれたメールがあるかもしれないからそれを狙う? 可能性低すぎるだろ。pop でログインできれば同じパスワードで ssh も入れるかもしれない? ならはじめから ssh 狙えよ。同じメール取得用のプロトコルでも、これが pop じゃなくて imap ならばフォルダにメールを放りこむことも可能なんで spam 送りにも使えるんだけどねぇ(効率は極めて悪いが)。よくわからん。

_ ところで、dovecot 1.x での pop/imap のアクセス制限。奇特なことにユーザごとに接続元を設定できるような仕様になってる。つまり、認証に成功した後にそのユーザが許可されたネットワークから接続してるかどうかを調べるという作りなんで、こういう認証に成功する前の辞書攻撃を防ぐ用途にはまったく使えない。ので、dovecot 内蔵の機能で L7 で蹴るのではなく、pf や iptables で L4 で蹴ることになる。めんどくさいね。2.0 では tcpwrapper での制限も可能になったみたいだけど(試してない)。


2010年11月8日(月)

mod_pagespeed on FreeBSD

_ google のアレ。公式には Linux と MacOSX にしか対応してないが、FreeBSD で作ってみる。細かい解説なし。メモだけ。結果から先に書くと、まだ成功してません。

_ 要 bash、python、gmake、subversion、libexecinfo。ports から入れておく。もちろん apache 2.2 や apr なども必要。bash と python については、ただインストールするだけでなく /bin/bash、/usr/bin/python になるよう /usr/local/bin から symlink しておく(#! の行を書き換えてまわってもいいけど)。

_ ソースは ここの手順にしたがって拾ってくればいいように見えるけど、罠。これで拾えるソースはぜんぜん足りない。 こっちが正解。まず、chronium depot tools を拾ってくる。howto に書いてあるとおり。

_ depot_tools/ の中に以下のスクリプトを readlink という名前で作成する。GNU の readlink と FreeBSD の readlink の違いを吸収するためのもの。パスが通ってりゃ別にここじゃなくてもいいけど、今回の用途で必要最小限なことしかやっていないバグあり手抜きスクリプトなので、/usr/local/bin とかに置いて常時使おうなんてことは間違っても考えてはいけない。

#!/bin/sh
if [ x"$1" = x"-f" ]; then
    /bin/realpath "$2"
else
    /usr/bin/readlink "$@"
fi
んで、この depot_tools のディレクトリを PATH の先頭に追加する。howto にあるとおりに PATH の末尾に追加すると readlink で上のスクリプトではなく /usr/bin/readlink が使われてしまうので不可。

_ howto の手順にしたがって gclient sync までおこなう。readlink が上のスクリプトではなく FreeBSD 純正のものだと途中でコケる。最後までエラーなく進めば src/Makefile ができてるはず。

_ Makefile の先頭に追加。以下は apache2.2 を ports を使わず野良ビルドした場合のもの。ports からのインストールなら apache と apr 関連のヘッダ/ライブラリは別のところにあるはずなので適宜修正のこと。

CFLAGS=-I/usr/local/include -I/usr/local/apache2/include
CXXFLAGS=$(CFLAGS)
LDFLAGS=-L/usr/local/lib -L/usr/local/apache2/lib
コンパイル。
% gmake BUILDTYPE=Release

_ …まあ、途中でコケるんですけどね。C++ はさっぱりわからんので直しようがない。それ以前に、エラーになるのは make の途中で自動生成されるファイルで、元ファイルをどういじれば該当ソースファイルに狙ったとおり反映されるのかがそもそもわからん。FreeBSD と Linux の違いによるものではなく、コンパイラのバージョンの問題のような気がしないでもない。g++ >= 4.2 という要件はいちおう満たしているはずなんだが。ちなみコケてるところを抜粋するとこんな感じ。誰か直して。

In file included from out/Release/obj/gen/protoc_out/pagespeed/proto/pagespeed_output.pb.cc:4:
out/Release/obj/gen/protoc_out/pagespeed/proto/pagespeed_output.pb.h:1470: error: expected unqualified-id before 'int'
out/Release/obj/gen/protoc_out/pagespeed/proto/pagespeed_output.pb.h:1470: error: expected `)' before 'int'
out/Release/obj/gen/protoc_out/pagespeed/proto/pagespeed_output.pb.h:1470: error: expected `)' before 'int'
out/Release/obj/gen/protoc_out/pagespeed/proto/pagespeed_output.pb.h:1477: error: expected unqualified-id before 'int'
out/Release/obj/gen/protoc_out/pagespeed/proto/pagespeed_output.pb.h:1477: error: expected `)' before 'int'
out/Release/obj/gen/protoc_out/pagespeed/proto/pagespeed_output.pb.h:1477: error: expected `)' before 'int'

_ なお、make が途中で終了した場合、再度の実行はかならずコケる模様。幸い、中間生成物はソースとは別の場所に出力されるので、それを消してやりなおせばよい(rm -r out)。


<< = >>
やまや