いままで, 私は自分宛のメールが来たら, 学校のマシンに rlogin して mule (mew) を立ち上げて読んでいた。 ssh を使っているので, ネット上をパスワードが流れて危険という問題はない。 (ssh について詳しくは, ssh-FAQ などを見て欲しい)。 これで不便というわけではなかったが, リプライメールを書いたりする時に, さすがに電話回線越しだと反応が遅くてちょっとストレスが溜る。 当然ながら, こっちのマシン側に一旦メールを持ってきてから読んだり, 返事を書いた方が便利に決まっている。
ということで, 「1. こっちにメールをとってくる」 「2. こっちから出したメールを適切なところに送り出す」 ということを実現することを目標に, メールの設定を行なう。
まず, メール(POP)サーバ側で, pop の設定を行なう。もっとも, 普通の ISP や大学の情報教育センターとかだったら, こういう設定はすでにやってあるので, 何もしなくていいはずである。 そういう人は, 次の段落は読みとばしてもらって結構である。
具体的には, port 110 に接続してきた時に, pop daemon (qpopper) が立ち上がるように設定する。 おっと, この話は僕の使っているメールサーバである linux の場合であるが, 多分どの OS でもほとんど同じだろう。 まずプロトコルを登録する。/etc/services のてきとーな場所に
pop3 110/tcp # POP version 3 pop3 110/udpなどという記述を加える。もともとあれば何もしなくていい。 つづいて, プロトコル pop3 を受け持つデーモンとして qpopper を登録する。 /etc/inetd.conf に
pop3 stream tcp nowait root /usr/sbin/tcpd qpopperなどという記述を加える。おっと, Slackware(3.1以上)では, tcpwrapper (tcpd) がデフォルトでインストールされるので, このような設定になっているが, そうでないマシンだったら,
pop3 stream tcp nowait root qpopperなんてふうになる。
こういう設定ができたら, 後は普通のメーラで pop3 を使う設定をしてやれば, メールがとってこれるはずである。 UNIX だったら fetchmail とか netscape mail やら, MH の pop とか。 Windows だったら, AL-Mail とか 電信8号とか, これまたいろいろ。
ppp 接続すると同時に自分のメールサーバに問い合わせて, メールをとってくるという設定も可能だが, めんどくさいのでやめ。 やりたい人はやって下さい。といことにしておく。
1 だと, ほとんど何も考えなくていい。特に, sendmail を使わずに外部の mail server に直接つなげるメーラもある (Windows とかだと, こういうものの方が多い) ので, こういうメーラを使えば全く何も考えなくても NAT が面倒を見てくれるはずである。欠点としては, 外部に PPP 接続していない時間帯には, メールが出せないということである (基本的にはメーラとそのメーラの設定次第であるので, この表現には少々語弊があるが, まぁ, 基本的にできないと思った方がいいだろう)。
2だと, Mail server となるマシンで sendmail の設定などが必要になり, 少々技術が必要となる。また, メールサーバにはそれなりの大きさのメールスプール用のディスク容量が必要になる。 しかし, NAT 鯖と Mail 鯖を同一マシンにして, PPP 接続が行なわれた時に配送を保留しているメールを自動的に送り出す設定にしておけば, いつでもメールを送ることが可能である (メールが届く時間は保証できないが, テレホーダイの時間になればほぼ確実に PPP 接続するので, その時間にはほぼ確実にメールが出ていく)。
今回は, 2 の方針でいくことにした。 オフラインでメールが出せるようにしたかったというのもあるが, sendmail の設定というのを一回やってみたかったからである。
続いて, 外部にメールを出す時だが,
1 の利点は以下の通り。 リレーホストは通常ネットワーク的に近いところにあるので, メールの転送は瞬時に終る。また, リレーホストは固定なので, メールを送りつける先も決まっていることになり, 名前の解決などをする必要がなく, LAN 内のメールサーバの負荷が下がる。 欠点としては, リレーホストが使えない時はメールが出せなくなってしまうことと, 使えても, リレーホストに悪意ある管理人がいた場合, メールを読まれてしまったり, 改竄されてしまったりすることである。
2 の利点は, 外部にリレーホストがなくても大丈夫であることがある。 改竄などの危険性も(ほんのちょっと)程度低くなる。 欠点は, メールを送る先への回線が遅かったりした場合, メールの転送に時間がかかることになるが, その間ずっと PPP 接続を続けないといけないという点である。
いろいろ考えたが, 大学のマシンは「それなりに」安心できるマシンだし, ということで, 1 を採用した。
前述の通り, メールサーバと NAT サーバは同一にする。 でもって, まずメールサーバの sendmail の設定を行なう。
sendmail の設定は当然ながら CF を使う (sendmail.cf ファイルを手で書けるほど廃人ではないので)。 FreeBSD の方には CF がインストールしてないので, linux box の方で sendmail.def を書いてコンパイルし, できた .cf ファイルを BSD へ転送した。
るんるん Linux, FreeBSD 徹底入門などを参考にこんな def ファイル (test.def) を書いた。
# OS は BSD4.4 OS_TYPE=bsd4.4 # sendmail Release 8.x を使う CF_TYPE=R8 # MX 対応の sendmail を使う MX_SENDMAIL=yes # マシン名 OFFICIAL_NAME='$w.$m' # 自分のドメイン宛のメールは, 自分で配送する ACCEPT_ADDRESS='$m' DIRECT_DELIVER_DOMAINS='$m' # そうでないメールのリレー先 DEFAULT_RELAY="mail.relay.host.somewhere" # From: のアドレスにドメイン名が省略されていた時につくドメイン FROM_ADDRESS='$m' #FROM_ADDRESS='' # とりあえずすべてのメールを一旦キューに入れる SAFE_QUEUE=True # キューにおいておける時間(2週間もとる必要ないか?) MSG_TIMEOUT=15d/14d # タイムゾーン TIME_ZONE=+0900MX に関しては, リレーホストが面倒見るのでこうする必要はない, と思うけど, まぁ, 良くわからんのでこうしておいた。 いうまでもないが, DEFAULT_RELAY="..." の部分は各自書き換えること。 でもって, これをコンパイルする。 CF のあるディレクトリにこのファイルをコピーし, make test.cf (make のオプションには .def ファイルの拡張子を.cf にかえたものを指定する) とする。
できた cf ファイルの正当性を るんるん linux にならってテストする。 /usr/sbin/sendmail -bt -C./test.cf などとすると, sendmail がアドレステストモードで立ち上がる。 詳しくは, 専門書に譲るが,
3,0 hoge 3,0 hoge@localhost 3,0 hoge@localmachine.local.domain 3,0 hoge@local.domain 3,0 hoge@other.domainといったのを入力して, それっぽい出力 (ぉぃぉぃ) が出ていることを確認する。 なお, 3,0 hoge@local.domain というのは, DNS で MX を指定している時のみ調べれば良い。
で, ちゃんと設定できたら, test.cf を /etc/sendmail.cf としてコピーする。 以上でサーバ側の設定は終わりである。設定を簡単にするため, DNS や /etc/hosts ファイルをちょいとばかり記述を加える。
10.1.1.1 98note mail news 98note.tominaga.orgつまり, mail とか news という名前のマシンを用意しておき, クライアント側では, サーバの名前を mail, news といった名前でアクセスするようにしておく。 こうしておけば将来, メールサーバとかニュースサーバが変わった時でも, DNS の設定を書き換えるだけでうまくいく。
クライアント側の設定はかなり簡単である。 外部の sendmail と直接お話ができるメーラ (netscape とか mnews) だったら, smtp サーバのところに mail とだけかいておけばいい。
また, クライアント側でも, sendmail を動かす場合は, 「自分宛以外のメールは全部メールサーバに送る」という設定にすればいい。 つまり, 前述の sendmail.def のリレーホストだけかえてやればいい。
ニュースはまだ設定できてません
IIJ-PPP をクイックハックする