Webカメラシステムでは、
Wireguardによるネットワーク
を採用しています。
なぜ、このような構成になったのかをお話しします。
なにを検討しなければならなかったのか?
1.インターネットに接続する、遠隔地をネットワークで結ぶためには、まず、ファイアーウォールやルータを超えなければならない。
2.LAN内で動いているプログラムの動作に影響を与えてはならない。
3.ネットワーク構成を変更しないようにしなければならない。
4.拡張性をどのように実現するか?
5.セキュリティは担保できるのか?
それぞれ解説します。
1.インターネットに接続する、遠隔地をネットワークで結ぶためには、まず、ファイアーウォールやルータを超えなければならない。
なにが問題なのか?
👇👇👇👇👇
常日頃、私たちは、LAN内からは、Webアプリケーション(Webブラウザなど)を使って外部に出て行っているので、[ LAN内→インターネット(LAN外)]【外向き】の通信は比較的やりやすい。
ただし、[ インターネット(LAN外)→LAN内 ]【内向き】へ通信するのは大変。
[ LAN内→インターネット(LAN外)]【外向き】の通信をするWebアプリケーションは、自分が受けたい機能を持つインターネット上のWebサーバのURLを指定して出ていくので、行先は分かっているし、ファイアーウォールやルータも、その通信を通すように最初から設定されている。
これに対して、[ インターネット(LAN外)→LAN内 ]【内向き】に通信をしたいとしたら、LAN内にある通信ターゲットのアドレスが隠蔽されているので、通信を届けられない。そもそも、ファイアーウォールやルータは、LANへの内向き通信を許可していない。
解決策
👇👇👇👇👇
[ LAN内→インターネット(LAN外)]への通信は容易なので、基本通信はLAN内から仕掛けて確立するようにする。
そのために、インターネット上にAWSクラウドの接続ポイントを設けて、すべての通信ノードは、その接続ポイントに接続することで通信を行う。
つまり、スター型トポロジーです。
2.LAN内で動いているプログラムの動作に影響を与えてはならない。
なにが問題なのか?
👇👇👇👇👇
LAN内、WANも含めた社内システムをネットワークで結ぶときに、各遠隔地を結ぶとして、その中にあるサーバ、クライアント機器の構成情報を一覧で管理しているとしても、自社内で動いているシステムが使っているアプリケーションや使っているポート番号を全て把握していることは稀です。
アプリケーションがおかしくなった時、ネットワークを構成するプログラム等が、社内で使っているアプリケーションの通信を邪魔する(多くはポート番号がバッティング)場合には、どの通信が邪魔しているのかを一から調べなければならない。
もし、使っているシステムの仕様資料が残っていない場合には、システムに流れてるパケットを収集して、どの通信がバッティングしているのかを判断して、邪魔をしないためにはどうすれば良いかを検討しなければならない。
何かの機能を止めれば良いのか、その通信を少し変更すれば済む話しなのか、はたまた変更するための設定がなく、ハードコーディングさせていると考えられるので、通信プログラム側での変更が必要になるのか。
想像しただけでかなり面倒な話しであるのが分かると思います。
解決策
👇👇👇👇👇
社内で使用するプライベートアドレスには、
10.xxx.xxx.xxx
172.16(-31).xxx.xxx
192.168.xxx.xxx
というアドレス範囲が割り当てられているので、社内で使用しているプライベートアドレスを避けて、独自のプライベートアドレスを使用して、社内ネットワークに影響しないようにします。
さらに、独自に用意するネットワークは、Wireguardというネットワークプログラムを使い、Wireguardが作るネットワークが、既存のネットワークには影響しないようにします。
これはセキュリティ的にもウィルスが既存のネットワークに触れられないようにする効果があります。
3.ネットワーク構成を変更しないようにしなければならない。
なにが問題なのか?
👇👇👇👇👇
ネットワーク内で通信をさばいている構成要素を変更するというのは、システムのどこかに影響を与えるリスクを伴います。
電気工事屋さんに遠隔地を結んで通信できるようにしてほしいと頼むとルータなどの何十万円もするルータを入れて結ぶということをやろうとすると思いますが、それだけでも、構成によってはループが発生するかもしれません。
また、各端末の経路情報を変更する必要が発生し、社員宛てに設定の変更通知をメールしなければならなくなる場合もあります。
解決策
👇👇👇👇👇
Wireguardネットワークによって、独自のネットワークを生成して、必要な機器はそのネットワークに接続するようにします。
Wireguardアプリには、Windowsパソコン用、Linux端末用、ANDROID用、iPhone用のアプリケーションがあります。
必要なときに、Wireguardアプリケーションを起動して接続することで、独自ネットワークに接続することもできますし、常時接続しっぱなしにすることもできます。
また同一端末上でも扱う接続IPアドレス、ポート番号が違うので、アプリケーション同士の影響も少ないと思います。(今のところ、影響している事象に当たっていません)
4.拡張性をどのように実現するか?
なにが問題なのか?
👇👇👇👇👇
このネットワークの仕組みは、Webカメラシステム
のベースとしています。
稼働当初、通信負荷が計算できなかったので、接続拠点は5か所まで、各拠点の端末は5台までと制限を設けていました。
しかしながら、当初このシステムは常時モニタを行うことを想定していませんでした。
お客様ご要望で、常時モニタできるモニタリングの仕組みを加えましたが、その影響で通信費が膨らんでしまったのと、安定したモニタ機能にも支障が出てきてしまいました。
解決策
👇👇👇👇👇
現在は、AWSクラウドで動かすWireguardサーバを複数動かす仕組みを追加し、通信負荷に対して、リソースを増強できるようにしました。
また、リソースを増強できるということは、通信費が膨らむことを意味しますが、こちらはサーバの稼働時刻を指定できるようにしました。
(朝9:00~18:00 とか 20:00~朝5:00 など)
リソースの調整と稼働時間の調整でバランスを取るようにできます。
5.セキュリティは担保できるのか?
なにが問題なのか?
👇👇👇👇👇
昨今、セキュリティを考慮したシステムでないと社会的な責任問題になることが起こっています。
どのようにセキュリティに考慮しているかを理解しておくことが求められます。
解決策
👇👇👇👇👇
ベースとしているネットワークはAWSクラウドを使用しているが、ネットワークを中継する以外の機能(プログラム)は動かしていません。
Wireguardとしての設定が保持されてますが、それ以外に機密情報を保持していることはありません。
セキュリティとしては必要最低限としています。
また、接続端末には鍵ペアを使った公開鍵認証の仕組みで認証することでサーバに接続する仕組みになっております。なりすましで端末接続することはできませんし、通信は暗号化されています。
また、AWSクラウドには標準で最初からDDOS攻撃に対する防御システムが動いています。
さらに、必要になれば、ログ情報から攻撃を検知するサービス(AWS GuardDuty)、攻撃の痕跡を追うサービス(AWS Detective)を利用できます。
実際にセキュリティリスクを抱えた場合に、サービスグレードを上げれば、AWSのセキュリティ部隊である、DRTサポートという、24時間365日の専門サポートが受けられます。
(AWS Shield Advanced:大規模システム、ミッションクリティカル用途でのサービス)
以上のような視点でネットワーク構築を実施し、その上でシステムを稼働するようにしております。