月別アーカイブ: 2011年3月

サーバの引越し(4) メールボックスの移動

移行先のメールサーバはさくらのメールボックスとした。
対外的なメールアドレスはさくらのアドレスとして、
さくらから uconst.org にメールの転送設定をしてある。

つまり、全てのメールがさくら経由で uconst.org に配送される状態である。

これを、さくらに配送されるように切り替える。

手順は以下のとおり。

  1. uconst.org の SMTP サーバ (Postfix) を停止する。
  2. メールボックスの中身をコピーする。
  3. さくらから uconst.org へのメール転送設定を解除
  4. uconst.org からさくらへのメール転送設定
  5. uconst.org の SMTP サーバ (Postfix) を起動する。

メールボックスのコピーは imapsync を使用した。

imapsync \
--host1 mail.uconst.org --ssl1 \
--user1 user_at_uconst_org --passfile1 pwfile_imap_uconst_org \
--host2 subdomain.sakura.ne.jp --ssl2 --authmech2 plain \
--user2 user_at_sakura@subdomain.sakura.ne.jp --passfile2 pwfile_imap_sakura

これで、外部にアナウンスしている subdomain.sakura.ne.jp 宛のメールは
直接 subdomain.sakura.ne.jp に入るようになった。

そして、uconst.org 宛のメールは、subdomain.sakura.ne.jp に転送される。

あとは、uconst.org の MX レコードをさくらに向ければ完了…のはずだったが。

続きは DNS の設定編で。

サーバの引越し(3) これまでのメールサーバの構成

メールサーバの移行の前に、現状の構成の整理

受信については、各プロバイダのメールを全て、独自ドメインのサーバに転送するよう設定している。
サーバのアプリケーションは Postfix。
SASL などを使用できるよう、NetBSD 付属のではなく、
pkgsrc で mk.conf に以下のオプションを指定して作成したものを使用している。

PKG_OPTIONS.postfix = sasl pcre

IMAPサーバは Dovecot で運用。
Postfix の main.conf に以下を記述し、
ローカル配送に Dovecot の配送プログラムを使用するようにしている。

/usr/pkg/etc/postfix/main.conf
mailbox_command = /usr/pkg/libexec/dovecot/delive

送信は、独自ドメインのサーバ(Postfix)で全てを一旦受け取る。
ここは、Postfix でいう smtpd の担当。

送信の場合のメールクライアントからの受付は submission port (587) で、
STARTTLS、認証必須。
認証は Dovecot の認証用のソケット(ここでは /var/run/dovecot/auth-client)を利用。
STARTTLS で使用するサーバ証明書は、openssl で第四種オレオレ証明書を作成。

/usr/pkg/etc/postfix/master.cf
submission inet n       -       n       -       -       smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
/usr/pkg/etc/postfix/main.cf
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
smtpd_tls_cert_file = /etc/openssl/certs/mailservercert.pem
smtpd_tls_key_file = /etc/openssl/private/serverkey.pem
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client

Dovecot の認証用ソケットの設定(IMAP用も兼用)は以下。
認証は、UNIX のパスワード認証(passdb passwd)と
パスワードファイルによる認証 (passdb passwd-file)を使用可能とし、
パスワードファイルによる認証スキームとして CRAM-MD5 を指定している。

/usr/pkg/etc/dovecot.conf
auth default {
mechanisms = plain cram-md5
passdb passwd {
}
passdb passwd-file {
args = scheme=cram-md5 /usr/pkg/etc/cram-md5.pwd
}
userdb passwd {
}
user = root
socket listen {
client {
path = /var/run/dovecot/auth-client
mode = 0660
group = mail
}
}
}

Dovecot での CRAM-MD5 のパスワードは以下のようにして作成する。

$ dovecotpw -s CRAM-MD5
Enter new password: XXXXXX
Retype new password: XXXXXX
{CRAM-MD5}00747cf2ffaf11c5ea4a64979c3901fc1d20dee13f480bb598f7d8575b23e61b

“{CRAM-MD5}” より後の部分が CRAM-MD5 のパスワードのデータである。
これを切り取って、ユーザ名、”:”、パスワードデータ の形式で cram-md5.pwd に記述すればよい。
cram-md5.pwd は先の dovecot.conf 中で指定したファイルである。

/usr/pkg/etc/cram-md5.pwd
hoge:00747cf2ffaf11c5ea4a64979c3901fc1d20dee13f480bb598f7d8575b23e61b
fuga:4b05653a6b48eeeb7ef25800a514e2fe6d6ea31ff6d3a17bd2f4ac7cad390426

CRAM-MD5 だと MD5 の計算途中のデータを保存するので、
生のパスワードを保存するよりは安全らしい。

受け取ったメールは envelope sender の値に応じて、
送信する SMTP サーバを切り替える。
直接相手先には送らない。
独自ドメインを取得してはいるが、プロバイダのメールアドレスを使用して送るメールについては、
できるだけ一般のクライアントと同様となるように経路を選択するポリシーを適用する。

たとえば、 メールの envelope sender がプロバイダ A 所属のアドレスが記述されていれば
A の送信用サーバに、
プロバイダ B 所属のアドレスが記述されていれば
B の送信用サーバにメールを転送するといった具合である。

送信用サーバごとに切り替える情報は以下のとおり。

  • SMTPサーバのアドレスとポート (25 または 587)
  • 認証用IDとパスワードのセット

envelope sender で切り替えを行う設定は、以下のとおり。

/usr/pkg/etc/postfix/main.cf
sender_dependent_default_transport_maps =
hash:$config_directory/sender_transport
/usr/pkg/etc/postfix/sender_transport
@プロバイダAのドメイン     smtp:[Aの送信用サーバ]:587
@プロバイダBのドメイン     smtp:[Bの送信用サーバ]:587
@gmail.com                 smtp:[smtp.gmail.com]:587

プロバイダの送信用サーバは認証が必要(とくにそのプロバイダを接続業者としていない場合は)なので、
送信用サーバとその認証情報を関連付ける。

/usr/pkg/etc/postfix/main.cf
smtp_tls_security_level = may
smtp_sasl_auth_enable = yes
smtp_sasl_type = cyrus
smtp_sasl_password_maps = hash:$config_directory/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
/usr/pkg/etc/postfix/sasl_passwd
[Aの送信用サーバ]:587   AのID:Aのパスワード
[Bの送信用サーバ]:587   BのID:Bのパスワード
[gmail.com]:587         gmailのID:gmailのパスワード

プロバイダへの送信時に使用する認証IDは、
メールを送信したユーザに関係なく共通になってしまうが、
ここは気にしないことにする。

あと、sender_transport や sasl_passwd は postmap を使って hashed database にしておく。

駆け足で、これまでの構成を記述したが、
あらためて読み返すとずいぶん複雑なものになってしまっている。
メールサーバを移行してしまった後は、これらは全て不要となるわけだが…。

サーバの引越し(2) メールサーバの選定

これまでは、固定IPを取得して外部に公開しているサーバで postfix を動かしてメールを受けていた。
このサーバは独自ドメインの名前をつけてある。
契約しているプロバイダのメールはこのサーバに転送し、まとめて参照するようにしていた。

送信するメールの発信元が独自ドメインだと、送り先によっては信用が足りないケースが懸念されるので、
公式には契約しているプロバイダのうち、最も古くから使用しているものを公式なメールアドレスとして使用していた。
具体的には IIJ4U であるが、これが長い間、メールアドレスを維持するためだけの契約となっていたのである。

ちなみに、IIJ4Uではメールアドレス付きの基本料金が840円/月、
アドレスを一つ追加するごとに+315円/月である。
いまどきの感覚だと、さすがにリーズナブルとはいいがたいのではなかろうか。

回線業者はこれまでに何度も切り替わっており、今後も切り替わる可能性が高いので、
回線業者の提供するメールアドレスとは独立している方が望ましい。
複数のアドレスを取得した場合に安価であることが必要だ。できれば追加料金はないほうがよい。

普段メールをチェックしないユーザも抱えているので、無料のサーバは使えない。
というのは、無料のサーバは一定期間利用しないと削除されてしまうからだ。
少なくとも調べた範囲ではそうなっていた。

また、複数の場所からメールを参照したいので、IMAPは必須である。

ということで、さくらインターネットのさくらメールボックスが候補に残った。

年間料金が1000円で、複数アドレスが作り放題なので、条件的としては申し分ない。
また、自由度も比較的高いようで、独自ドメインのメールを直接受けることもできる。

早速、さくらと契約した。

まずは、各所に登録しているアドレス(IIJ4U)をさくらに作成したアドレスに変更することだ。

大抵のところでは、ログインパスワードを忘れた場合、
パスワードを再登録するためのページを一時的作成して、そのアドレスを登録してあるメールアドレスに送ってくれる。

そのメールアドレスがなくなると、二度とログインできなくなってしまう。

新規登録しても問題ないようなものとか、
別経路(書類)で本人確認できるようなところ(銀行など)であればまだ何とかなるが、
mixy や flickr など、どうしようもないところもあるし、できるだけ面倒は避けたい。

思いつく限り、調べられる限りの所をリストアップして、メールアドレスの変更手続を行っていく。
アカウント情報を削除して構わないところは、この機会に削除手続きを行う。
あとは、不通になっても構わないところだけ。

もちろん自分だけではなく、メールを移行する他のユーザにもお願いして、
変更手続を行ってもらわなければならない。

面倒ではあるが、この作業を丁寧にやることがその後のトラブルを避ける最も近道であるはずだ。

普通の人はどうしているのだろう?

サーバの引越し(1)

固定IPを維持するのが経済的に負担になってきたので、レンタルサーバに引越しすることにした。

この文章を書いている時点で、引越し作業の大半は終わっているわけだが、今後同様の作業が必要になった場合、もしくは同様の作業を行うとしている人に、何らかの参考になるかもしれないので、これから数回に分けて、引越しにともなう作業とかをメモしておこうと思う。

ちなみに作業順に並べると、おおむね下のようになる。記事をこの順で書くかどうかは未定。

  1. メールサーバ。IMAPサーバの確保。既存メールの移動。
  2. Webサーバの引越し。レンタルサーバへ。
  3. DNSサーバ。プライマリをどこへ置くか。
  4. 自宅サーバ(動的IP割り当てになる予定)へのアクセス確保。Dynamic DNS。