keimlab’s diary

KEIMLABの電気・電子・制御の開発備忘録と日常生活記録

Raspberry Piにメールサーバを立ててメールを送信できるようにする

概要

Raspberry Piにメールサーバを立てれば、Raspberry Piのサーバから任意のアドレスにメールを送信できるようになります。ルータでポート開放すれば、メールを受信できるようになり、オリジナルのメールアドレスを何本も作ることができるようになります。今回はlogwatchを設定したことに伴い、メールでlogwatchの結果を受信したかったのでメールサーバを立てました。その手順を紹介します。

IP・ドメインの取得

本来であれば固定IP・ドメインをお金を支払って取得するべきなのだと思いますが、個人の自宅サーバにそこまでするのはもったいないです。邪道かもしれませんが、契約している固定回線のグローバルIPに無料のDDNSサービスを適用することで逃れようと思います。詳細は別途記述。

メールサーバソフトの選定

いくつかメールサーバはあるようですが、以前に自宅サーバを運用していたときに使用したこともあるpostfixを使用します。Linuxサーバでは頻繁に使われているメールサーバで、ネット検索するといくらでも情報が出てきます。ここでは、最低限の設定を紹介していきます。

postfixインストール・設定手順

1.apt-getコマンドでインストール

sudo apt-get install postfix

・『メール設定の一般形式』を聞いてくるので、ここでは『インターネットサイト』を選択 ・『システムメール名』は自分の使っているドメイン名を登録

2.設定ファイルの編集

"/etc/postfix/main.cf"

以下の記載を追加。

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_tls_security_level = may

"/etc/postfix/sasl_passwd"

上記ファイルを新規作成して、以下を記載して保存。

[smtp.gmail.com]:587 gmailアドレス:gmailパスワード

アクセス権限の変更

パスワードが記載されている上記passwdファイルはアクセス権限を設定して見えないように変更。

sudo chmod 0600 /etc/postfix/sasl_passwd

postmapを実行

sudo postmap /etc/postfix/sasl_passwd

3.sendmailで送信してみる

sendmail -t メールアドレス

...送信されない。ログファイルを調べてみると以下のようなメッセージが表示されていました。

status=bounced (host gmail-smtp-in.l.google.com[2404:6800:4008:c03::1a] said: 550-5.7.1 [240d:1e:72:c200:d260:cba4:c335:d471] Our system has detected that 550-5.7.1 this message does not meet IPv6 sending guidelines regarding PTR 550-5.7.1 records and authentication.

gmailsmtpのリレーとして活用させていただくには、もっと設定が必要のよう...

4.gmailsmtpリレーしてもらう設定

上記エラーメッセージを調べてみるとどうもIPv6に対応していないシステム上でIPv6の方式でメールを送信しようとしていたよう。IPv4にするように設定ファイルを変更。

inet_protocols = ipv4

変更後に、再度メール送信試験をしてみると、今度は以下のメッセージが発生。

SASL authentication failed; cannot authenticate to server smtp.gmail.com[***.***.***.***]: no mechanism available

調べてみると、どうも認証方式に必要なライブラリが足りていない模様。以下のコマンドで必要なsaslのライブラリをインストールする。

sudo apt-get install sasl2-bin
sudo apt-get install libsasl2-modules

今度は以下のようにユーザー名とパスワードが異なるとのメッセージが発生。

Username and Password not accepted. Learn more at?535 5.7.8  https://support.google.com/mail/?p=BadCredentials

ユーザー名もパスワードも間違っていないのになぁと思いながら、更にググって調べていくとどうもgoogleアカウントの認証方法を2段階認証として、gmail用のアプリパスワードを発行すれば、できそうな記述を発見。早速適用してみる。2段階認証の設定方法は以下リンク先を参照。 https://support.google.com/accounts/answer/185839?co=GENIE.Platform%3DDesktop&hl=ja これに合わせて、"/etc/postfix/sasl_passwd"も以下のように変更

[smtp.gmail.com]:587 gmailアドレス:gmailアプリパスワード

その後に、設定を反映させるために以下コマンドを打つ。

sudo postmap /etc/postfix/sasl_passwd
sudo /etc/init.d/postfix restart

ここまで来て、再度メールを送信してみると、やっとのことでメールの送信が完了。長かった...

Jan  4 00:49:09 raspberrypi postfix/smtp[8147]: 25231819EA: to=<xxxxxxxx@gmail.com>, relay=smtp.gmail.com[xxx.xxx.xxx.xxx]:587, delay=1195, delays=1192/0.12/1.3/1.4, dsn=2.0.0, status=sent (250 2.0.0 OK  1578066549 m128sm69072665pfm.183 - gsmtp)
Jan  4 00:49:09 raspberrypi postfix/qmgr[8105]: 25231819EA: removed```

まとめ

Raspberry Piでメールサーバを立てて、メールを送信できるようになるまでの手順を紹介しました。gmailsmtpを経由させてもらう設定に少々てこずりましたが、これでlogwatchがメールで送られるようになりますし、自分だけのメールアドレスを持つことができるようになりました。

参考サイト

kaeruko.hatenablog.com qiita.com kkv.hatenablog.com www.server-memo.net

↓リレー設定 akira-arets.blogspot.com

↓『no mechanism available』が出た時の対処方法 sendgrid.kke.co.jp

so-netsmtpサーバにリレーしてもらうpostfixの設定。本記事では紹介しませんでしたが、うちのプロバイダのso-netのメールサーバを経由するのに必要な設定をするのに参考にさせてもらいました。こちらの方が少しハードルは低いかも。 journal.lampetty.net www.castellaroll.net

Logwatch設定

概要

ラズベリーパイで自宅サーバーを運用し始めましたが、外部公開し始めたのに合わせてLogwatchを設定しました。Logwatchがなければ、サーバーの状態や外部からのアクセス状況が分かりませんが、Logwatchを導入すれば定期的にメールで教えてくれるので自宅サーバーの状況が把握しやすくなります。

インストール・設定手順

1.apt-getでlogwatchをインストールする。
sudo apt-get install logwatch
2.インストールが完了したら設定ファイルをコピー。
  cp -p /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf
3.設定ファイルを編集。以下の設定を実施。

  参考サイト①を大いに活用させていただきました。
  ・MailTo = "自分のメールアドレス"
  ・Detail = Hight

4.logwatchをテストしてみる。
logwatch --output stdout

これを実行したら、下記のようなエラーが発生...

/var/cache/logwatch No such file or directory at /usr/sbin/logwatch line 643.

エラーメッセージでググってみると、メッセージどおり単純にディレクトリがないことが問題のよう。
参考サイト②を参照して無事解決しました。対処方法は以下のとおり。

sudo mkdir /var/cache/logwatch

まとめ

Raspberry Pi (raspbian)でのlogwatchの設定方法を紹介しました。どんなアクセスが来ているか分かるので、異常の察知などには便利ですよ。

 

参考サイト

以下は、設定にあたって参考にしたメモ。

① 設定方法を参考にさせてもらったページ
https://www.server-memo.net/tips/server-operation/logwatch.html

② エラーが出た時の対処方法
https://serverfault.com/questions/391776/var-cache-logwatch-no-such-file-or-directory-at-usr-sbin-logwatch-line-633

arduino micro と arduino nano でのシリアルポートセットアップ方法の違い

中華arduino nano互換ボードとラズベリーパイとの間でシリアル通信する際に少々てこずったのでメモ。

 

中華arduino microでは以下のようにプログラムを作成。何故かはあまり理解していないが、

 

con = serial.Serial(serialDeviceName, baudrate, timeout=0.2, rtscts=True, dsrdtr=True) # ポートのオープン(timeoutの設定は適当、rtsctsとdsrdtrはTrueにしておかないとArduinoMicroとは通信できない)

 

一方で、中華arduino nanoでは以下のように記述しなければ、シリアル通信できなかった。

con = serial.Serial(serialDeviceName, baudrate, timeout=0.2, rtscts=False, dsrdtr=False) # ポートのオープン(timeoutの設定は適当、rtsctsとdsrdtrはFalseにしておかないとArduinoNanoとは通信できない)

 

本家のarduinoでは、このようなことは起こらないのかもしれないが...

Xprotolab Plainの使い方

XprotolabPlainという3000円程度でパソコン/スマホオシロスコープができるデバイスがあります。Windowsでも、Androidスマホにも対応しており、使用場所を選ばず家での開発には重宝します。今は在庫切れのようですが、手軽にオシロスコープ機能を導入できて便利ですよ。

https://www.elefine.jp/SHOP/XprotolabPlain.html

 

Windows上での使えるようになるまでの設定を紹介します。

 

① リンク先からWindows用のアプリケーションインストーラをダウンロード

② ダウンロードしたファイルでインストール

③ リンク先からデバイスドライバーインストールアプリをダウンロード

④ Xprotolab Plainをパソコンに接続

⑤ 上部のプルダウンメニューで"XScope"が選択されていることを確認して"Install WCID Driver"をクリック

⑤ ②でインストールしたアプリケーションを起動 → 波形が表示されるようになれば完了。

f:id:keimlab:20191229002808p:plain

デバイスドライバーインストール画面

※上記の図はインストール後に起動した状態の図。デバイスドライバーをインストールした後には不明機器の対象が見えなくなるよう。

f:id:keimlab:20191229004150p:plain

Xprotolabオシロスコープ表示の様子

 

中華Arduino Nano書き込み設定

3年前くらいにe-bayで買った中華Arduino Nano互換機を久しぶりに引っ張り出して使用したときのメモ。Arduino IDEで書き込む際には、以下の設定が必要。

 

メニューバーの"ツール"中のボード設定を以下のように設定する。

・ボード  : ArduinoNano

・プロセッサ: ATmega168

・シリアルポート : 該当COMポート

f:id:keimlab:20191228235901p:plain

中華ArduinoNano互換機書き込み設定

 

にしても、当時5個で11.7$。110円/$だったとして、1個257円ですから、とんでもなく安いですね。3年間放置していましたが、未だに使用できるので、少量しか検証していないものの品質的にも大きな不具合はなし。海外メーカーの製造実力恐るべし。

f:id:keimlab:20191228235516p:plain

Banggoodで購入したときの明細

今でも似たような商品の値段はあまり変わりなし。

https://www.banggood.com/5Pcs-ATmega328P-Nano-V3-Controller-Board-For-Arduino-Improved-Version-p-951797.html?cur_warehouse=CN

 

日本で正攻法でArduinoNanoを購入したら、約3000円。約10倍...

https://www.switch-science.com/catalog/2554/

 

お盆中の個人ワーク

 

何度もブログを始めてもなかなか続かない...

お盆の最中、嫁が実家に帰っているため一人で普段できないパソコン作業を済ませました。昨日から続けて何とか本日中に片をつけることができました。そういえば、この時期はこんなことをやっていたなと懐かしい気持ちになりながら、パソコンの中を整理整頓。すっきりきれいにしてまた頑張ります。

 

◆対象

 ・写真データ

 ・動画データ

 ・オーディオブック

 ・その他もろもろ

 

結婚してから料理に力を入れるようになりました。これまで買ってきたものばかリでしたが、多少は自分で料理ができなきゃ家事の分担はできませんしね。昨日は肉じゃがを作りましたが、今日は鯖の切り身を焼いて少しずつレパートリーを増やしていきます。

もう少し魚料理のレパートリーを増やしたいですね。

f:id:keimlab:20190816234853j:plain

8/16(金)料理

f:id:keimlab:20190816235153p:plain

8/15(木)肉じゃが

f:id:keimlab:20190816235226p:plain

8/14(水)チキン南蛮





ブログ開始、免許更新とスマホ修理

とあるエンジニアの日々の経験や調べものを記録しておく備忘録としてブログを始めました。続かないかもしれませんが、少しでも続けられるように頑張ります。

 

今日は、自動車免許の更新のため「運転免許姫路更新センター姫路署」へ。

日曜日でも更新手続きさせてもらえるので便利なものです。更新はがきを持って行って、簡易の視力検査、写真撮影、30分の講習を経て、およそ1時間ちょっとで更新完了。

 

その後は、スマホを修理してもらいに、梅田へ。

先日、出張のついでにディスプレイのひび割れ、タッチパネルの誤反応を直してもらうために修理してもらったものの、ホームボタンのケーブルを誤って切ってしまったようで、再度の来店を求められていたので、その修正を受けに再度の来店。修理をミスられてしまったのは勘弁して欲しいですが、結構マイナーな機種(HTC U11)まで即日修理してもらえるのはありがたい。今回は、むしろミスられてしまったことで、傷ついていたフレーム(?)まで交換してもらえて、スマホがピカピカに若返りました。スマートまっくすさん、ありがとうございました。

www.smart-max.jp