imotos.net再立ち上げ part3

メールの設定

Web上にメールアドレスを掲載するとすぐにスパムメールが届き始めるご時世であるから、「一生もののメールアドレス」という考え自体が古くさいのかもしれないと思いつつ、アカデミックな組織だけの物だった80年代後半の牧歌的時代からインターネットを使い始めた自分としては、「自分の名前@自分の名字.com」とか「自分の名前@自分の名字.net」とか「自分の名前@自分の名字.org」とかといった風に、自分の名字のドメインに自分の名前のメールアドレスを持つというのが憧れでありつづけている。自分の名字からなるドメインを取得した (part2 ) のは、この「一生もの」のメールアドレスを自由に使うというのがその目的の一つなのである。

Postfix

メールを使えるようにするには、まずメールサーバーを設定しなければならない。Debian GNU/Linuxの標準的なメールサーバーは exim なのだが、私の場合は以前から使い慣れているという理由で Postfix を使うことにした1。パッケージのインストールは簡単である。

  1. aptitude install postfix
  1. /etc/postfix/main.cf の編集 (myhostname、mydestination 等)

DNS (MX)

そもそも外部からメールが届くようにするためには、DNSのMXレコードを設定しなければならない。ある名前のホストあてのメールを実際はどこに転送すればいいのかを設定するのがMXレコードである。正しくメールサーバーを立ち上げた上でMXレコードを設定すると、メールが届くようになる。例えば void@imoto.org あてにメール出すと次のような処理がなされることになる。

  • imoto.org のMXレコードを調べる
  • MXレコードに転送先として mail.imoto.org と書かれているとすると、このメールをSMTPで mail.imoto.org に送ろうとする

あるホストあてのMXレコードは優先度を付して複数設定でき、優先度の高い転送先が使えない場合は次の優先度に転送してくれる。 RimuHosting の場合バックアップメールサーバーのサービス2が標準で付いているので、 imoto.org ないし imotos.net あてのメールを今回立ち上げたホストあてに転送する設定を行った上で、それよりも低い優先度で backupmx.rimuhosting.com に転送する設定を入れておくことで、 void@imoto.org あてにメールを出すと次のような処理がなされることになるはずである。

  • imoto.org のMXレコードを調べる
  • 優先度が高い (優先度の数字が小さい) MXレコードの転送先は mail.imoto.org にしてあるので、通常はメールをSMTPで mail.imoto.org に送ろうとする(前述の通り)
  • mail.imoto.org が応答しないなどの理由でメール転送に失敗すると、次の優先度のMXレコードを調べる
  • これが backupmx.rimuhosting.com になっているので、 mail.imoto.org に異常がある場合はメールをSMTPで backupmx.rimuhosting.com に送ろうとする

UUCP

POP?

実際にメールを読み書きするのは自宅のPCだから、 imoto.org あてに届いたメールを何らかの方法で自宅のPCに持ってくる必要がある。サーバー上にあるメールを手元のPCで読むためによく使われるのがPOPというプロトコルである。POPの場合自宅のPC側からホスト側にメールの有無を問い合わせ、メールがホストに溜っている場合はそれをまとめてホストからPCにダウンロードする、というやりかたをとる3。POPというプロトコルは基本的にメールアカウントごとに問い合わせを行うため、 imotos.net に来た(複数のアカウントあての)メールをまとめて一括転送することはできない。

メールホスト間のメールの転送に使われるSMTPというプロトコルを使うことも考えられるが、この場合メールがホストに届く度にホストから自宅のPCにメールを転送してくることになる4。自宅のPCは光ファイバーによる常時接続ではあるが、いわゆるdynamic IPすなわちIPアドレスは非固定である。ホストがSMTPで自宅のPCにメールを転送しようとした時に自宅のPCが立ち上がっているとは限らないし、以前に自宅のPCが使っていたIPアドレスが別のPCに割り当てられてしまっているかもしれない。この場合、最悪自分あてのメールが全然関係の無い別のPCに転送されたまま失われてしまうこともありうる。従って自宅のPCのように非固定IPを使っている場合、SMTPという選択肢は取れない。

そこでUUCP5である。UUCPは現在ではあまり使われていない古いプロトコルで、基本は1対1のUnixホスト間のバッチ型のファイル転送プロトコルである。TCP/IPで常時接続することが難しかった時代に、一日〜一週間に数回(特に電話代の安い夜間にまとめて)モデムを使って電話回線でホストをつなぎ、片方からもう片方へとファイルを転送するために使われていた。UUCPを使ってホストに溜った (全アカウント分の) メールをまとめて一括転送することが出来る。その意味ではSMTPと似ている (POPのようにユーザーごとのメール取得ではなく、あくまでメールをホスト間で一括転送するイメージ)。一方UUCPはメールが来たその都度では無く予め設定しておいた時にそれまでに溜まっているファイルをまとめて(バッチ的に)転送する方式なので、UUCP接続を自宅PC側からホスト側に対して行うように設定することで転送自体はpullで行える。その意味ではPOPと似ている (SMTPのようにメールが届く都度ホストからpushでメールを送りつけてくるわけでは無い)6

UUCP over TCP/IP

もっとも今回立ち上げたサーバーに電話回線はつながっていないから、電話回線を使ったUUCP接続というわけにはいかない。第一もし電話回線がつながってたとしても、定期的に自宅から国際通話をしていたのでは月々の電話代がいくらになるのか想像もできない。そこでTCP/IP上でUUCPを行うUUCP over TCP/IPを使うわけである。TCP/IPで直接通信が出来るのにその上にわざわざUUCPを載せて通信するというのは不思議といえば不思議だが、前述の通り自宅PCが非固定IPでSMTPを使えないことから、メールを一括転送するためにTCP/IP上にわざわざUUCPを乗せて使う意味はある。このような理由で imotos.net から自宅PCへのメールの転送はUUCPで行い、POPやIMAPなどは使わない。なおUUCP over TCP/IP自体は暗号化されていないためセキュリティー上の問題がある。SSHを使って安全に接続する設定にする。

  • 【ホスト】Taylor UUCPをホストにインストール

  • ホスト# aptitude install uucp
  • 【ホスト】Taylor UUCPの設定: /etc/uucp/confignodename
  • 【ホスト】Taylor UUCPの設定: /etc/uucp/passwd自宅PC用のloginnameパスワード を設定

  • Uユーザー名 パスワード
  • 【自宅PC】Taylor UUCPを自宅PCにインストール

  • 自宅PC# aptitude install uucp
  • 【自宅PC】SSHの暗号鍵ペアの生成

自宅PC# su - uucp
自宅PC$ ssh-keygen
  • 【ホスト】SSHの設定
    • 自宅PCのuucpユーザーの公開鍵 ~uucp/.ssh/id_rsa.pub をホストに転送
  • ホストのuucpユーザーのパスワードを無効化

  • ホスト# passwd -l uucp
  • ホストのuucpユーザーの ~/uucp/.ssh/authorized_keys に転送した公開鍵を設定。その際、先頭部分を次のように書き換える

  • no-port-forwarding,no-X11-forwarding,no-agent-forwarding,command="/usr/sbin/uucico -l" ssh-rsa AA...
  • これで自宅PCの秘密鍵を使ってホストのuucpユーザーにssh接続すると uucico コマンドが実行されることになる
  • 【自宅PC】Taylor UUCPの設定: /etc/uucp/confignodename
  • 【自宅PC】Taylor UUCPの設定: /etc/uucp/sys にサーバーの設定を追加

system サーバーのUUCPノード名
call-login *
call-password *
time any
chat "" \d\d\r\c ogin: \d\L word: \P
chat-timeout 30
protocol t
port SSH
  • 【自宅PC】Taylor UUCPの設定: /etc/uucp/port にSSHの設定を追加

port SSH
type pipe
command /usr/bin/ssh -q -i /var/spool/uucp/.ssh/id_rsa uucpホスト@
reliable true
protocol etyig
  • 【自宅PC】Taylor UUCPの設定: /etc/uucp/call にホストを呼び出しの設定を追加

接続名 Uユーザー名 パスワード
これで、 自宅PC# uupoll ホスト とするとUUCP接続でき、メールが転送されるはず
  • 【自宅PC】Taylor UUCPの設定: /etc/uucp/Poll にUUCPの転送を行ってよい時刻を設定。UUCP over TCP/IPなので別に何回起動しても電話料金が発生するわけでも無く、00時〜24時までを全て設定している

schedule 接続名 00 01 .... 23 24
poll 接続名 00 01 .... 23 24
  • 【自宅PC】Taylor UUCPの設定: /etc/uucp/crontabl にUUCP転送を起動する時刻を設定する。毎時10分ごとに起動することにしている

8,18,28,38,48,58 * * * * /usr/lib/uucp/uudemon.hr

Postfix

Postfixに到着したメールをUUCP経由で自宅PCに転送するように指定する必要がある。 ‥‥@imoto.org あてや、 ‥‥@‥‥.imoto.org あてのメールは全てUUCPで自宅PCに転送し、そこで処理する。後述の通りメーリングリストをホスト上で運用しているため、 ‥‥@imotos.net あてのメールを直接自宅PCに転送することはせず、ある決まったアカウント分だけ imoto.org あてに /etc/postfix/virtual を使って転送するようにしている。

  • /etc/postfix/main.cftransport_maps 等を設定

transport_maps = hash:/etc/postfix/transport
fallback_transport = uucp:自宅PCのuucpノード名
virtual_alias_maps = hash:/etc/postfix/virtual
  • /etc/postfix/transport の設定

imoto.org uucp:自宅PCのuucpノード名
.imoto.org uucp:自宅PCのuucpノード名
  • /etc/postfix/virtual の設定

なんちゃらimotos.net かんちゃら@imoto.org@
....

メーリングリスト

最近では無料で開設できるメーリングリストも多いが、そのようなサービスが出てくるはるか以前、情報漏洩対策やコンプライアンス強化が重要になっている現在からは想像も出来ないが、会社のメールサーバー上に自由に個人的なメーリングリストのようなものを作ることが黙認されていた時代からメーリングリストを作ってきた7ので、「メーリングリストは自分が管理するメールサーバー上に作るもの」という強迫観念のようなものが残っているのかもしれない。無料のメーリングリストサービスは広告が入ることが多いし、自分の興味や交友関係を業者に把握され得るのが気持ち悪いという感もあるし、せっかくホストを立ち上げメールサーバーをインストールしたこともあるので、個人的なメーリングリストは立ち上げたホスト上に設置してみたい。

Debian GNU/Linuxで利用できるメーリングリストのツールはいくつかあるが、 www.imotos.net は常時インターネットから見えるので、メーリングリストの管理が(管理者の全体管理も、各ユーザーの個別設定も)Webから出来るものの方が何か便利であろう。この見地から、 Mailman を選択した。Mailmanは GNUプロジェクト のソフトウェアでいろいろな所で利用されているし、日本語の対応もきちんとしている。特に設定で注意すべきことはなく、簡単にインストールできる。

自宅PC

実際にメールを読み書きするには、詳細は省略するが自宅PCの設定も必要である。

  • UUCPで一括転送したメールを個別ユーザーごとに配送するためのメールサーバー: Postfix
  • 個別ユーザーがメールを取得するための仕組み (POP/IMAP): dovecot
  • メール送信時の転送サーバー: 契約しているISPが提供している送信用サーバー

メールの設定はいろいろと大変だが、一回設定してしまえばあまり設定を頻繁に変える必要は無い。これらの設定によって

  • 一生もののメールアドレス
  • 家族が増えてもメンバーが増えても好きなだけアカウントを追加できる8
  • メーリングリストも好きなだけ追加できる

ことが可能になったのである。

1 今さらsendmailはないだろうし、qmailは古い上にOpen Source Softwareですらなく選択肢になり得ない。

2 万が一今回立ち上げたホストが落ちている場合メールは優先度の低い backupmx.rimuhosting.com に転送される。 backupmx.rimuhosting.com は、定期的に代理で受信したメールを再転送してくれる。

3 クライアントがメールを取りにくる (pull)。

4 ホストがクライアントにメールを置きにいく (push)。

5 Unix to Unix Copy Program/Protocol。

6 メールは次の転送時刻まではホストに溜ったままになるから、SMTPのように「送ったらすぐ届く」というわけにはいかない。

7 初めは単なる /etc/aliases の設定から始まり、 hmlやhmlを元に独自に改造したもの、fmlなどを使ってきた。

8 好きなだけアカウントを追加できるのは、家族が増えても追加の料金が発生しないというだけでなく、Webの各種無料サービスなどでメールアドレスの入力を求められた際、サービスごとに専用のアドレスを追加して対応できる、というメリットがある。そのサービスの利用を止めた際や万が一メールアドレスが漏洩するようなことがあっても、単にそのアカウントだけを無効にすればよく安心である。