WPA2-PSK な WiFi アクセスポイントのパスフレーズを定期的に自動で更新したい
というようなことを考えた場合に、市販のWiFiアクセスポイントを使っていると、案外やりづらい。(法人向けのデバイスならシェルにログインしてコマンド実行、という方法もできるかもしれないけれど)
しかし、管理上の理由からパスフレーズを定期的に変更したいケースはあると思います。パスワードの定期的な変更がセキュリティ上の防御として不適切という話もありますが、それはエンドユーザに定期的なパスワード変更を強いる管理手法の話ですね。WPA2-PSKのようにパスフレーズを複数名で共有するような運用の場合は定期的に書き換えたいものです。(業務向けなら WPA2-EAP だと思いますが、ここでは、そこまでの管理ができないネットワークを前提にします)
でも OpenWRT な WiFi ルータなら、シェルからコマンド実行で書き換えできるので、こういう管理がやりやすいです。
なお、ここで紹介する内容は、記事のタイトルにもあるとおり Raspberry Pi 3B で行っています。Raspberry Pi で行うのは技適をパスしているデバイスだからです。3B+ は手元にないので確認していません。
パスフレーズの確認とか変更とか
OpenWRT では uci コマンドで設定を確認したり、書き換えたりすることができます。
現在の設定の確認方法
OpenWRT にログインして以下のように実行すれば、現在のパスフレーズを確認できます。
# uci show | grep -e ssid -e key
uhttpd.main.key='/etc/uhttpd.key'
wireless.default_radio0.ssid='LEDE'
wireless.default_radio0.key='パスフレーズ'
書き換え方法
コマンドを3つ、こんな風に実行するだけで書き換えができます。ちなみにこれを WiFi 接続しているクライアントから実行すると、実行完了した瞬間に WiFi 接続が切れることにご注意ください。
uci set wireless.default_radio0.key='update_psk_by_command'
uci commit wireless
wifi
こういう作業が自動化できるなら、パスフレーズ用の文字列も自動生成したいわけですが、OpenWRT 上でパスフレーズ用のランダム文字列を生成したい場合は、例えばこんな方法で作れます。
strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 8 | tr -d '\n'
Linux でよくあるやり方は fold を使う方法だと思いますが、OpenWRT には fold コマンドがデフォルトではインストールされていないので、代わりの方法となると、こういう感じになります。
実際の運用方法
実際にこういった運用を行う場合は、こういう感じでやるのが良さげです。
- パスフレーズ自体は、パスフレーズの変更日より前に生成し、変更日より前に関係者各位に通知する
- 変更日になったら予め作成しておいたパスフレーズを設定に適用する
このようにすることで、変更予定のパスフレーズを事前に共有できます。変更の影響を受けるクライアントがWiFi接続しかできず、しかもパスワードを定期変更するWiFiにだけ接続している場合は変更情報を事前に共有しておかないと色々面倒なので、そういう面倒な状況が起きないようにしましょう。
また、メールでパスフレーズ自体を通知するだけではなく、iOS/macOS向けの場合はプロファイルにしたものをメール添付するとさらに便利です。iOS/macOS向けのプロファイルは有効期限を設定できるので、定期的はパスフレーズ変更を行うWiFi接続設定はプロファイルにして共有すれば、自動的に設定を消滅させる運用ができます。また形式は XML ですから、スクリプトから自動生成するのも容易です。
または、WiFi設定用のQRコードを Google Spreadsheet などで共有するのも一つの手です。この実装を行うには次の情報を参考にしてください。
- WiFi設定用のQRコードは https://zxing.appspot.com/generator/ や https://chart.apis.google.com/ で生成できる
- WiFi設定用のQRコードはiOSの標準カメラアプリで読むとWiFi設定を自動で行ってくれる
- Androidの場合ZXing Team の QRコードスキャナで読むとWiFi設定を自動で行ってくれる
- Google Spreadsheet のワークシート関数 image() を使えば画像として生成されたQRコードをセル内で表示できるため、zxing.appspot.com や chart.apis.google.com で生成できるQRコード画像を Spreadsheet に表示させられる