ラック・セキュリティごった煮ブログ

セキュリティエンジニアがエンジニアの方に向けて、 セキュリティやIT技術に関する情報を発信していくアカウントです。

【お知らせ】2021年5月10日~リニューアルオープン!今後はこちらで新しい記事を公開します。

株式会社ラックのセキュリティエンジニアが、 エンジニアの方向けにセキュリティやIT技術に関する情報を発信するブログです。(編集:株式会社ラック・デジタルペンテスト部)
当ウェブサイトをご利用の際には、こちらの「サイトのご利用条件」をご確認ください。

デジタルペンテスト部提供サービス:ペネトレーションテスト

子供のネット接続を時間制御してみた

この記事を書いている日が成人の日だからか、若い人を見るとキラキラしているなと思う反面、自分の時はこうだったと話をする人は既に老害の始まりだそうです。

ご無沙汰しています。もんじろうです。

成人の日だからだと思いますが、若者のように真っ直ぐな気持ちには正面でぶつかれば良いなんて事象がありましたので書いてみようと思います。
※ 以降はあくまでも読み物としてご覧ください。


ゲームは1日1時間
こんなことを子供の時に言われたことはありませんか?
私の時代は任天堂ファミリーコンピュータが全盛でして親からよく言われたものです。
また長年貯めたお年玉を元手に、足らない分は親から借りてパソコンを買ってもらいゲームを作っていた時代でした。
当時の口癖は「プログラミングはゲームじゃないから1時間に当てはまらない」。
・・・生意気ですね。
ただ人の親になった今では言う方も言われる方の気持ちも分かります。
もちろん現代では勉強もネットの時代ですのでゲームばかりじゃないことも知っています。また子供は趣味で毎週、競技プログラミングコンテストに参加して取り組んでいるとの事。これは親として是非ともやりこんでもらいたいし、むしろ応援したくなります。
ただ子供の部屋から漏れてくる音や声はあきらかに遊んでいる様子。
各種のホームルータには時間が来たらネット切断するという0/1なペアレンタルコントロール機能はありますが、勉学の通信は通したいし、時間について子供なりに自らで学んでもらいたいと思い Raspberry Pi を使って制御する仕組みを作成してみました。
目的は「子供部屋にあるマシンのみの制御」「一定時間が経過したら徐々に通信量を制限し気づきを与える」です。


子供部屋のみの制限
我が家はこの業界ではあるあるな、壁の中にLANケーブルを配線して、各部屋が繋がっている建物になっています。
そのため子供部屋から来ている線は物理的に判別することができ、外への経路の間に入り込むことで簡単に制御が可能です。
制御に利用したのはRaspberry Pi 4B。オンボード1000BASE-T LANコネクタがついていますので、中継するためにUSB接続のコネクタも接続して使います。

Raspberry Pi のOS(Raspberry Pi OS)はDebianベースのLinuxですのでiptablesを使って簡単に設定することができます。
片方を子供部屋、もう片方を外部へのルーターに接続する形です。
IPアドレスも分けて子供部屋のネットワークは独立するようにしておくことで制御する対象を固定しておきます。

図1. 簡単なネットワーク図

設定する内容はこちらを参照しました。webtrair.com

一応ここで速度を計測してみました。この取り組みで通信速度が大幅に低下していたら元も子もありません。
何度か計測した結果、若干の低下は見られましたがこれぐらいなら十分範囲内と思いましたので継続していきます。


図2. 壁から直接での速度


図3. RaspberryPi経由

fast.com

通信量の制限
制限をするにはtcコマンドを利用します。
このコマンドは遅延した場合の動作確認をするために用いるものですが今回は確認ではなく実際に使用します。
まずはどのように遅延するかをテスト。試しに300msの遅延を発生させます。

通常時

pi@hoge:~ $ ping -c 3 www.google.co.jp

PING www.google.co.jp(nrt20s18-in-x03.1e100.net
(2404:6800:4004:81c::2003)) 56 data bytes
64 bytes from nrt20s18-in-x03.1e100.net (2404:6800:4004:81c::2003):
icmp_seq=1 ttl=116 time=2.51 ms
64 bytes from nrt20s18-in-x03.1e100.net (2404:6800:4004:81c::2003):
icmp_seq=2 ttl=116 time=2.38 ms
64 bytes from nrt20s18-in-x03.1e100.net (2404:6800:4004:81c::2003):
icmp_seq=3 ttl=116 time=2.47 ms

--- www.google.co.jp ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 2.384/2.453/2.505/0.050 ms

遅延発生

pi@hoge:~ $ sudo tc qdisc add dev eth0 root netem delay 300ms
pi@hoge:~ $ ping -c 3 www.google.co.jp

PING www.google.co.jp(nrt20s20-in-x03.1e100.net
(2404:6800:4004:81e::2003)) 56 data bytes
64 bytes from nrt20s20-in-x03.1e100.net (2404:6800:4004:81e::2003):
icmp_seq=1 ttl=58 time=303 ms
64 bytes from nrt20s20-in-x03.1e100.net (2404:6800:4004:81e::2003):
icmp_seq=2 ttl=58 time=303 ms
64 bytes from nrt20s20-in-x03.1e100.net (2404:6800:4004:81e::2003):
icmp_seq=3 ttl=58 time=303 ms

--- www.google.co.jp ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 5ms
rtt min/avg/max/mdev = 302.567/302.641/302.705/0.452 ms

リセット方法はこんな感じ。

pi@hoge:~ $ sudo tc qdisc del dev eth0 root

電源が入れっぱなしの時の微量な通信や、Windows Updateなど本人とは関係ない通信を省いた時間をカウントするスクリプトを作成しcronに登録。
30分程度のバッファを持たせて1時間半経過した後で徐々に遅延を発生させ、3時間半程度でほぼ使えないレベルまで落とす形にしました。
また、その他として同じタイミングでCPU温度やメモリ利用率と送受信データ量を計測したものをgoogle spread sheetに送信して外から見れるようにしておきました。
通信ログは取りません。取ってもどうせ見ないし確認するにしても膨大しすぎて意味がありませんしそのために速度低下したら意味もありませんので。
なお下のグラフは17時前からデータ量が増えたので自動でタイマーが開始され、しばらくしてから通信量を抑えるためにtcコマンドが実行、徐々に遅延された時のグラフです。

図4. ネットワーク量の推移

運用開始と穴
時間の管理は自分でするようにと子供には制御の内容を伝え、運用を開始しました。
勉学に利用する場合もあるのでその場合はSNSなどでコミュニケーションをとりながら時間枠をリセットさせたりする日々が続きます。
ここでは割愛しますが、会社は基本リモートワークの生活です。ただ出社する日もありますのでリモートでも対応できるようにしていました。
こんな生活がしばらく続き、いい感じで日々が回っていましたが年末休みに入りしばらくすると、どうも子供部屋の様子がおかしい事に気が付き、設定を確認するとこの制御が機能しないようになっていました。子供に確認したところRaspberry Piに侵入し設定を無効化したとの話です。

どうやら年末の忘年会から帰ってきた際に
「侵入できるなら好きにしろ」と酔っ払ったおっさんが発言したそうです。

・・・まったく覚えていません。ですがカミさんも聞いていたので事実なのでしょう。


答え合わせとその後
この業界で働いてますので侵入されないように対策はしていたつもりです。
パスワードも推測されないようにしていましたし、そう簡単に入れないように作り込んでいたのに簡単に侵入を許すとは、我が子らしいと言うかなんと言うか・・・。
どうしても侵入方法が気になったので本人に答えを聞いたところ、自分がリビングで利用していたノートPCから入りこんだとのことでした。お粗末すぎて詳細は省きますが、この世界で働いているのに、何ともお恥ずかしい限りの凡ミスです。
正面はガッチリとガードして完璧にしたつもりでも、少し違う経路はガラ空きというペネトレあるあるな状態でした。


最後に
現在は制御を止めて通信量などを記録するだけの運用としています。
これだけでも子供が何時間利用しているかは分かります。
またしばらく続けていたのもあり子供も自主的にコントロールできるようになっていましたので制御する理由はあまり無いなと思った次第です。
もちろんリビングのノートPCも対策済みです。
この仕事をしているせいか、大丈夫と思っているシステムほど脆い物はありません。
また今日は大丈夫でも、明日は分からないのがセキュリティの世界です。
人のことは全く言えませんが、運用ばかりに目を向けず定期的なメンテナンスを心がけるようにした方が良いと思われます。

メンテナンスと言えば年末に受診した人間ドックの結果が届きました。
特にお腹周り。自分もいろいろと制御した方が良さそうです。
では、また。