新システム200記事目ということで、まぁすばらしいですね。
旧システムが1133記事なので、合計1333記事ということですね。
1日1記事以上の割で書いてるから3年半以上だなとなるわけだが、
具体的には2005/05/31からだから、まぁ3年半ですね。
まぁ以前も書いたような覚えがあるが、古い記事はよくわからない記事も多い。
けど非常によい記録になってるのも多いのでかなり有意義な日記ではないかなと。
どうもCentOSでは標準でWebalizerってのが入ってるみたい。
これはApacheのアクセスログを解析するもの。
cronに登録されてて毎日解析プログラムが動いているだけです。
この手のものとしてはLogwatchというログファイルの抜粋メールをrootに送ってくれるやつとか。
さて、結果は/var/www/usageにあるので、Apacheから見れるようにしたいですね。
実はその設定が/etc/httpd/conf.d/webalizer.confだったのか…
いらんと思って.conf_にしてた。
さて、この設定ファイルでは127.0.0.1以外からのアクセスを禁じてた。
うーん…それでは不便と192.168.0.を追加しようと思ったのだが、
けど出先でも見たいし、家庭内に悪意がいないとも限らんし…
まぁ僕は別にアクセスログは個人情報とは思ってないんだけどね。
ただそういう考えをする人がいればなんか制限をかけた方がいいだろうと。
それで考えたのはHTTPS強制とBASIC認証の組み合わせ。
BASIC認証ならApacheの設定だけで簡単に認証かけれますからね。
BASIC認証は特に暗号化を行わない認証だけど、
HTTPSと組み合わせればパスワードの流出は多分防げる。
多分というのは、ブラウザが自動でパスワードを再送信する範囲がわからないから。
ただ、一般に成功したディレクトリ以下なので、
https://www.example.com/private/foo.phpで成功したら、
HTTPSの範囲でしか再送されないだろう、という予測が当たればまぁ安全。
あとBASIC認証は平文で送信されるので、サーバーに保管するのは暗号化したパスワードでOK。
そうなんですよね。そういう意味では暗号化しないというのは利点です。
IMAPとかもCRAM-MD5とかじゃなくてSSLで暗号化して平文認証を選んでると。
ただ具体的な設定は少しめんどくさい。
というのもSSLの場合だけBASIC認証をするためには、
VirtualHostディレクティブを使わないとだめなんだよね。
それで元のwebalizer.confのアクセス制限を行うLocationディレクティブを全削除して、
ssl.confをいじることにした。
なんでssl.confなのかというと、同じVirtualHostディレクティブが二個あると後に読み込んだのが無視されるから。
ssl.confではもともとSSLの設定にVirtualHostディレクティブを使ってるので…
(元々ある設定)
AuthType Basic
AuthName "Welcome Private Zone"
AuthUserFile /var/www/.htpasswd
Require valid-user
RewriteEngine On
RewriteBase /usage
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://libserver.ddo.jp/usage/$1 [L,R]
以前から使ってるHTTPS強制のrewriteと、Port 443からのアクセスの場合のみのBASIC認証だけですね。
わかってしまえば非常にシンプルですね。
まぁHTTPSがport 443以外にあるならまずいですが、じゃなければこれでOKだと。
.htpasswdはApacheから見えないところに置けば非常に安心です。
まぁ見えるところにおいても.htから始まるのは見えない設定だろうけど。
作成もコンソールからやるのがもっとも簡単です。
# htpasswd -c /var/www/.htpasswd user
-cを付けてやればファイル作成もやってくれる。当然2人目からは-cは付けない。
まぁこれでOKですね。
そういえばカウンタのログは制限かけてないなと思って、同様に書いてみた。
ログはscount/XXX.csvとscount/XXX.countにあるんだけどね。
SuExec以後は600にしてPHP以外からアクセスされないようにしてたけど、
これも非常に便利な資料なのでHTTPSで見れるようにした。
AuthType Basic
AuthName "Welcome Private Zone"
AuthUserFile /var/www/.htpasswd
Require valid-user
RewriteEngine On
RewriteBase /scount
RewriteCond %{HTTPS} off
RewriteRule ^(.*)\.(csv|count)(.*)$ https://libserver.ddo.jp/scount/$1.$2$3 [L,R]
2つの拡張子だからLocationMatchディレクティブを使ったけど、
csvだけなら*.csvでLocationディレクティブを使った方が読みやすいですね。
まぁrewriteもこんな感じでOKです。
これでログも安心して見られる土壌が出来ました。
ちなみにAuthNameが同じところは同じユーザー名・パスワードの組が送られることがある。
まぁしかし実際は同じドメインに限られそうです。
BASIC認証なんて…と思いますけど、
使い方を吟味すればまぁまぁ安全に使えます。
BASIC認証にはログアウトがないというのもそうなんですが、
結構ブラウザのお節介がどの程度かによって変わってくる話です。
だから多くの人が使うところでBASIC認証はよろしくないと思います。
かっこわるいですしね。めんどくさいけどPHPで作ればいいです。
OKならSessionにREMOTE_ADDRとHTTP_USER_AGENTをくっつけた文字列を書き込めばいいですね。
それを比較すればかなり安心して使えます。
Cookieは盗まれたら終わりだから、大切な事はSessionで管理するのがいいです。
そしてSession IDが盗まれても、Sessionに登録されてるIPとUAが一致すれば本人に違いないと。
まぁそういう仕組みを作ればいいんです。簡単ですね。
だけど後付で付けるにはそれは大がかりな仕組みだし、内輪でしか使わないわけだから、
そういうときはBASIC認証というのは結構便利な仕組みだと言うことです。