TOTEKAN

Mac と過ごす素敵な日々

さくらVPS を設定してみる:
Postfix でローカルのメールを Google Apps に転送してみたよ♪

15 分で読める

You've Got Mail
You've Got Mail by kla4067, on Flickr

今回はログなどを監視したときに配信されるメールを前の記事で設定した Google Apps の メールアドレスに転送します。

sendmail を使って メールを送ってもいいのですが、sendmail は /etc/sysconfig/network で設定したホスト名をローカルとして扱ってしまうので、ホスト名を変更したりする必要があります。

それを避けるために Postfix というメールサーバーを使って配信します。

この記事では、Postfix で外部からのメールを受信することはしません。あくまでもサーバーの内部で使われるメールを Google Apps に転送するための設定になるので、注意してください。

takatomo@example.com は Google Apps のメールアドレス

Postfix のインストール

Snail Mail (p5039941)
Snail Mail (p5039941) by uzvards, on Flickr

まずは Postfix をインストールします。

1
$ sudo yum -y install postfix

もうおなじみのコマンドですね。

Postfix の設定をする

1996 UK Royal Mail Cartoon Stamp Card
1996 UK Royal Mail Cartoon Stamp Card by andertoons, on Flickr

インストールが終わったら、Postfix の設定ファイル ( /etc/postfix/main.cf ) の末尾に以下の内容を追加します。デフォルトの設定をコメントアウトをしないといけない部分があるかもしれません。チェックするのを忘れました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ sudo vi /etc/postfix/main.cf
 
myhostname = totekan.jp
mydomain = totekan.jp
myorigin = $mydomain
mynetworks = 192.168.0.0/23, 127.0.0.0/8
mydestination = localhost localhost.$mydomain
relay_domains = 
smtpd_banner = $myhostname ESMTP unknown 
local_header_rewrite_clients = static:all
transport_maps = regexp:/etc/postfix/transport-reg
canonical_classes = envelope_sender, envelope_recipient, header_sender, header_recipient
sender_canonical_maps = regexp:/etc/postfix/canonical-sender-reg
recipient_canonical_maps = regexp:/etc/postfix/canonical-recipient-reg

今回も設定内容を簡単に解説します。

inet_interfaces = localhost
ローカルホストからしかメールを受けとらない
mydomain = example.com
ドメイン名を設定します。
myorigin = $mydomain
root など、ユーザー名だけでメールをおくったときに補完されるホスト名。例だと root ユーザーからメールをおくると "root@example.com" からメールが送信されたことになる。
mynetworks = 192.168.0.0/23, 127.0.0.0/8
ローカルのSMTPクライアントは認証無しで許可する
mydestination = localhost localhost.$mydomain
ローカルとしてつかわれるドメイン名
relay_domains =
メールの送信を依頼する(中継する)ドメイン名。依頼しないように設定
smtpd_banner = $myhostname ESMTP unknown
Postfix を使っていることを隠す
local_header_rewrite_clients = static:all
簡単にメールの宛先や送信元を書き換えるためのおまじない
transport_maps = regexp:/etc/postfix/transport.reg
ドメインやアドレス、ユーザー名によって、メールを処理する方法を決めるためのファイルを指定します。メールの宛先が Google Apps のアドレス・ローカル以外のメールを捨てることで、スパムメールが他の人に送られないようにします。
canonical_classes = envelope_sender, envelope_recipient, header_sender, header_recipient
アドレスの書き換えをする部分を設定。ここでは 送信元と宛先の両方を書き換えるように設定しまいます。
sender_canonical_maps = regexp:/etc/postfix/sender-canonical.reg
送信元のアドレスを書き換えるためのファイルを指定。送信元のアドレスを書き換えることで、サーバーからのメールだということをわかりやすくします。
recipient_canonical_maps = regexp:/etc/postfix/recipient-canonical.reg
宛先のアドレスを書き換えるためのファイルを指定。宛先を書き換えて、Google Apps にメールを送信するように設定します。

これで Postfix のおおまかな設定は終わりです。次は、メールの処理方法やアドレスの書き換えなどの細かい設定をしていきます

メールの処理方法、アドレスの書き換えの設定

you've got mail.
you've got mail. by e³°°°, on Flickr

どの設定にもいえるのですが、バイナリを作らずに設定できる・正規表現が使えるので設定の幅が広がるという理由で、上の設定では ファイルの指定に "regexp:ファイル名" を使っています。

正規表現を使わずに設定できるのであれば、上の設定の "regexp:ファイル名" を "hash:ファイル名" に変更して "postmap ファイル名" というコマンドでバイナリをつくったほうがいいはずなので、設定する際には参考にしてください。

メールの処理方法を設定する

まずは transport_maps で設定したファイルで、メールの処理方法を設定します。上の例の場合、編集するファイルは /etc/postfix/transport.reg になります。

1
2
3
4
5
$ sudo vi /etc/postfix/transport.reg
 
/@example\.com/		smtp:
/localhost.*/		local:
/.*/			discard: "discard mail"

/.../ で囲まれた部分は正規表現になります。"." を文字として入力するときは、エスケープが必要なので、注意してください。ここでの処理の流れはおよそ下のようになっています。

  1. hogehoge@example.com へのメールは外部へのメールとして送信させる
  2. 宛先のアドレスに localhost が含まれていたら、ローカルへのメールとして送信させる
  3. そのほかの宛先に向けてのメールは捨てる

もし携帯電話などにもメールを送ることがあるのであれば、追加しておくのもいいかもしれません。Gmail で転送するほうがいい気もする。。。

送信元のアドレスを書き換える

Gmail でルールを作るときに楽をしたい、サーバーからのメールだということをわかりやすくしたいということで、送信元のアドレスを書き換えます。

編集するファイルは sender_canonical_maps で指定した /etc/postfix/sender-canonical.regになります。

1
2
3
4
$ sudo vi /etc/postfix/sender-canonical.reg
 
/^logwatch@example.com/		logwatch@example.com
/.*/				server-admin@example.com

ここでは 送信元のアドレスが logwatch@example.com だった場合は logwatch@example.com のまま送信。その他のアドレスだった場合は server-admin@example.com と送信しています。

自分がわかりやすいアドレスであれば、好きなアドレスに設定して問題ありません。

宛先のアドレスを書き換える

最後に宛先のアドレスを書き換えて、Google Apps で取得したメールアドレスに送信するようにします。

編集するファイルは recipient_canonical_maps で指定した /etc/postfix/recipient-canonical.regになります。

1
2
3
$ sudo vi /etc/postfix/recipient-canonical.reg
 
/.*/ 	takatomo@example.com

すべてのメールをtakatomo@example.com に送信します。

例では Google Apps で取得したアドレスを takatomo@example.com としていますが、ここは自分で取得したアドレスに変更してください。当たり前すぎることを。。。

設定はこれで終了です。次にPostfix を起動していきましょう♪

Postfix を起動する

Mail Is Coming
Mail Is Coming by lukatoyboy, on Flickr

設定もできたので、さっそく Postfix を動かしてみましょう。もしこの時点で sendmail が動いている人は sendmail を停止させてしまいましょう。また sendmail の自動起動も停止しておきます。

1
2
$ sudo /etc/init.d/sendmail stop
$ sudo /sbin/chkconfig sendmail off

sendmail が停止できたら、Postfix を起動。自動起動の設定も一緒にします。

1
2
$ sudo /etc/init.d/postfix start
$ sudo /sbin/chkconfig postfix on

無事に起動できましたか??

起動ができるようになっていれば、Postfix で Google Apps にメールが送れるようになって。。。。いません。あと少しだけお付き合いしていただけたらうれしいです。

このままの状態だとデフォルトのメールサーバーが sendmail になってしまっているので、これを切り替えます。次のコマンドを入力してデフォルトのメールサーバーを Postfix に変更します。

1
$ sudo /usr/sbin/alternatives --config mta

デフォルトのメールサーバーとして Postfix を指定します。ここでは "2" を入力する。

2. Shell

そして最後に CGI などで メールを送るときに /usr/sbin/sendmail が指定されている場合があるので、/usr/sbin/sendmail を Postfix へのシンボリックリンクにしておきます。

1
2
$ sudo mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
$ sudo ln -s /usr/sbin/sendmail.postfix /usr/sbin/sendmail

これで Postfix のインストールから、Google Apps に転送するまでの作業は終わり。ルンルン気分でテストメールを送ってみましょう♪

1
$ echo "test" | mail root

これでローカルに配送されるメールが Google Apps に送られるようになりました。

番外編: Gmail でローカルのメールを送信してもらう

Gmail en OME
Gmail en OME by Oneras, on Flickr

さきほどの方法でメールを送信した場合、送信したメールの履歴を Gmail 側から確認することができません。

587番ポートをつかう方法もあって、こちらでは送信の履歴として残ってくれるのですが、今度は Gmail の仕様なのか、送信トレイには残るものの、受信メールとして受信することができない。

どうするかものすごく悩んだのですが、受信トレイに残っていた方が、あとでメールを確認をするときには楽だったので、記事で紹介した方法をとることにしました。

最善の方法ではありませんが、他の Google Apps で取得したアドレス以外に、メールを中継するアドレスを取得して、そこから Google Apps に送信するという方法をとれば、送信したものは中継用のアドレスに残り、Google Apps で取得したアドレスの受信トレイにもメールが届く という設定ができます。

以下、参考までにそのときに設定する内容を載せておきます。お好みで設定してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ sudo vi /etc/postfix/main.cf
 
<strong># コメントアウトする</strong>
#relay_domain =
#local_header_rewrite_clients = static:all
#transport_maps = regexp:/etc/postfix/transport-reg
#canonical_classes = envelope_sender, envelope_recipient, header_sender, #header_recipient
#sender_canonical_maps = regexp:/etc/postfix/canonical-sender-reg
#recipient_canonical_maps = regexp:/etc/postfix/canonical-recipient-reg
 
<strong># 追記する</strong>
smtp_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes

この記事に書いてある設定をして、上の設定を追加。さらに中継用の Gmail のアカウントのログイン情報を /etc/postfix/sasl_passwd に追加。ここではアドレス:example@gmail.com パスワード: 01234567890 とする。

1
2
3
$ sudo vi /etc/postfix/sasl_passwd
 
[smtp.gmail.com]:587 example@gmail.com:01234567890

Gmail のアカウントの情報を追加したファイルにアクセス権を設定して、バイナリ化

1
2
3
$ sudo chown root:root /etc/postfix/sasl_passwd
$ sudo chmod 600 /etc/postfix/sasl_passwd
$ sudo postmap /etc/postfix/sasl_passwd

次に /etc/aliases の末尾に下の内容を追加して root 宛のメールを 中継用の Gmail に転送するように設定。

1
2
3
4
$ sudo vi /etc/aliases
 
root: example@gmail
# もし他のユーザーのメールも転送したければ、さらに "アカウント名: example@gmail" を追加

"newaliases" コマンドで aliases を読み込み、Postfix も再起動する。

1
2
$ sudo newaliases
$ sudo /etc/init.d/postfix restart

あとは 中継用の Gmail アカウントから Google Apps に転送する設定をしてあげてください。

この番外編は思い出しながら書いているため、間違っている可能性があります。あくまでも参考程度に考えてください。

まとめ

これまではメールサーバーの設定はほとんどやっていなかったので、メールの流れをいまいちつかめずに苦労しました。とはいえ、これでサーバーで使うであろう基本的なアプリケーションの設定は終わり。次は何を入れようか。。。

Git とかもちゃんと設定したいなぁーと思っていますが、一人で作業することが多いので、ローカルで用が足りてしまったりするんですよね。

ということで、次回は何を書くのかわかりませんが、わかりやすく解説できたらなぁと思います。

でわでわ、たかともでした。

最後まで記事を読んでいただき、ありがとうございます。

このブログを少しでも、みなさんの記憶に残していただけるのであれば、ぜひ 左のアイコンから RSS 登録していただけたらうれしいです。また Twitter や Facebook もやっています。それぞれ、下から登録していただけたら、うれし泣きで号泣させていただきます。

Ads by Google