高稼動性とセキュリティ対策

農家のIoTデバイスiKakashiは、基本的に農家さんの手助けなしに、自立して動作し続ける必要があります。そして、多少の問題があっても、動き続ける工夫が必要です。
また、セキュリティ対策を施すことで、iKakashi自身ならびにインターネット他のデバイスに対して安全性を向上させます。結果、稼動率が上がります。
以下に、iKakashi で使われている高稼働性とセキュリティ対策を紹介します。

  • Watch dog timer。Watch dog timerとは、Raspberry Piに標準でハードウェア実装されている仕組み(実装されていますが、動くようには設定されていません)で、Raspberry Pi自身が何らかの問題でシステムハングやプログラム暴走してしまったときに、Raspberry Piを自動的に再起動してくれる仕組みです。iKakashiでは、Watch dog timerの設定がされています。iKakashiは、1年以上フィールドテストを行っていますが、幸いなことに、一度もこの機能が動いたことは一度もありません。
  • with文やtry文を使う。iKakashiのほぼすべてのプログラムは、Python 2.7というプログラミング言語で記述されています。写真撮影を行うプログラムやGmailでメールを送信するためのプログラムは、他の方々が作ったプログラムなので、どのようなエラー処理が行われているか分かりません。そのようなプログラムを使うときには、Python 2.7のwith文やtry文で包み、たとえエラー発生しても、iKakashiのプログラムまで影響が及ばないように工夫してあります。
  • エラー処理。iKakashiのプログラムは、私が思いついたすべてのエラーが、それなりに処理できるようになっています。メインのプログラムを記述するより、エラー処理のプログラムを記述する方が手間がかかります。また、どのようなエラーが発生したのかを後から解析できるようにsyslogという稼動履歴ファイルにエラーの記録を残しています。
  • Firewallの設定。RaspbianというOSには、Firewallというインターネット上からの攻撃に備える機能が、標準でインストールされていますが、その設定が行われていないため、Firewallとしては機能していません。iKakashiでは、Firewallの設定を行い、必要最小限のポートのみを開き、他のポートは閉じるようにしています。
  • 標準で使われているユーザーの削除。RaspbianというOSが標準で用意してくれているユーザーがあります。このユーザー名とデフォルトのパスワードは、すでに多くの人々に知られています。従って、Raspberry Piを乗っ取とうと思ったとき、一番最初にこのユーザー名とパスワードが試され、不正ログオンされるかもしれません。そこで、iKakashiでは、このユーザー名は削除し、使うことができないようにしてあります。
  • SSHのポート番号の変更。iKakashiは、インターネットに接続できる環境からリモートで遠隔操作できるようになっています。このときに使うのがSSHという接続方法です。SSHの標準のポート番号も攻撃の対象になっていますので、iKakashiでは、SSHのポート番号を変更してあります。
  • SQLインジェクションの対策。iKakashi の積算温度の設定では、ユーザーが積算開始日や基準温度の変更ができるようにしてあります。これらの入力時に、設定値に含ませるような形でSQL(データーベース)のコマンドが押し込まれている場合があります。これにより、iKakashiが期待していないSQLの動きにさせられてしまうかもしれません。iKakashiでは、SQLインジェクションなどの攻撃に備えてあります。