Raspberry Piをとりあえず送信メールサーバに仕立て上げてみた

Postfix_1



せっかく手に入れた Raspberry pi を

もっともっと有効活用したい! 



ということで、昔は入手困難だったが、今ではメモリも512Mに増量され 

より自宅で何か仕事をさせるビジネスパートナーとしての

役割が大きくなってきたように思う。

 そんなわけで、あと2、3台欲しいところではあるのだが、 

円安の影響で 4K を超えてくる価格になってきている...(^_^;)




BOTにして、日々のコーヒー代を稼ぐなどという仕組みは

確立できているが、来るべき次世代のITに向けて何をするか? 

ということで、今回は メールサーバにチャレンジしてみたい。 

ひとつ注意することは、やはり本格的にやるのなら送受信できるよう、

独自ドメインを取得する必要がある。

ただ、あくまで無料で試すということにこだわると それは論外になってしまう。

少し調べたところ、プロバイダやgmailを使ってSMTPリレーを

行うなどという技があることを知った。

そこで送信専用と機能が限定されるが、 とりあえずこれを試してみることに方針転換する。 

まずは、postfix のインストール

apt-get install postfix

その後、ウィザードが立ち上がったのだがよく分からないので

そのまま進んでみる(あとでいくらでも変更できるだろう)


  Postfix_3_3 Postfix_4_3 Postfix_5



 さて、設定が必要なファイルは /etc/postfix/main.cf である。



  Post_fix6 

試行錯誤の過程の消し忘れが紛れ込んでいるが

とりあえず、送信できるようになったファイルを載せてみた。

ちなみに inet_protocols = ipv4 は /var/log/mail.log にIPv6 に関する warning が出て

デバッグし難くなるので記載することをおススメする。


今回は gmail でリレーさせるので、releyhost のところを修正している。

relayhost = [smtp.gmail.com]:587


そして、 #add sasl configration 以下を追記している。

smtp_use_tls = yes smtp_sasl_auth_enable=yes smtp_sasl_password_maps=hash:/etc/postfix/isppasswd
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = 


ここで、SMTPでSASL認証を行う設定をしているわけだが、 

isppasswd などどいうファイルは存在しないので作成する。 

※SMTPサーバ接続用のユーザ名とパスワードの設定ファイルなので名前は何でもいい。

中身はこのようになる。

smtp.gmail.com [リレーさせたいgmailのアカウント]@gmail.com:[アプリケーションに固有のパスワード]

 あるいは

[smtp.gmail.com]:587 [リレーさせたいgmailのアカウント]@gmail.com:[アプリケーションに固有のパスワード]

これは単にポート番号まで書くかという表記の違いなのでどちらでもいい。

ところで [アプリケーションに固有のパスワード] とは何か?

これはGoogle 先生の 2段認証にまつわる話で、 ピンポイントな情報がここに掲載されていた。
 
http://passion4high-tech.blogspot.jp/2013/03/postfix-sasl-authentication-failed-with.html

マネすると、なんと日本語のページになったではないか。

  Post_fix7 

この生成したパスワードをそのままコピペすればよい。 

アカウント用のパスワードかと思っていたら違ったので、要注意である。 

セキュリティに関わる重要なファイルであるため root のみが読めるようにしておく。

chmod 400 /etc/postfix/isppasswd

そして、postfixが扱うDBファイルを生成する。

postmap /etc/postfix/isppasswd

ここまで設定が完了したら、 postfix を再起動して mail 送信の確認である。

service postfix reload

以下、端末にて送信テスト

# mail hogehoge@gmail.com
Cc: Subject: test
this is test mail. <本文の入力が終わったら、Ctrl + D で終了>


/var/log/mail.log には relay している旨が出力されている。 

relay=smtp.gmail.com[74.125.25.108]:587, delay=3.2, delays=0.18/0.22/1.5/1.3, dsn=2.0.0, status=sent (250 2.0.0 OK 1397891640 bu1sm37926391pbb.54 - gsmtp)


次にブラウザで受信した gmail のヘッダ情報などを確認してみても

raspberry pi から受信していることがわかる。(都合上、大分書き換えている)

Return-Path: Received: from raspberrypi (XXXXXX.XXX.ne.jp. [XXX.XXX.XXX.XXX]) by mx.google.com with ABCDE id XXXXXX
for
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Sat, 19 Apr 2014 12:34:56 -0700 (PDT)
Received: by raspberrypi (Postfix, from userid 0)
id XXXXXX; Sun, 20 Apr 2014 12:34:56 +0900 (JST)
To:
Subject: test
X-Mailer: mail (GNU Mailutils 2.99.97)
Message-Id: <2014 data-blogger-escaped-raspberrypi="">
Date: Sun, 20 Apr 2014 12:34:56 +0900 (JST)
From: root
this is test mail. 

もし、mail コマンドが使えない場合はインストールする。

apt-get install mailutils

1 コマンドでサクッと追加できるので実に簡単だ。


最後におや、送信できていない? とハマったところを記録しておく。

smtp_use_tls = yes は重要である。

インストール時に生成された元の main.cf には上の方に

smtpd_use_tls=yes があるから いらないなどと思ってはいけない。

これがないと、 /var/log/mail.log に

smtp.gmail.com[74.125.129.109] said: 530 5.7.0 Must issue a STARTTLS command first. xz7sm150290478pac.3 - gsmtp (in reply to MAIL FROM command))

TLS使って暗号化してくださいということをやんわりと主張する。


あと、そのほかの sasl 設定が必要なのはいうまでもない。

smtp.gmail.com[173.194.79.108] said: 530-5.5.1 Authentication Required. Learn more at 530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 bz4sm63161624pbb.12 - gsmtp (in reply to MAIL FROM command))


そして、忘れてはならないのが、アプリケーションに固有のパスワード生成だ。

gmailのアカウント用のパスワードだとこのように失敗する。

SASL authentication failed; server smtp.gmail.com[74.125.25.109] said: 534-5.7.9 Application-specific password required.

これはいつぞやから、2段認証になったから必要になった様子。

2段認証に対応していない古いアプリから接続する場合はこの手順を踏むこと。

ずっと参考にしていたページには掲載していなかった...(-_-;)


そして、さらにできればいいと思ったのが、raspberry pi の独自ドメインから

送ったように見せかけられれば、尚おもしろいといったところだろうか。

さらに発展系として役立つ情報がこちらにあったので こっそり紹介させていただこう。

http://d.hatena.ne.jp/ayokoyama/20061207/p1


名刺サイズのパソコンなのに、できることがたくさんあって楽しめる。

メディアサーバなんて使い方もおもしろいので、いつかやってみたい。


今日の名言
いや、そうではない。大いなる時の川は、いつも同じ早さで、決して後を振り返らず、
滔々と流れ続ける。-その流れを止めることさえできたら、全財産を投げ出しても
惜しくないと思う時もあるし、もう少し流れを早めたいと思う時もある。だがいかに
望もうと努力しようと無駄である。人々が働いていようと眠っていようと、精を出して
いようと怠けていようと、喜びに身を躍らせていようと苦痛にあえいでいようと、大いなる
時の川は、いとも簡単に流れ続ける。時の川が利用できるのは、「今日の生活」なる
水車を回す時だけである。一度目の前を流れ去れば、時の川は大いなる、再び
還らざるとこしえの海に入る。また次の機会もあるだろう、次の流れも来るだろう。
-だが、利用されることなく流れ去ったものは、もはや完全に失われたものであり、
再び我々のもとに帰ってはこない。
                           エドワード・ハワード・グリッグス