WebARENAでUbuntuサーバを立てる(5)

WebARENAで運用しているプライベートなサーバ(といっても、今はMQTTで取得したいろんなセンサーの値をグラフ表示しているだけ)ですが、本日、突然、センサーのESP8266/ESP32の各機器がサーバ(MQTT broker)に接続できなくなりました。OLEDディスプレイを持っているものに表示をさせていたので、その旨わかったのですが、他の各機器も全滅しました。Nginx+Flaskで構成している表示系もその時刻でピタッとデータの表示が止まりました(データが来ないのだから当たり前)。

で、どうしようかなー、と思ってWebARENAにログインしてみると、Ubuntu20.04にアップグレードできるよ、という表示が出ていました。どうしよっかなー、と思ったのですが、どうせアップグレードしなくてはならないのだから、ということで、先にアップデートしてしまいました。

$sudo apt-get update
$sudo apt-get upgrade
$sudo reboot
$sudo do-release-upgrade

としても、「アップグレードを全部適用してからやれ」と却下されます。

$ sudo apt-get upgrade
$ sudo apt upgrade
$ sudo do-release-upgrade

として、apt でアップグレードを実行してからだとOKになります。(実際に適用されるものもあります)
apt-get と apt で何が違うのかわかりませんが、とにかく、なんとか Ubuntu 20.02 にアップグレードできました。

・・・が、もちろん、回復はしていません。systemctl で見てみると、Flask 周りが全滅っぽいです。

$ python3 -V
Python 3.8.2

ということで、Python3 のバージョンは3.8系になっていました。pip3は入っているようなので、

$ sudo pip3 install --upgrade pip
$ sudo pip3 install paho-mqtt Flask uwsgi Flask-HTTPAuth

として必要なものをインストールしてから、

$ sudo systemctl restart uwsgi.service
$ sudo systemctl restart bme280.service
$ sudo systemctl restart css811.service
$ sudo systemctl restart mhz19b.service
$ sudo systemctl restart app.service

として関連サービスを再起動します。これで、ESP32を使っているものは復活しました。(これはこれでいまいちわからないところですが、趣味サーバなのでこれ以上の追求はしないことにします)

しかし、ESP8266で動作しているものが復活しません。Arduinoのログで見ると、どうもMQTTで接続する際のfingerprintのチェックでコケているようです。ホストのfingerprintを

$ openssl s_client -connect example.com:8883 < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdin

として採取し直してやると、確かに違う値になっていました。つまり、サーバ側の公開鍵が変わったことを意味する・・・はずです。で、思い当たることといえば、WiFiClientSecureで使うLet’s Encryptの鍵の更新が起こったのではないか、ということです。そこで、 /var/log/letsencrypt/letsencrypt.logを見てみたところ、

2020-10-02 08:xx:xx,xxx:INFO:certbot.main:Renewing an existing certificate

という行を含む大量のログがあり、確かに証明書の更新がかかっていました。

とりあえず、各ESP8266側のArduinoのソースコードの fingerprint を更新してやると、データが送信できるようになりました。しかし、このままだとまた2ヶ月後くらいに同じ現象が発生します。簡単な対策はfingerprintのチェックをやめることなのですが、MQTT brokerのセキュリティをfingerprintのチェック+ユーザー名/パスワードとしているので、DNSをごまかされるとユーザー名とパスワードがバレてしまいます。大したデータを流しているわけではないのですが、抜かれたユーザー名とパスワードでMQTT brokerに接続されると、あまりよろしくありません。

さて、どうしたものでしょう。

一方で、ESP32の方は、証明書の更新がかかったのに大丈夫なのか?という疑問が残りました。

が、ここでESP32に追加している証明書はルート証明書なので、大丈夫だったのでしょう。しかし、いつか有効期限が来るはずなのですが、どうやったらわかるのだろう??

うーむ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)