今回はログなどを監視したときに配信されるメールを前の記事で設定した Google Apps の メールアドレスに転送します。
sendmail を使って メールを送ってもいいのですが、sendmail は /etc/sysconfig/network で設定したホスト名をローカルとして扱ってしまうので、ホスト名を変更したりする必要があります。
それを避けるために Postfix というメールサーバーを使って配信します。
この記事では、Postfix で外部からのメールを受信することはしません。あくまでもサーバーの内部で使われるメールを Google Apps に転送するための設定になるので、注意してください。
takatomo@example.com は Google Apps のメールアドレス
Postfix のインストール
まずは Postfix をインストールします。
1 | $ sudo yum -y install postfix |
もうおなじみのコマンドですね。
Postfix の設定をする
インストールが終わったら、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 のおおまかな設定は終わりです。次は、メールの処理方法やアドレスの書き換えなどの細かい設定をしていきます
メールの処理方法、アドレスの書き換えの設定
どの設定にもいえるのですが、バイナリを作らずに設定できる・正規表現が使えるので設定の幅が広がるという理由で、上の設定では ファイルの指定に "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" |
/.../ で囲まれた部分は正規表現になります。"." を文字として入力するときは、エスケープが必要なので、注意してください。ここでの処理の流れはおよそ下のようになっています。
- hogehoge@example.com へのメールは外部へのメールとして送信させる
- 宛先のアドレスに localhost が含まれていたら、ローカルへのメールとして送信させる
- そのほかの宛先に向けてのメールは捨てる
もし携帯電話などにもメールを送ることがあるのであれば、追加しておくのもいいかもしれません。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 を起動する
設定もできたので、さっそく 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" を入力する。
そして最後に 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 側から確認することができません。
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 とかもちゃんと設定したいなぁーと思っていますが、一人で作業することが多いので、ローカルで用が足りてしまったりするんですよね。
ということで、次回は何を書くのかわかりませんが、わかりやすく解説できたらなぁと思います。
でわでわ、たかともでした。