2009年10月23日金曜日

FreeBSD でサーバ構築 #17 UW IMAP 編

林檎生活100: FreeBSD でサーバ構築 #16 SMTP over SSL: TLS による暗号化通信の続き.今回は,UW IMAP で IMAP サーバを構築する.

UW IMAP は,ワシントン大学で開発された IMAP サーバで,リファレンス実装的な立場のものである.伝統的な UNIX のメール環境(FreeBSD のメール環境も含む.)に親和性が高く,導入が容易であるので,今回の IMAP サーバに選択した.とりあえず,IMAP over SSL が使用でき,IMAP の基本的な機能を持っているので十分だろう.ただ,ほかの IMAP サーバよりもメールボックスへのアクセスに時間がかかる(どちらかというと,サーバではなくメールボックス形式の問題.)ので,大量のメールを捌く必要があるのであれば,次回以降に解説する Cyrus IMAP を使用した方がいいかもしれない.なお,UW IMAP の持つ機能の詳細は,Web サイトや参考文献を参照してほしい.

UW IMAP の動作はとてもシンプルだ.メールクライアントが IMAP サーバへのアクセスを試みると inetd (TCP/UDP ポートを監視し,そのポートにパケットが届くと対応づけられたサーバを起動するデーモン.)によって起動され,メールボックスを操作したり,情報を返したりするように動作する.また,サーバが起動された際に,ローカルのメールボックス (/var/mail) からユーザのメールボックス (~/mbox) にメールを移動させる動作をする.(ただし,~/mbox が存在しない場合は,ローカルのメールボックスを IMAP サーバのメールボックスと見なす.)これによって,サーバ上でメールを mail コマンドで読んでも,メールクライアントで UW IMAP を経由してメールを読んでも,ユーザのメールボックスにメールが保持される.ゆえに,自然に IMAP サーバを導入することができる.

インストール方法は,次のとおりである.

1. Ports からインストールする.
SSL を使用しない場合は,SSL_AND_PLAINTEXT にチェックを入れること.デフォルトで,SSL を使用しない認証をはじくようにコンパイルされるため.
# cd /usr/ports/mail/imap-uw
# make install clean



2. inetd の設定ファイル /etc/inetd.conf の該当行を次のように有効化する.
# example entry for the optional imap4 server
#
imap4 stream tcp nowait root /usr/local/libexec/imapd imapd(コメントを外す.)

3. /etc/rc.conf に次の行を追加し, inetd を有効化する.
inetd_enable="YES"

4. inetd を起動する.
# /etc/rc.d/inetd start

5. 証明書を配置する.
# cd /etc/mail/certs
# mkdir /usr/local/certs
# umask 066
# cat key.pem cert.pem > /usr/local/certs/imapd.pem
# umask 022

鍵と証明書を同じファイルに記述して,/usr/local/certs に imapd.pem というファイル名で配置するだけ.(場所とファイル名は固定みたい.)

6. メールボックスのスケルトンを作っておく.
# touch /usr/share/skel/mbox

これは,新規ユーザを追加したときに自動的に mbox がホームディレクトリに作成されるようにするためだ.UW IMAP は,ホームディレクトリに mbox があると /var/mail からメールを取得してくるという仕様になっていて,mbox が無い場合は /var/mail のメールボックスを直接参照する.デフォルトのままユーザが使用すると,/var/mail 以下にメールが蓄積され,論理パーティションを切っている /var を圧迫することになりかねないので,このようなスケルトンを作成する.(まぁ,ssh や ftp でログインされて,mbox を消されたら,結局 /var/mail にメールがたまるわけだけどね.)

これで設定完了♪

外部から接続する場合は,TCP の143番に対してのポートマッピングを設定しよう.また,認証については,PAM を使用しているのだが,/etc/pam.d/imap の内容のままで問題ないので省略した.

次回は,Cyrus IMAP の設定について説明する.Cyrus IMAP には,振り回されたからなぁ.(自分のミスでwww)

参考文献:
University of Washington: IMAP Information Center
IMAP

2009年10月15日木曜日

FreeBSD でサーバ構築 #16 SMTP over SSL: TLS による暗号化通信

林檎生活100: FreeBSD でサーバ構築 #15 SMTP Authentication (SMTP-AUTH)の続き.前回は,認証のための機能を Sendmail に導入した.今回は,その認証のための通信を暗号化するために SMTP over SSL を導入する.

SMTP over SSL とは,SMTP セッションを SSL によって暗号化するものだ.(SSL と TLS については参考文献を参照してほしい.)これによって,メールクライアントからメールサーバへの通信は暗号化される.認証を行い,メールを受け渡すプロセスまでだ.しかし,メールサーバから次のメールサーバに転送される場合の通信の暗号化は保証されない.つまり,メールが最終配送先に届くまでの経路すべてが暗号化されるわけではないことに注意しよう.ここで暗号化の対象としているのは,メールの内容ではなく,認証時のユーザ名とパスワードなのだ.(メール本体の暗号化の問題は,全然別になるってことだね.)

さて,さっそくその機能を導入しよう.幸運なことに,この機能はすでに FreeBSD の Sendmail に入っているので,SSL 証明書を配置し,設定を変更するだけでいい.(生成については,林檎生活100: OpenSSL で自己署名証明書を作成する林檎生活100: Namecheap で格安 SSL 証明書を取得する方法を参考にしてほしい.)

1. /etc/mail/certs ディレクトリを作成する.
# mkdir /etc/mail/certs

2. /etc/mail/certs ディレクトリに証明書を配置(もしくは生成)し,アクセス権を次のように変更する.(秘密鍵のアクセス権に注意.証明書へのシンボリックリンクととなるハッシュのファイル名は,対象の証明書によって異なる.ちょっとここらへんの用途がわかってない.)
・自己署名証明書の場合
lrwxr-xr-x 1 root wheel 8 Oct 15 05:06 807f5ca7.0 -> cert.pem
-rw-r--r-- 1 root wheel 1172 Oct 13 05:41 cert.pem
-rw------- 1 root wheel 887 Oct 13 05:41 key.pem

・ルート CA による署名済み SSL 証明書の場合
lrwxr-xr-x 1 root wheel 10 Oct 15 05:05 594f1775.0 -> cacert.pem
-rw-r--r-- 1 root wheel 1162 Oct 13 05:41 cacert.pem
-rw-r--r-- 1 root wheel 1172 Oct 13 05:41 cert.pem
-rw------- 1 root wheel 887 Oct 13 05:41 key.pem

3. /etc/mail/lucifer.legna.org.mc(自分の環境に合わせた設定ファイルを変更すること.)を変更する.
3.1. まず,非暗号化通信時に認証を行わないように設定する.これによって,暗号化されていない状態での認証を防ぎ,ユーザ名やパスワードの漏洩を防止する.
dnl Set SASL options
TRUST_AUTH_MECH(`PLAIN')
define(`confAUTH_MECHANISMS', `PLAIN')
define(`confAUTH_OPTIONS', `p')(この行を追加する.)

3.2. 使用する SSL 証明書など,SMTP over SSL に関わるオプションを設定する.(上から順に,証明書ディレクトリへのパス,CA 証明書へのパス,サーバ証明書へのパス,サーバ秘密鍵へのパスである,最後のオプションは,クライアント検証を行わないというオプションである.クライアント認証うんぬんの話は割愛する.)
・自己署名証明書の場合
dnl SSL Options
define(`confCACERT_PATH',`/etc/mail/certs')
define(`confCACERT',`/etc/mail/certs/cert.pem')
define(`confSERVER_CERT',`/etc/mail/certs/cert.pem')
define(`confSERVER_KEY',`/etc/mail/certs/key.pem')
define(`confTLS_SRV_OPTIONS', `V')

・ルート CA による署名済み SSL 証明書の場合
dnl SSL Options
define(`confCACERT_PATH',`/etc/mail/certs')
define(`confCACERT',`/etc/mail/certs/cacert.pem')
define(`confSERVER_CERT',`/etc/mail/certs/cert.pem')
define(`confSERVER_KEY',`/etc/mail/certs/key.pem')
define(`confTLS_SRV_OPTIONS', `V')

4. 設定ファイルを更新し,Sendmail を再起動する.
# cd /etc/mail
# make install
# /etc/rc.d/sendmail restart

これで,SMTP over SSL による通信ができるようになったはずである.メールクライアントの設定を変更して,TLS による接続を試みてみるといい.また,暗号化していない状態での認証が棄却されることを確かめよう.

また,telnet で 250-STARTTLS が表示されることで設定されているか確認できる.STARTTLS というのは,暗号化通信を開始するコマンド名である.

正常に動作しないときは,/var/log/maillog を確認してみよう.エラーメッセージがファイルの最後あたりに出ていると思う.

以上.こんな感じで Sendmail を設定して,メールクライアントから見た場合の送信用サーバが完成した♪

WAN 側から接続する際には,TCP 25 番に対してポートマッピングを設定しよう.

次回は,メールクライアントから見た受信用サーバを構築の段階に入る.いまや自分用サーバで POP サーバを使う必要性は感じないので,IMAP サーバを対象とする.メジャーな IMAP サーバはいくつかあるが,この Blog では UW IMAP と Cyrus IMAP を取り上げる.導入な簡単な UW IMAP を先にさっくり構築してみて,その後で Cyrus-IMAP の構築をやる.少ない人数で大量のメールをさばかないのであれば,前者の UW IMAP で十分だと思う.UNIX のメールシステムとの親和性も高いので,すごく自然に導入できる.しかし,人数が多かったり大量のメールをさばかなければならないのであれば,後者の Cyrus IMAP を使用した方がいいだろう.クウォータを利用したい場合もこっちになる.

とりあえず,それぞれのサーバの特徴などは次回以降説明する.お楽しみに〜.

参考文献:
Wikipedia: Secure Sockets Layer
RFC2487: SMTP Service Extension for Secure SMTP over TLS
sendmail 第3版〈VOLUME1〉運用編
sendmail 第3版〈VOLUME2〉設定編
sendmailクックブック―設定と運用のためのレシピ集
FreeBSD Handbook

追記(2009年10月15日):
クライアント検証・認証についての補足.

今回の設定で,メールクライアントがサーバを検証することが可能になり,接続先メールサーバが保証されることになる.(自己署名の場合はダメだけどねw)しかし,メールサーバはクライアントを認証を通った誰かとしか感知しない.よって,サーバがクライアントを検証したい場合に,クライアント検証が必要になる.しかしながら,証明書を持って接続してくるクライアントを検証するという設定が今回のサーバに必要ないと思ったので,自動的に検証しようとする動作を無効化するオプションを付加した.(また,僕の理解が浅いので説明したくなかったというのもあるw)

クライアント認証というのは,クライアントの証明書をもとに認証する方法.これも使い方によっては便利だと思うのだが,僕が必要としなかったのと,その説明をきちんとできなさそうだったので説明していない.

加えて,今回設定したサーバがメールを転送する際には,別のサーバから見てクライアントになる.その際に証明書を呈示する設定もできるのだが,省略してある.これについても必要性を感じなかったからである.

今回の設定は,あくまでユーザ名とパスワードによる認証を暗号化することが目的なので,ほかの観点について抜けていて申し訳ない.

2009年10月12日月曜日

FreeBSD でサーバ構築 #A SSH と公開鍵認証

SSH の設定について,直接コンピュータを触れる環境であれば,特に SSH を使ってリモートからログインする必要はないわけだが,ファイルをコピーする必要があったり,外出先からログインする必要があったりするときには便利なので,その設定を解説する.

リモートからパスワードログインをするだけであれば,次のように設定するだけで,好きな SSH クライアントからアクセスできるようになる.

1. /etc/rc.conf に次の行を追加する.
sshd_enable="YES"

2. 再起動するか,次のコマンドを実行する.
# /etc/rc.d/sshd start

これだけだ.たとえば,Mac OS X のターミナルからログインしたい場合は,次のようなコマンドを打ち,プロンプトに従ってパスワードを入力するだけでいい.
$ ssh takuya@192.168.1.254(ユーザ名@ホスト名の形になる.)

はじめての接続のときに,yes/no のプロンプトがでるが,yes と答えておこう.これは,接続先ホストを known_hosts に加えるかという質問で,known_hosts に記述されているホストに再度接続しようとした場合に,そのホストが前回接続したホストと同一かということをチェックするための仕組みになっている.(同じホスト名で接続しても,実際のコンピュータが同一でなく,ログインパスワードを盗まれるようなダミーサーバに接続しているということが考えられるので,このような仕組みでチェックしている.)

しかしながら,このような方法だとパスワードが暗号化されているとはいえ,パスワードを入力するという作業が伴うため,ヒューマンエラーによってパスワードを露呈してしまう可能性がある.(たとえば,ログイン名としてパスワードを入力してしまうようなミス.)したがって,極力パスワードを入力せずにログインするようにしたい.

SSH には,そのためのログイン方法のひとつとして,公開鍵認証が含まれている.公開鍵認証についての説明はこのエントリ内で解説できる内容ではないので割愛する.また,SSH が公開鍵認証をどのように使っているかについても割愛する.詳細が知りたい方は,参考文献を読んでほしい.

ひとつ言えることは,公開鍵認証によって安全性が高まるということだ.公開鍵認証時に必要なのは,鍵となるファイルとその鍵を手元で複合するパスフレーズ(まあ,パスワードみたいなものだ.)となる.パスワードひとつだけよりも安全そうな気がすると思うw鍵もパスフレーズもネットワーク上を流れない認証方式なのでより安全ということだ.鍵を誰かに奪われても,パスフレーズがないと使えないしね.

では,公開鍵認証をできるように設定してみよう.前述の設定を行って,パスワード認証ができる状態であるとする.公開鍵認証の設定は,Mac OS X のターミナルから行う.

1. 鍵を生成する.
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/takuya/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

2. 鍵を配置する.鍵の保存用ディレクトリ(ssh の known_hosts なども入る.)を接続先ホストに作成し,そこに authorized_keys というファイルを作成し,公開鍵の情報を追記している.
$ ssh takuya@192.168.1.254 'mkdir .ssh'
$ cat .ssh/id_rsa.pub | ssh takuya@192.168.1.254 'cat >> .ssh/authorized_keys'


これで完了♪公開鍵認証で接続するときもコマンドは同じで,公開鍵認証が自動的に使用されるようになる.
$ ssh takuya@192.168.1.254


WAN からのアクセスも許容する場合は,公開鍵認証のみを使用するように設定しよう./etc/ssh/sshd_config の次の行を変更する.
# Change to no to disable PAM authentication
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no(この行を追記する.)

なんで,PasswordAuthentication no の追記でないのかということが気になると思う.不勉強なので正確性に欠けるかもしれないが,簡単に説明しよう.まず PasswordAuthentication は FreeBSD 7.1-RELEASE の SSH のデフォルト設定は no になっているので,パスワード認証はされない.しかし,ChallengeResponseAuthentication のデフォルト設定は yes になっている.さらに,チャレンジレスポンス認証は,UsePAM が yes になっているため PAM を使用するようになっているので,PAM のデフォルト設定上パスワード認証になるということだ.

あと,WAN からのアクセスを行う際に,間にルータがある場合は TCP 22番のポートマッピングを設定することを忘れないようにしよう.

以上,ざっと簡単に SSH の解説を行った.ちょっと適当に流してしまったので,ちゃんと勉強したい人はもっときちんと説明している Web サイトを参照したり,参考文献にあげた本を参照してね.

あー,そういえば,Leopard からキーチェーンと連動する ssh-agent っぽい機能が付いたみたいで,かなり便利♪裏側がどーなってるか知らないから,ちょっとわからない部分があってとまどうけどね…….

参考文献:
実用SSH 第2版―セキュアシェル徹底活用ガイド
ARAKI notes: ssh-copy-idがmacにないの不便だなあ,と一瞬おもったのでcopyしてくる

2009年10月9日金曜日

携帯シンク for Mac 5 で BAUM のアドレス帳と Snow Leopard のアドレスブックを同期

Willcom のケータイをネットインデックスの nico.neco から京セラの BAUM に機種変更して,Mac とアドレス帳の同期ができるぞと思って携帯シンク for Mac 5 を購入した♪BAUM 対応を謳ってはいないんだけど,どうやら Honey Bee 2 の設定でいけるらしいので,その設定を行った際のメモ.

○携帯シンク[電話帳]
1. メニューバー>携帯シンク[電話帳]>環境設定…をクリック.
2. 以下の項目を設定して,設定確認をクリック.
接続ケーブル:自動
携帯電話機種:WILLCOM HONEY BEE 2
暗証番号:●●●●(ケータイの設定にあわせてね.)

○iSync
1. 携帯シンクを起動.
2. メニューバー>携帯シンク>環境設定…をクリック.
3. 以下の項目を設定して,設定確認をクリック.
携帯電話機種:WILLCOM HONEY BEE 2
暗証番号:●●●●(ケータイの設定にあわせてね.)
4. メニューバー>アプリケーション>携帯シンク iSync 登録補助ツールをクリック.
5. USB mini-B ケーブル (WILLCOM) をクリック.
6. iSync が起動していたら終了させ,待ち受け画面を表示した BAUM と Mac を付属の USB ケーブルで接続.
7. BAUM の製造番号(ケータイの電池パックを外すとあるシールに記述されている.)を入力し,確認をクリック.
8. iSync のアイコンをクリックし,メニューバー>ファイル>情報を見るで“iSync”の情報を開き,32ビットモードで開くにチェックを入れる.(64ビットアプリケーションに携帯シンクが対応していないかららしい.)
9. iSync を起動し,メニューバー>デバイス>デバイスを追加…をクリック.
10. Honey Bee 2 (実際に接続されているケータイは BAUM だけどね.) が見つかって,アドレス帳を同期できるようになる.

iSync での同期が一番便利な気がする.iSync で同期される項目は次のとおり.(マニュアルの内容を参考にしている.)

○同期対象
・名前
・フリガナ
・電話番号
・メールアドレス
・住所
・誕生日
・メモ

○非同期対象
・グループ(ケータイのデータを保持.)
・血液型(ケータイのデータを保持.)
・趣味(ケータイのデータを保持.)
・メモリ番号(メモリ番号を再設定.)
・上記項目以外(初期値に設定.)

誕生日は,マニュアルではケータイのデータを保持だったが,実際には同期されていた.メモリ番号が変わるのは,メモリ番号によるショートカットを使ってる人には痛い仕様だと思う.

参考文献:
shigekix blog: BAUMとMacの電話帳連携

関連製品:
携帯シンク for Mac 5 FOMA 充電ケーブルセット
携帯シンク for Mac 5 au WIN専用充電ケーブルセット
携帯シンク for Mac 5 au 充電ケーブルセット
携帯シンク for Mac 5 PDC 充電ケーブルセット

2009年10月4日日曜日

MacBook (Late 2006) に Windows 7 RTM をインストール

MacBook (Late 2006) の Snow Leopard から Boot Camp を使って Windows 7 をインストールした.そのままでインストールできちゃったんだけど,ちょっとハマってしまったところもあったので,それについてメモっとこう.ちなみに使用した Windows 7 は,MSDN AA から取得した Windows 7 Professional 32bit なので,製品版と同じもののはず.

○Wireless Mighty Mouse の認識
そのままだと Bluetooth デバイスとして認識しなかった.写真とMacとiPhone: Windows 7 RCでWireless Mighty Mouseを使用によると.Bluetooth デバイス一覧に Wireless Mighty Mouse が出てきたら,右クリック(トラックパッドに2本指をおきながらクリックする.)してプロパティを選択し,HID準拠マウス(項目名があやふやだから間違ってるかもw)のチェックを入れる.これを設定すれば,普通に Bluetooth 接続のマウスとして使用できた.

○Wi-Fi の接続
AirMac Express と MacBook (Late 2006) の Atheros AR5006X の接続だったんだけど,無線モードが 802.11g のみだと接続できなかった.802.11b しか対応していないのかどーなのかよくわからないけど,AirMac Express の無線モードの設定を 802.11b/g 互換にすれば接続できた.

○Wireless Mighty Mouse のスリープ
10秒動かさないと,Wireless Mighty Mouse がスリープしてしまう.いちいちクリックしてから,マウスカーソルを動かすことになるので不便.対策できなかったので,だれか教えてください.

追記(2009年12月7日):
Wireless Mighty Mouse のスリープについて,ここに解決策が書いてあるとのコメントを貰った.僕は,SSD が壊れてから Windows 7 をインストールしてないので,動作を確認していないけど,もし困っている方がいれば試してみてね.

参考文献:
写真とMacとiPhone: Windows 7 RCでWireless Mighty Mouseを使用
La Loopa: Boot Camp 上の Windows 7 で Wireless Mighty Mouse を認識しない件について

2009年9月30日水曜日

MacBook (Late 2006) メモリ4GB増設(3GB認識)

MacBook (Late 2006) に BUFFALO の D2/N667-2GX2/E というメモリを増設した.Mac 対応を謳っていなかったけど,無事に2GBのメモリ2枚と認識している.だけど,実際には3GBのメモリとしての使用となる.(1GBは天使の取り分らしいw)

システムプロファイラで,2GBメモリ2枚が認識されていることが確認できる.アクティビティモニタで,3GBのメモリとして動作していることが確認できる.

VMware Fusion とか使ってると2GBじゃ微妙に足りなくなるからなぁ.最近の MacBook は,4GBをちゃんと認識するので4GB積むことをオススメする.MacBook (Late 2006) とか,3GB までしか使用できない場合は,財布とメモリ使用状況を天秤にかけてみよう.

関連製品:
BUFFALO D2/N667-2GX2/E

2009年9月28日月曜日

MacBook (Late 2006) Snow Leopard HDD vs. SSD

MacBook (Late 2006) に Snow Leopard をインストールするついでに SSD に換装したので,起動スピードの違いを調べてみた.Snow Leopard を標準インストールしたときの起動時間を動画に撮ってみた.

○実験環境
・MacBook (Late 2006)
Processor: 2 GHz Intel Core 2 Duo
Memory: 2 GB 667 MHz DDR2 SDRAM

・HDD
Fujitsu MHV2080BH

・SSD
Intel SSDSA2MH080G1C5

まず,HDD の場合.



だいたい,32秒くらい.

次に,SSD の場合.



だいたい,25秒くらい.

わかりきってたことだけど,体感できる速度差があるねw普通に使っていても,軽いなぁと思う.新しい Mac 買うより,MacBook なら SSD に換装した方が体感速度はよくなりそう♪