電子メール 基礎事項

原作: &a.wlloyd;.

訳: &a.mihoko;9 December 1996.

電子メール, というとその概念は簡単そうに聞こえますが, 電子メールは 非常に複雑な仕組みになっています. 1台のマシン上で電子メールシステムを 単純にセットアップする以上のことをしたい場合には, sendmail についての 本を買って参照してください. 序章

電子メール交換の主要なプログラムや構成要素を, 次に示します. ユーザプログラム

これは, sendmail を呼び出すか, メールホストに対して TCP 上 の通信を使ってメールを配送するかのいずれかによっておこないます. 転送エージェント - Sendmail

通常, このプログラムはバックグラウンドで実行されている /etc/sysconfig ファイルを編集します. 特別な理由(防火壁-Firewall 上などの 場合)がないかぎり, そのまま, 実行する設定にしておくべきです.

sendmail は安全なサイト上であっても潜在的にセキュリティ上の 弱点になることを覚えておいてください. sendmail のいくつかのバージョンでは, セキュリティ上の問題が 知られています.

sendmail は, 送信先へのメールを受け取る実際の ホストを決定するために, DNS を参照します.

sendmail はローカルキューからメッセージを取り出し, 受け取る コンピュータ上の sendmail へインターネットを介して配送します.

また, sendmail はその逆をおこなうこともできます. つまり, メッセージを受け取って, ローカルマシン上に メッセージを保管します. POP サーバ

このプログラムはメールボックスからメールを取り出し, ブラウザにメールを渡します. POP サーバをあなたのマシン上で 動かしたい場合には, 次の二つの作業をする必要があります. ports やパッケージから pop ソフトウェアを入手する. POP サーバをロードするように, /etc/inetd.conf ファイルを編集する. 入手した pop プログラムには, 説明文が入っていますので, それを読んで ください. コンフィグレーション

あなたのマシンに FreeBSD を普通にインストールすれば, それだけで他の ホストへ電子メールを送ることができるようになります. 問題は, あなたのホストに戻ってくるようなメールがないことです. メッセージを送るたびに自動返信アドレスを手 で編集することを厭わないならば, これは問題にはなりません.

同じユーザ名を使用して, 電子メールを他のホストで受け取ることができる ようにするのは, 比較的簡単です. この場合は, POP または telnet 経由で電子メールを受け取ることができます. 「同じユーザ名」のユーザアカウントが, 両方のマシンに存在しなければな りません. 必要ならば, アカウントを作成するために /nonexistant に設定すると, ユーザはログインできなくなります. 使用する予定のメールホストは, あなたのホスト上でメール交換が できるように設定されていなければなりません. これは, DNS (すなわち BIND や named) の設定が必要です.詳細は, ネットワークの本を参照してください. 基本的には, 以下の行を DNS サーバに追加する必要があります. myhost.smalliap.com A xxx.xxx.xxx.xxx ; Your ip MX 10 smtp.smalliap.com ; your mailhost 自前で DNS サーバを走らせているのでなければ, この作業は, 自分では おこなえません. 自分で DNS サーバを走らせたくなければ, インターネットプロバイダ等に依頼して, 作業をおこなってもらってください. この作業により, あなたのホスト宛のメールは, MX (メールエクスチェンジャ) ホストに送られるようになります. A レコードがどのマシンを指しているかどいうことには関係なく, メールは MX ホストに送られます.

この機能は, 仮想ホストを実装するために使用されています.

わたしは foo.bar というドメインを持つ顧客がいます. わたしは foo.bar 宛のメールをすべて, わたしのマシン smtp.amalliap.com に送りたいと思っています. このような場合, あなたの DNS サーバ上で, 以下のようなエントリを作成 しなければなりません: foo.bar MX 10 smtp.smalliap.com ; your mailhost そのドメインに対して電子メールを送りたいだけなら, A レコードは必要ありません. メールボックスに最終的に配送するためにメールを実際に受けている メールホスト上では, sendmail がどのホストに対してのメールを受け付けて いるかを知らせなければなりません.

そのためには, (FEATURE(use_cw_file) を使用している場合) /etc/sendmail.cw ファイルに myhost.smalliap.com を追加してください. または, /etc/sendmail.cf ファイルに, "Cw myhost.smalliap.com" の行を 追加してください.

あなたのホスト上で実際にメールを受信するためには, あなたのホストを指すように変更された MX エントリがなければいけません. また, Cw 行をあなたのマシン上の sendmail.cf に記述しなけれ ばなりません.

あなたがインターネットに対して永久に接続するのでなければ, これは悪い 考えです. メールは戻ってきてしまうでしょう.

もしあなたが本気で よくある質問 (FAQ) どうして わたしのサイト上にいるホストに対して完全な形のドメイン名 (FQDN) を使わなければいけないの?

おそらく, そのホストは実際には違うドメインに属しているのでしょう. 例えば, もしあなたが foo.bar.edu ドメインにいて, bar.edu ドメインの中の「mumble」というホストに接続したいと します. その場合あなたは, 「mumble」ではなく 「mumble.bar.edu」という 完全な形のドメイン名 (FQDN) によっ てそのホストを参照しなければなりません.

伝統的に, これは BSD BIND リゾルバでは許されていました. しかしながら, FreeBSD に載っている現在の BIND の バージョンでは, あなたが属しているドメイン以外では, 完全な形でないドメイン名に対するデフォルトの省略形は 使用されていません. 適切でないホスト名 mumble は, mumble.foo.bar.edu としても解決されるべきです. そうしないと, ルートドメインに 検索をしにいってしまいます.

これは, mumble.bar.edumumble.edu を 経由して検索し続けるような過去の習慣とは異なります. なぜこれが悪い慣例, さらにはセキュリティーホールと考えられ るようになった理由については, RFC1535 を参照してください.

この問題を回避するには,

search foo.bar.edu bar.edu

という行を

domain foo.bar.edu に置き換えます.

これをあなたのマシン上の /etc/resolv.conf ファイルに 記述してください. しかしながら, 検索順序は, RFC 1535 に 書かれている, 「ローカル管理と公共の管理の間の境界線」 を越えないことを, あらかじめ確認してください. Sendmail が ``mail loops back to myself'' という エラーを出します

これについては, sendmail FAQ の中で, 次のように答えられて います:- * 次のような 「Local configuration error」というメッセージ が出ます: 553 relay.domain.net config error: mail loops back to myself 554 ... Local configuration error この問題をどうやって解決すればよいでしょうか? MX レコードを使って, あるドメイン(例: domain.net)宛にメー ルを特定のホスト(この場合, relay.domain.net)に転送しようと設定したと します. ただし中継ホストは, 自身を domain.net とは認識していません. (FEATURE(use_cs_file) を使用している場合は) /etc/sendmail.cw に, domain.net を追加してください. または, 「Cw domain.net」を /etc/sendmail.cf に追加してく ださい.

sendmail FAQ は, /usr/src/usr.sbin/sendmail にあ ります. 「ひとひねりした」メール設定 をしたいと思っているなら, FAQ を読むことをおすすめします. UUPC を使ってメール配送をおこなうにはどうしたらいい?

FreeBSD に載っている sendmail のコンフィグレーションは, 直接インターネット接続しているサイトに合うように作られてい ます. メールを UUCP 経由で交換するようにしたい場合には, 別の sendmail コンフィグレーションファイルをインストールし なければなりません.

/etc/sendmail.cf を手動で作成することは, 純正主義者 がおこなうことだと考えられています. sendmail のバージョン 8 では, m4 プリプロセッサを使用して, コンフィグレーションファイルを生成する方法が取られています. この場合, 実際に手動で作成したコンフィグレーションは, 実際のコンフィグレーションより簡潔です. 以下の場所にあるコンフィギュレーションファイルを使用してく ださい. /usr/src/usr.sbin/sendmail/cf システム上にすべてのソースをインストールして いない場合, sendmail の設定スタッフは, ソースを tar でまとめてさらにそれを分割してある配布物を, 展開しなければ なりません. CD-ROM をマウントしてあれば, 以下のようにします. cd /usr/src tar -xvzf /cdrom/dists/src/ssmailcf.aa 驚かないでください. これはたった数百キロバイトのサイズのファ イルです. cf ディレクトリ上にある README ファイル には, m4 コンフィギュレーションの基本的な紹介が書かれてい ます.

UUCP での配送には, mailertable 機能を使用すること をおすすめします. これは sendamil が配送経路を決定するのに 使用するデータベースファイルです.

まずはじめに, .mc ファイルを作成します. /usr/src/usr.sbin/snemdail/cf/cf ディレクトリに これらのファイルを置きます. ここには既にいくつかの例が 置いてあるので, 見てください. foo.mc という名前で作成したと仮定すると, それを有効な sendmail.cf に変換するためには, 次のようにします: cd /usr/src/usr.sbin/sendmail/cf/cf make foo.cf cp foo.cf /etc/sendmail.cf 典型的な .mc ファイルは次のような内容です: include(`../m4/cf.m4') VERSIONID(`Your version number') OSTYPE(bsd4.4) FEATURE(nodns) FEATURE(nocanonify) FEATURE(mailertable) define(`UUCP_RELAY', your.uucp.relay) define(`UUCP_MAX_SIZE', 200000) MAILER(local) MAILER(smtp) MAILER(uucp) Cw your.alias.host.name Cw youruucpnodename.UUCP nodnsnocanonify は, メール配送をおこなう 際に, DNS を参照しないようにするための設定です. UUCP_RELAY は, 必要な設定ですが, ここでは理由を 説明できません. その理由について, ここでは質問しないでください. .UUCP 仮想ドメインアドレスを扱うことができるインターネット ホスト名を書いてください. おそらく, 使用する ISP のメール中継ホスト名をそこに入力する ことになります.

この設定が終了したら, /etc/mailertable と呼ばれる ファイルが必要になります. このファイルの典型的な例を示します: # # makemap hash /etc/mailertable.db < /etc/mailertable # horus.interface-business.de uucp-dom:horus .interface-business.de uucp-dom:if-bus interface-business.de uucp-dom:if-bus .heep.sax.de smtp8:%1 horus.UUCP uucp-dom:horus if-bus.UUCP uucp-dom:if-bus . uucp-dom:sax 見て分かるように, これは実際に使用されているファイルの一部 です. はじめの三行は, ドメインアドレスが指定されたメールが デフォルトルートに送信せずに, 配送パスを「短縮」して, 隣接 UUCP サイトにメールを送るための設定です. 次の行は, メールを SMTP を使用して配送されているローカル・ イーサネット・ドメイン上のマシンに送信するための設定です. 最後に, UUCP 接続されているドメインが, .UUCP という仮想ド メイン表記されている場合です. これは, 「uucp-neighbor!recipient」をデフォルト規則で書換えるため です. 最終行は必ず シングルドット (.) を指定します. 上記のどのパターンにも当てはまらない送信先に対して, あなた のメールの世界中へのゲートウェイとして動作してくれる隣接 UUCP サイトに, UUCP を使って配送します. uucp-dom: というキーワードの後に書かれたすべての ノード名は, 隣接 UUCP サイトでなければなりません. そのサイトと UUCP 接続を行っているかどうかは, コマンド uuname を使用して確かめることができます.

実際に使用するには, このファイルを DBM データベースファイ ルに変換する必要があることを忘れないでください. これを実行するためのコマンド 行は, mailertable の先頭にコメントとして記述されています. 通常, このコマンドは, mailertable を変更するたびに実行しな ければなりません.

最終ヒント: もしいくつかの特定のメール経路が正しく動作する かどうかが心配ならば, sendmail の -bt オプション を覚えておいてください. このオプションは sendmail を アドレステストモード で起動します. メールの経路をテストするには, 0 のあとにメール経路をテスト したいアドレスを入力してください. 最後の行にあなたが使用する インターネットメールエージェント (メール中継プログラム) と, このエージェントに呼び出される宛先のホスト名と, (翻訳可能な場合) アドレスがが表示されます. このモードを 終了するには, Control-D を入力します. j@uriah 191% sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter

> 0 foo@interface-business.de rewrite: ruleset 0 input: foo @ interface-business . de ... rewrite: ruleset 0 returns: $# uucp-dom $@ if-bus $: foo \ < @ interface-business . de > > ^D j@uriah 192% ダイアルアップ PPP ホストで電子メールを使うにはどうしたらいい?

LAN 上にある FreeBSD マシンを, インターネットに接続したいと します. FreeBSD マシンは, その LAN でのメールゲートウェイになります. FreeBSD マシンは専用線接続ではありません (訳注:ダイアルアップ接続など). これには, 少なくとも二つの方法があります. 一つは UUCP を使うことです. このとき鍵になるのは, あなたのドメインに対するセカンダリ MX サービス を提供してくれるインターネットサイトをみつけることです. 例: bigco.com. MX 10 bigco.com. MX 20 smalliap.com. 最終的なメール受信先としては, 一つのホストだけが定義されるべきです (bigco.com 上の /etc/sendmail.cf ファイルに, 「Cw bigco.com」 を追加します). 送信側の sendmail が, メールを配送しようとしている時, モデムの接続を 介してあなたのところに接続しようとします. 大抵の場合, あなたのマシンがオンラインでないために, 接続はタイムアウト してしまうでしょう. sendmail は自動的に, メールをセカンダリの MX サイト に (あなたのインターネットプロバイダ) に配送します. セカンダリ MX サイトは, (/etc/sysconfig ファイル に sendmail_flag = "-bd -q15m"と書かれている場合) 15 分ごとに, プライマリ MX サイトにメールを配送しようと, あなたのホストに接続しに いきます. ログインスクリプトとして, このようなものを使うと良いでしょう. #!/bin/sh # Put me in /usr/local/bin/pppbigco ( sleep 60 ; /usr/sbin/sendmail -q ) & /usr/sbin/ppp -direct pppbigco ユーザごとにログインスクリプトを作りたい場合には, 上記 のスクリプトの代わりに, sendmail -qRbigco.com を使用する こともできます. このようにすると, キューの中の bigco.com に対する すべてのメールは, すぐに強制的に処理されます. さらに, 次のような改良もできます. 以下は, freebsd-isp メイリングリストから抜粋してきたメッセージです. > 私たちはお客様に対して, セカンダリ MX を提供しています. お客様は一日 > に何回か私たちのサービスに接続し, メールを彼らのプライマリ MX に > 受け取ります (彼らのドメインに対するメールが到着した時には, 私たちは > 彼らのサイトを呼び出しません). > 私たちの sendmail は, 30 分ごとにメールキューに溜っているメールを > 配送します. ちょうどその時に, すべてのメールがプライマリ MX に送られ > たかどうかを確かめるためには, 彼らは 30 分は オンラインでいなけれ > ばなりません. > > すべてのメールを今すぐ送るために sendmail を初期化するコマンドはあ > るでしょうか?もちろん私たちのマシン上には, ユーザはルート (root) 権限 > を持っていません. sendmail.cf の 「privacy flags」 セクションに, 「Opgoaway,restrictqrun」の定義があります. root 以外のユーザがキューを処理できるようにするには, restrictqrun を削除してください. また, MX を再調整が必要かも知れません. あなたがたは, 顧客のサイトに対する一番優先度の高い MX なので, 次のように定義します: # If we are the best MX for a host, try directly instead of generating # local config error. OwTrue このようにすると, リモートサイトからのメールが, 顧客のマシンと接続し ようとせず, 直接あなたがたのホストマシンに配送されるようになります. ホストマシンに配送されたメールは, 続いて顧客のマシンに送られます. これはホスト名にのみ有効なので, 顧客のメイルマシンに, 「host.customer.com」とは別に, 「customer.com」も定義する必要があり ます. DNS 上で, 「customer.com」に対する A レコードを定義してください.