2009年6月22日月曜日

FreeBSD でサーバ構築 #12 メールの受信

林檎生活100: FreeBSD でサーバ構築 #11 メールコマンド mailの続き.今回は,メールを受信できるように設定しよう.

メールを受信するということは,どういう仕組みで動作しているのかを簡単に説明しよう.takuya__at__lucifer.legna.org(メールアドレスをボットに拾われるのが嫌なので,@ を __at__ で表記する.これってどのくらい効果があるんだろう?)というメールアドレスにメールを送信する場合,次のような手順で処理される.(厳密な手順ではないんだけど,だいたいあってるはずw)

1. lucifer.legna.org の MX レコードをネームサーバに問い合わせ,転送先メールサーバにメールを転送する.(MX の前はメールアドレスに置けるホスト名に対応し,MX の後はそのメールアドレスのメールを転送すべきサーバのホスト名に対応する.)
lucifer   MX 10 lucifer.legna.org.

2. メールサーバ (lucifer.legna.org) は,メールアドレスのホスト名 lucifer.legna.org のメールを受け取ることになっている場合受け取る.(MX レコードだけであれば,偽装が可能なのでサーバ側でもチェックする.)

3. メールアドレスのユーザ名 (takuya) を参照し,ユーザのメールボックスに配送する.

いろいろ細かいところを端折るとこんなかんじ.このことから,MX レコードを設定し,サーバへ接続できるようにポートを開放し,メールサーバがメールアドレスのホスト名が lucifer.legna.org であるメールを受け取るようにすればいい.

あと,忘れてはならないのがメールサーバを起動すること.正確には,メールサーバが 127.0.0.1 のインタフェースからしか接続を許可しない設定で起動するようになっているので,その限定を解除して起動させるということだ.

1. MX レコードの記述
lucifer   MX 10 lucifer.legna.org.

がネームサーバに記述されていることを確認する.記述されていなかったら記述する.

2. 受信ホスト名設定
Sendmail は,設定されているホスト名宛のメールを受信するので,それが設定されていれば設定は必要ない.もし設定されていなければ,rc.conf の hostname に設定するだけ.

3. Sendmail の起動
rc.conf に次の行を記述する.
sendmail_enable="YES"

FreeBSD を再起動するか,次のコマンドを入力する.
# /etc/rc.d/sendmail restart


4. ポート開放
SMTP は TCP 25番ポートなので,グローバル IP 25番への接続をサーバのプライベート IP 25番への接続に変換する.ネームサーバの設定でやったのと同じ.


ここまで設定したら,それぞれの項目の設定が正しいかチェックしよう.

1. MX レコードの記述
次のコマンドを入力する.
$ nslookup -type=mx lucifer.legna.org

出力にこのような行があれば OK.
lucifer.legna.org mail exchanger = 10 lucifer.legna.org.


2. 受信ホスト名設定
次のコマンドを入力する.
$ hostname

出力にこのような行があれば OK.
lucifer.legna.org


3. Sendmail の起動
次のコマンドを入力する.
# /etc/rc.d/sendmail status

出力にこのような行があれば OK.
sendmail is running as pid 710.


4. ポート開放
次のページに,ホスト名 (lucifer.legna.org) とポート番号 (25) を入力し,ポートチェックをクリック.
CMAN: ポートチェック

ここまでチェックが完了したら,Gmail などからメールを送ってみよう.そうするとユーザのメールボックスにメールが届くはずだ.全解説明した mail コマンドで確認してほしい.

今回はここまで.Sendmail の設定といっても,Sendmail はデフォルトのままでネームサーバの設定などだけだったけどねwほとんどデフォルトでもメールって動くんだなぁと僕も感心してしまった.次回は.takuya__at__lucifer.legna.org ではなく,よくある takuya__at__legna.org というドメイン名だけのメールを受信できるように設定する.

参考文献:
sendmail 第3版〈VOLUME1〉運用編
sendmail 第3版〈VOLUME2〉設定編
sendmailクックブック―設定と運用のためのレシピ集

2009年6月21日日曜日

FreeBSD でサーバ構築 #11 メールコマンド mail

林檎生活100: FreeBSD でサーバ構築 #10 ポートマッピングとゾーン転送の続き.今回からは,Sendmail 編に入るんだけど,今回は Sendmail の話はせずにメールコマンドについて話したいと思う.メールコマンドはメールの送受信の確認のために使うからね.ちなみに,ここまで書くのに1年かかってるwwwApache 編を書き終えるまでに何年かかるんだろうwまあ,そんなに廃れない知識だと思うので,無駄にはならないはずだけどね.

ではさっそくメールを送ってみたいと思う.実は,FreeBSD をインストールしただけで,デフォルトのメールサーバである Sendmail は機能を限定して動作している.なので,ローカルのユーザ間でのメール送受信はもちろんできるし,インターネットへの接続がきちんと設定されていれば,外部のメールアドレスへのメール送信ができてしまうのだ.外部のメールアドレスへメール送信ができるのがなぜかについては,Sendmail の設定をするあたりで説明をしようと思うので,今回は送信できるんだなぁと思っておいてもらえれば OK.

では,適当なメールアドレスにメールを送る.次のようにコマンドを入力する.
$ mail  メールアドレス

そうすると,このような画面になると思う.


件名を入力して,Enter を押す.


次に本分を入力して,行頭で ctrl+D を入力することで送信される.EOT と出力されると思うが,それは End Of Transmission(転送終了)の意味なのだ.


僕は Gmail のアドレスに送付してみた.メールサーバによっては,スパムとしてはじかれる可能性があるので,届かない場合はメールアドレスを変えて試してほしい.(それでも届かない場合は,プロバイダ側で SMTP で使用する 25 番ポートを塞いでいる可能性がある.このことについては,参考文献を参照のこと.)

次に,自分自身にメールを送ってみる.これは,ローカルで動作している Sendmail を経由して,自分のメールボックスにメールを送るということだ.このような感じで送ってみる.(メールアドレスは,ユーザ名だけでも,ユーザ名@localhost でも,ユーザ名@自ホスト名でもいい.)


これで,自分宛にメールが送信されたはずだ.では,メールが届いてるかチェックしてみよう.ここからが,ちょっと癖のある mail コマンドの操作になるのでついてきてほしい.まず,引数なしで,mail とだけ打って実行しよう.
$ mail

そうすると,こんな画面になるはずだ.


1行目にバージョン情報など(1993年6月6日のバージョン!)が表示され,2行目に /var/mail/takuya にメッセージが1通あり,そのうち1通が新着ということが表示されている.3行目からは,メールボックスに入っているメール一覧が表示される.それが終わったあとに,mail プログラム用のコマンド入力を受け付ける状態になる.メールを見るために enter を押してみよう.


このように新着メールの内容が表示されたはずだ.何も入力せずに enter を入力すると,1番上の新着メールを表示することになる.新着メールが2通以上あるときは,enter を押していくだけで,上から順にメールを参照することができる.さて,h と入力してみよう.


このような画面になったはずだ.起動時に表示されたメール一覧が表示される.メールの先頭にあった N マーク,つまり新着を表す印がなくなっていることには注目してほしい.この状態で enter を押しても,そのメールを参照することはできない.もう1回そのメールを見たいときには,メールの先頭についている番号を入力する必要がある.1 と入力してみよう.


さっきと同じような画面が出力されたはずだ.こうやってメールを参照すればいい.より詳細なメールの情報がほしくて,メールヘッダを表示したいときには,P 1 と入力する.


そうすると,このようにメールヘッダの情報をすべて表示してくれる.終了させるときは,q を入力すればいい.


mbox にメッセージ1通を保存しましたと出力されることに注意してほしい.読んだメールは,システムのメールボックスから,ホームディレクトリにあるメールボックス (~/mbox) に保存されるようになっているのだ.なので,mail をもう1回実行してみてほしい.


そうすると,このようなメッセージが出力されて,保存したメールを見ることができない.こうなるのは,メールボックスからホームディレクトリの mbox にメールが移動したからだ.郵便局 (/var/mail/takuya) にあったメールが,自宅に転送されて読み終わったので,自宅のメールボックス (~/mbox) に保存したというように考えてもらうといいと思う.自宅のメールボックスのメールを見るためには,mail コマンドを次のように実行する.
$ mail -f ~/mbox

そうすると,このようなさっき見た画面を見ることができるはずだ.


こんなかんじで,mail コマンドの使い方を説明した.これから Sendmail の設定をやっていく上で,たぶん役に立つはずだwもっとちゃんと mail コマンドを使ってみたいという人は,参考文献にあげた mail コマンドの man の日本語翻訳を参考にしてほしい.次回は,Sendmail を設定して,今回 FreeBSD から送信した外部のメールアドレスから逆にメールを送信し,FreeBSD でメールを受信できるようにしたいと思う.たぶん,mail コマンドより理解しやすいと思うのでお楽しみにwww

参考文献:
FreeBSD 日本語マニュアル検索: On-line Manual of "mail"
Wikipedia: Outbound Port 25 Blocking

追記(2009年7月2日):
メールを保存するコマンド.
& s メール番号 ファイル名

2009年6月20日土曜日

メールの仕組み

メールの仕組みということで,メールがどうやって送受信されているのかについて説明する.

PC でメールを使用したことがある人は,メールクライアント(Mac OS X の Mail や Thuderbird など.)に SMTP (Simple Mail Transfer Protocol) サーバと POP (Post Office Protocol) サーバか IMAP (Internet Message Access Protocol) サーバを設定したことがあると思う.それらが正しく設定されていれば,メールは無事に使えるようになったんじゃないかな.こうやって設定した項目が,メールの仕組みを実現する上でどのように動作しているのかを説明していく.

まず,メールのもっとも根幹を担っている SMTP について.Simple Mail Transfer Protocol の名前のとおり,単純にメールを転送するプロトコルだ.太郎 (taro@aaa.com) が花子 (hanako@bbb.com) にメールを送る場合,この図のような流れになる.


1. メール転送
太郎がメールを送ると太郎のメールクライアントは,設定されている太郎のメールサーバ (mail.aaa.com) に花子宛のメールを転送していいか確認し,OK であればメールを転送する.

2. 転送先を調べる
太郎のメールサーバは,花子宛のメールを転送するサーバを調べる必要がある.それは,メールアドレスのドメイン部分(bbb.com) について,ネームサーバの MX レコードを対象として問い合わせることで実現する.この問い合わせによって,花子宛のメールは,花子のメールサーバ (mail.bbb.com) に転送すればいいことがわかる.

3. メール転送
太郎のメールサーバは,花子のメールサーバに花子宛のメールを転送していいか確認し,OK であればメールを転送する.花子のメールサーバは,花子宛のメールを保存するメールボックスがローカルにあるので,そのメールボックスに配送する.

というような流れ.1と3で行っていることが同じってことがわかるかな.メールサーバにこのメール受け取って処理くれる?って聞いて,OK ならメールを転送しているだけ.あとは,メールサーバが別のメールサーバに転送するなり,ローカルのメールボックスに配送するなりを選択しているのだ.2は別のメールサーバに転送するときに転送先サーバを決める重要な作業で,転送先はネームサーバの MX レコードによって決まる.

さて,お気づきのことと思うけど,花子のメールサーバと花子の間に矢印がない.そう,SMTP がサポートするのはここまでなのだ.メールサーバが動いてるサーバのメールボックスまではメールが届くけど,そのメールボックスのメールを普通のユーザは見ることができない.(逆に言えば,PC 上でメールサーバが動いているという稀有な人は,SMTP だけでメールの送受信ができるんだけどね.)

それで登場するのが,POP と IMAP なのだ.


POP はメールサーバのメールボックスからメールを取得するプロトコルで,IMAP はメールサーバのメールボックスを操作するプロトコル.POP はメールをダウンロードして持ってくるだけだから,複数の PC でメールを管理するのには向かない.IMAP はサーバ上にあるメールを参照したり操作したりするから,複数の PC でメールを管理するのには向いている.だけど,サーバに接続しないとメールが見れないので,常時接続じゃないと辛い.というかんじで,それぞれ特徴がある.

今回は,すごく簡単にメールの仕組みを説明した.より具体的な仕組みについては,メールサーバを構築する課程で説明していく予定.まあ,だんだんとわかるようになると思うよ.

参考文献:
sendmail 第3版〈VOLUME1〉運用編

2009年6月19日金曜日

MacBook の DVD ドライブ (UJ-857D) をリージョンフリーにする方法

Top Gear にはまって,リスニングもできないのに Top Gear の DVD を買ってしまったwww買ったのはいいんだけど,リージョンのことをすっかり忘れていたので,今回のエントリのようなことになった.

リージョンフリーってグレーなのかなぁと思ってたけど,法律的には問題なしみたいだね.ただ,保証とかそこらへんがなくなりそうだなぁ…….ちゃんと確認してはいないけど.とりあえず,うちの MacBook (Late 2006) の DVD-RW ドライブ (MATSUSHITA DVD-R UJ-857D) をリージョンフリーにしてみたので,その方法を書いとく.

※この方法を実行して何か不利益を被ったとしても一切保証はしません.

1. Mac OS X Tiger から起動する.
ファームウェアの書き込みツールが Tiger じゃないと動かないため.僕は,外付けドライブに Tiger をインストールして作業した.

2. ファームウェアのリビジョンを調べる.
システムプロファイラを起動して,ディスク作成の項目からファームウェアのリビジョンを調べられる.


3. リージョンフリーにするファームウェアをダウンロードする.
次のページの下の方にある表になっているところを参照し,使用している Mac の名前とドライブ名とファームウェアのリビジョンを確認して,対象となるファームウェアをダウンロードする.デフォルト版とリージョンフリー版が別れているが,結局リンク先のファイルは同じで,両方のバージョンのファームウェアが入っているので,片方をダウンロードすれば問題ない.

MacBook-fr: Region Free

4. ダウンロードしたファイルを解凍する.


5. リージョンフリー版(この場合は Update KBVB to region free の方.)ファームウェアアップデータを実行する.


6. 再起動する.


7. 普段の環境(Mac OS X Leopard な環境だな.)に戻り,Region X というツールでリージョンを変更して DVD を鑑賞する.

というかんじ.Max OS X Tiger の環境が懐かしく感じるなぁ.本当にリージョンフリー化されてるのって人は,DVD Info X というソフトウェアでチェックしてみるといいよ.標準版のファームウェアにも戻せるので,戻したくなったらそれで戻せばいいはずだ.

参考文献:
MacBook-fr: Region Free
xvi's site

関連製品:
Top Gear: Complete Season 10

2009年6月18日木曜日

FreeBSD でサーバ構築 #5.5 アップデートの自動化

林檎生活100: FreeBSD でサーバ構築 #5林檎生活100: FreeBSD でサーバ構築 #6の間あたりのネタだな.絶対に設定するべきってわけじゃないから,あまり気にしなくてもいいエントリだw

今回は,freebsd-update を自動実行してアップデートがあることを通知するようにすることと,portsnap を自動実行して最新の Ports コレクションをダウンロードしておくことと,portaudit を自動実行して Ports のセキュリティ問題を定期的に調査するようにすることについて.これは,cron というユーティリティで,指定時刻に定期実行させるように設定することで実現する.

まずは,freebsd-update で,FreeBSD 本体のセキュリティアップデートを自動取得するように設定する./etc/crontab の末尾に次の行を追加して,毎日実行するように設定する.
#
# Check update and download freebsd security patches.
@daily root freebsd-update cron

セキュリティアップデートがあると,root 宛にメールが届くようになっているので,そのメールが届いたら早めにセキュリティアップデートを実行しよう.root 宛のメールを見る方法や別のアドレスに転送する方法は,メールサーバの構築のときに説明する.

つぎに,portsnap も自動実行するように設定する.freebsd-update と同様に,/etc/crontab の末尾に次の行を追加する.
#
# Download a compressed snapshot of the Ports Collection.
@daily root portsnap cron

これについては,とくに通知は届かない.(毎日なんらかの Ports はアップデートされてるからね.)新しく Ports をインストールする前に,portsnap update を実行するだけで最新の Ports ツリーにできるところが魅力なわけだ.

最後に,portaudit も自動実行するように設定する.とは言っても,Ports から portaudit をインストールするだけで,自動実行の設定がされる.(/usr/etc/periodic/security/410.portaudit によって実行される.)そして,毎日実行されて届く lucifer.legna.org security run output という件名のメールの中に,portaudit の実行結果が記述されるようになる.Ports の更新も含めたインストール方法はこんな感じ.
# portsnap fetch
# portsnap extract(以前にこのコマンドを実行したことがあるのであれば,portsnap update で OK.)
# cd /usr/ports/ports-mgmt/portaudit
# make install clean

ついでに,Ports をアップデートするツール portupgrade をインストールしておこう.これを使って,脆弱性がみつかった Ports をアップデートしよう.
# cd /usr/ports/ports-mgmt/portupgrade
# make install clean

使い方はこんなかんじ.(Ports インストール直後は,実行ファイルへのパスが更新されていないので,rehash コマンドを打ってから実行すること.)

○すべてのインストール済み Ports をアップグレード
# portupgrade -a

○すべてのインストール済み Ports それぞれについてアップグレードするか訪ねる
# portupgrade -ai

○指定した Port をアップグレード
# portupgrade ポート名

○指定した Port とその Port を必要としている Port をアップグレード
# portupgrade -r ポート名

○指定した Port とその Port が必要としている Port をアップグレード
# portupgrade -R ポート名


参考文献:
FreeBSD Handbook: FreeBSD Update
FreeBSD Handbook: Using the Ports Collection
FreeBSD Handbook: Monitoring Third Party Security Issues
ttt: (FREEBSD) PORTAUDITでPORTSのセキュリティチェック

2009年6月17日水曜日

freebsd-update で FreeBSD をアップグレード

FreeBSD 7.0-RELEASE がいつの間にかセキュリティアップサポートから外れていたようなので,freebsd-update コマンドを使って FreeBSD 7.1-RELEASE にアップグレードしてみた.打ったコマンドはこんなかんじ./var/db/freebsd-update がデフォルトのワーキングディレクトリなのだが容量不足だった.なので /usr/freebsd-update というディレクトリをつくり,そこをワーキングディレクトリとした.コマンドの -d オプションはそのため.
# freebsd-update -d /usr/freebsd-update -r 7.1-RELEASE upgrade
(何回かでる質問に y と答える.)
# freebsd-update -d /usr/freebsd-update install
# shutdown -r now
# freebsd-update -d /usr/freebsd-update install

楽になったもんだなぁ.大変だった頃が懐かしくなる.

参考文献:
FreeBSD Security Information
FreeBSD Handbook: FreeBSD Update

2009年6月16日火曜日

FreeBSD でサーバ構築 #10 ポートマッピングとゾーン転送

林檎生活100: FreeBSD でサーバ構築 #9 BIND の設定 の続き.AirMac Express のポートマッピングの話とゾーン転送がされているかの確認,そして,インターリンク(僕が使っているプロバイダ.)の逆引き設定について書いていく.今回で,BIND に関わる話は最後だね.

まず,AirMac Express のポートマッピングについて.DNS は,UDP の53番ポートを問い合わせに,TCP の53番ポートをゾーン転送に使う.なので,AirMac Express のポートマッピングの設定を次のように変更することで,問い合わせパケットとゾーン転送パケットがサーバ (192.168.1.254) に届くようになる.AirMac Express に必要な設定はこれだけだ.ほかのルータなどもこのような設定項目があるはずなので,そこで設定してほしい.



設定の確認は,WAN 側から次のようなコマンドを打つことで確認できる.(友人などにやってもらうといいかもね.)
$ nslookup lucifer.legna.org 203.152.220.151

これは,WAN 側からホスト名 lucifer.legna.org を構築したネームサーバで名前解決できるかを調べている.LAN 側からは名前解決できているはずなので,ポートマッピングが正常であれば,WAN 側からも名前解決できるはずであるからね.WAN 側から nslookup をしてくれる Web サービスを使う手もあるけど,ネームサーバを指定できないので問題があった場合に原因を特定しにくいんだよね.

次は,ゾーン転送について.これは,待ちましょうwEveryDNS.net の場合は,1時間に1回ゾーン転送を試行してくれるので,それを待つしかない.ポートを空けて1時間待ってみて,次のコマンドを打ってみよう.
$ nslookup lucifer.legna.org ns1.everydns.net

これで名前解決できていれば OK.できていなかったら,/var/log/messages に次のような行がないか見てほしい.
Jun 15 12:39:45 lucifer named[1330]: client 71.6.202.218#51272: zone transfer 'legna.org/AXFR/IN' denied

71.6.202.218 からゾーン転送の要求がきたが,要求に応じなかったことを表している.これがある場合は,allow-transfer サブステートメントに 71.6.202.218 が設定されているか確認しよう.(allow-transfer サブステートメントを設定していない場合は,この行が表示されることはないはず.)もちろん,71.6.202.218 が信頼できるスレーブであること(この場合は,EveryDNS.net のサーバであること.)が前提だけどね.

最後に,逆引き設定について.これは,インターリンクが提供しているサービスを使用する場合の話なので,すべての固定グローバル IP を取得可能なプロバイダで設定できるわけではないんだけどね.設定画面はこんなかんじ.ここで設定することで,IP アドレスからホスト名を参照することができるようになるよ.


本来,ネームサーバを設定する際には,今回設定したようなホスト名から IP アドレスを求める正引きと言われる名前解決と,IP アドレスからホスト名を求める逆引きと言われる名前解決を設定する必要がある.しかし,固定グローバル IP を1つだけ割り当てて貰っているような場合は,その逆引きゾーンの権限が委譲されないので,自前のネームサーバでグローバル向けの逆引き設定をすることにほとんど意味はない.ひとつのサーバで,正引きと逆引きが対応するように設定すべきだと思うが,固定グローバル IP を1つだけ割り当ててもらっているような環境では,逆引きを設定しないか,逆引きをプロバイダ側に持ってもらうかというちぐはぐな状態になってしまう.

さて,次回はメールサーバ立ち上げのために,Sendmail の説明に入っていく♪Postfix が流行ってる中で,FreeBSD デフォルトの Sendmail で行くぞ☆

参考文献:
Craig Small's Home Page: NSlookup