LoginSignup
441
510

More than 5 years have passed since last update.

12800円で自宅や小規模オフィスのネットワークセキュリティ監視環境を構築する

Last updated at Posted at 2016-12-29

top.jpg

本投稿では自宅やオフィスといったネットワークに接続されている機器がインターネットに対してどのような通信をしているのかを監視するため、Raspberry Piを使ってインターネットと自宅・オフィスネットワークを行き来する通信をキャプチャできる環境を低価格で構築する方法について解説します。

はじめに:なぜ自宅やオフィスのネットワーク監視が必要か

インターネットの普及とともにインターネットに接続して動作する機器は急速に増加しました。昔は一般的な家庭やオフィスでもインターネットに接続するものなどせいぜいPCが1、2台でしたが、今やテレビ、ゲーム機、ビデオレコーダー、スマートフォンなど様々なものが自宅やオフィスのネットワーク・WiFiに接続して何かしら通信をしており、その台数も同居人・オフィスのメンバーの人数に応じて多くなります。

IoTというトレンドワードもあり、照明器具おもちゃなど新たにネットワークに接続する製品も出始めています。しかし、これらの製品は脆弱性の管理などの側面からセキュリティ上の問題があります。ここ最近ではルータ・スイッチ製品ビデオレコーダー監視カメラ周りで多くの事案がありましたが、他の製品も大きく表面化していないだけで本質的に同様の問題を抱えています。このような問題をネットワークの監視だけで全て解決できるとは言えませんが、個々の製品の中で対策をできないとなると、自分が被害者にも加害者にもならないようにするためには製品の外、すなわちネットワークでの対策というのは有効な手段の1つではないかと考えられます。

また、自分の家の中やオフィス内にどういう機器があってそれらがどうネットワークを使って何をしているのか把握できない、というのもあまり気持ちのいいものではありません。最近ではわかりやすく被害のでるマルウェア(コンピュータウィルスなどの総称)も増えてきましたが、一方で無害なアプリケーションを装って黙々と第三者に情報を送り続ける、というようなこともあったりします。ネットワークを監視して記録をとることによって、このような被害を発見したり後から確認することができるようになります。

そこで、近年値段の下がってきたネットワーク機器やRaspberry PIのような小型&低価格&低電力の汎用コンピュータを使って自宅やオフィスのネットワークの監視を低価格に実現しよう、というのが本投稿の趣旨です。一昔前だと安くても諸々あわせてウン十万ぐらいかけないと必要な機材を揃えることができませんでしたが、最近になってついに1万円前後で必要な機材を概ね揃えられるようになりました。この投稿では語呂合わせ的に12,800円(実際には12,748円)としましたが、構成によってはより安くしたり、もう少しお金をかけてちゃんとした監視環境を作ることもできます。

本投稿では機材の購入からセットアップについて解説し、監視用のソフトウェアとしてntopの使い方についてかんたんに触れます。ネットワークを監視することで(監視ソフトウェアによって内容に差がありますが)例えば以下のようなことがわかるようになります。

  • 自宅やオフィスのネットワーク内にどのような機器がつながっているか
  • つながっている機器はどの宛先にどのぐらいの通信をしているのか
  • セキュリティ上問題のある通信(例えばマルウェアに感染した時に発生する通信)をしていないか

ちなみにこの投稿は、あまりネットワークに詳しくないエンジニアの方も読むことを想定し、多少用語を崩して記述しています。本職の人は明らかな間違いを除きちょっと目をつぶってください。また、言わずもがなとは思いますが、ネットワーク監視は自身が管理しているネットワークに対してのみ実施するようにしてください。

想定環境・前提条件

今回、監視しようとしているネットワークの想定環境・前提条件は以下の通りです。

  • インターネットへの接続はインターネット・サービス・プロバイダ(ISP)を利用している
    • 接続が上り・下りともに100Mbps以下である
    • ISPへはPPPoEやCATVを使って接続している(言い換えると、今回使うことを想定しているBUFFALO BBR-4MGでISPに接続できる)
  • WiFiルータ(WiFiの基地局とインターネット接続のためのルータの機能を両方備えたもの)が一台設置されており、これを経由して全ての機器がインターネットへ接続している
    • WiFiルータのLAN側に延長のために別のスイッチが接続されているなどはOK

図にするとこういう感じです。

home-monitoring.png

また、ネットワーク構成は以下のようになっているものとします。

  • ネットワーク: 10.0.0.0/24
  • WiFiルータのLAN側のアドレス: 10.0.0.1
  • その他の機器のアドレスはWiFiルータのDHCPサーバ機能で設定

機材調達

買ったもの

以下、購入した物品の一覧です。価格は2016年12月に筆者が買った時点でのものになるので、時期によって前後すると思われます。

品名 単価 個数 小計
BUFFALO BBR-4MG 有線BroadBandルータ BroadStation 1,669円 1 1,669円
iBUFFALO UTP Cat6a ストレート フラットタイプ 0.5m ブラック BSLS6AFU05BK 200円 4 800円
BUFFALO 10/100M USB2.0用 LANアダプタ LUA3-U2-ATX 1,090円 1 1,090円
本体+ケース Raspberry Pi 3 Model B 5,380円 1 5,380円
Kingston microSDHC カード 8GB SDC4/8GBSP 529円 1 529円
TP-Link 10/100/1000Mbps 8ポート TL-SG108E 3,280円 1 3,280円
合計 12,748円

自前で用意したもの

以下のものについては自前で持っている、他の機器の余ったものを流用する、などを想定しています。

  • USBキーボード(Raspberry Piセットアップ用)
  • HDMIケーブル(Raspberry Piセットアップ用)
  • HDMI入力が表示できるディスプレイ(Raspberry Piセットアップ用)
  • USB micro-bのケーブルと電源(Raspberry Pi用)
  • MicroSDに読み書きができる&有線LANが使えるPC(Raspberry Pi、TP-Link TL-SG108E、BUFFALO BBR-4MGのセットアップ用)

環境構築

最終的にこういう構成になります。ネットワーク構築に慣れている方だとこの図を見ただけで何をすればいいのかについて察しがつくかもしれませんが、今回はなるべく広くITエンジニアの方を対象としたいので細かい設定方法を「TP-Link TL-SG108E」「Raspberry Pi」「既存のWiFiルータ」「BUFFALO BBR-4MG」の順番に解説します。

home-monitoring-arch.png

TP-Link TL-SG108Eのセットアップ

TP-Link TL-SG108Eはポートミラーリングができるスイッチです。他にもVLANの設定できるなどの機能を備えていますが、この価格帯でポートミラーリングができるというのが個人的にはとても画期的で、この製品がなければこの構成を考えようと思いませんでした。今回は既存のWiFiルータと新しく導入するルータ Buffalo BBR-4MG を中継し、その通信を監視用ノードであるRaspberry Piに転送する役目を担います。

幾つか設定できる項目はありますが、今回はポートミラーリングの設定だけを解説します。

セットアップ準備

  1. TP-Linkの電源を入れて、有線LANが接続できるPCとTP-LinkのPort 1(正面から見て一番左側)をLANケーブルで接続してください。
  2. TP-Linkの初期IPアドレスが 192.168.0.1 なので有線LANの設定を以下の通り手動で入力してください
    • IP address: 192.168.0.2
    • netmask: 255.255.255.0
    • gateway: 設定しない
    • ※ 既存ネットワークとの混線を避けるため、無線LANなどはオフにしておくことをお勧めします
  3. Webブラウザを立ち上げ http://192.168.0.1 を開いてください

セットアップ

注意: どうも "Apply" を複数回押した後にサイドメニューの "Save Config" で設定を保存しようとすると、再起動後に設定が消えるという挙動をするようです。設定変更→Apply→設定変更→Apply→Save Configとするのではなく、設定変更→Apply→Save Config→設定変更→Apply→Save Config のように操作することをお勧めします

  1. 最初の画面ではユーザ名、パスワードの入力なのでデフォルト値の ID:admin、Password:admin を入力します
    • パスワードはSystemのメニューから変更できるので適宜変更してください
    • ただし最大文字数が16文字なので注意してください(ログイン画面では16文字で切ってくれない)
  2. 左のサイドメニューからMonitoringPort Mirror と移動します。
  3. 設定を変更します。
    1. Port Mirror ボックス内にある Port MirrorEnable に、Mirroring PortPort 8 に変更し、Apply をクリックします。その後一度Save Configします。
    2. Mirrored Port ボックス内にある Mirrored Port でPort 1から Port 7 までを選択し、IngressEnable にしてから、Apply をクリックします。その後Save Configします。

なんか項目名がかぶっていてわかりにくいので、以下にスクリーンショットを示しておきます。

tp-link-setup.png

Raspberry Piのセットアップ

Raspberry Pi は実際にミラーリングされてきたパケットをキャプチャし、必要な情報を保持するなどの役割を担います。

今回購入したRaspberry Pi 3 Model BはオンボードにNICが1つ、WiFiのNICが1つ標準で搭載されていますが、安定性などを鑑みて今回の構成ではオンボードNIC+USB LAN変換アダプタの2つの有線NICを使います。オンボードNICが管理用のインターフェース、USB LAN変換アダプタがキャプチャ用のインターフェースとして設定します。

OSのインストール

今回はAlpine Linuxをインストールします。最初の手順については公式ページに解説があるのでそれを参考にOSをインストールしてください。今回はX11やpersist storageはひとまず使わないので以下のページの Clock-related error messages まで進めればOKです。

セットアップ時のtipsは以下のとおりです。

  • ネットワーク設定などはあとから変更するのでひとまずdhcpなどで問題ありません
  • 日本の場合、タイムゾーンは Asia/Tokyo です(Tokyoだけでもいけるかも)
  • 以降の説明では、ホスト名を brownie としたものとして解説します。
  • あとのsetup-alpineについては、基本的にデフォルト値でよいはずです

インストール作業については、他にも以下が参考になります。(ただし、最新の手順と一部異なる可能性があります)

ネットワークの設定

ここではRaspberry Piのホスト名を brownie 、IPアドレスを 10.0.0.3 として設定します。
/etc/network/interfaces を以下のように変更してください。eth0はオンボードのNIC、eth1 はUSB LAN変換アダプタ(今回はロジテック 有線LANアダプタ USB 2.0 LAN-TXU2C)になります。eth0 を管理用に使うのでこちらにはIPアドレスを割り当て、eth1 はキャプチャ用に使うのでインターフェイスを立ち上げるだけにします。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    hostname brownie
    address 10.0.0.3
    netmask 255.255.255.0
    gateway 10.0.0.1

auto eth1
iface eth1 inet manual
    up ifconfig eth1 up

このRaspberry Pi用のAlpine Linuxはdisklessシステムになっているため、ファイルに対する変更などは再起動するともとに戻ってしまいます。そのため、設定ファイルの変更後に必ず以下のようにlbu (Alpine local backup) コマンドを実行してください。

# lbu commit

ntopのセットアップ

apkコマンドでntopをインストールします。依存関係でインストールするものが多いので2,3分かかります。

# apk add ntop

インストールが終わったら起動オプションを変更します。/etc/conf.d/ntop で以下の1行が有効になるようにしてください。

NTOP_OPTS="-u ntop -P /var/lib/ntop --interface eth1 -m 10.0.0.0/24"

デフォルトで起動するとeth0を監視しようとするのでeth1を明示的に指定するために --interface eth1 を指定し、ローカルのアドレスレンジを指定するために -m 10.0.0.0/24 を指定します。

この変更もネットワークの設定と同様に再起動すると消えてしまうのですが、この設定ファイルはまずバックアップのリストにも入っていないので、先にバックアップのリストに追加します。

# lbu add /etc/conf.d/ntop

※2017.1.5 magifd2さんから提供いただいた情報でntopのパスワードについての解説を更新しました。

また、ntopは初回起動時にパスワードを設定するように要求されるので、以下の手順でパスワードをコマンドラインで設定した後にパスワードファイルをバックアップのリストに追加します。以下の例ではパスワードを sweet としていますが、適宜変更してご利用ください。

# /usr/bin/ntop --set-admin-password=sweet
# lbu add /var/lib/ntop/ntop_pw.db
# lbu commit

設定後、rc-service コマンドで起動ができれば成功です。

# rc-service ntop start
Wed Dec 28 21:42:05 2016  Initializing gdbm databases
Wed Dec 28 21:42:05 2016  Setting administrator password...
Wed Dec 28 21:42:05 2016  Admin user password has been set
Wed Dec 28 21:42:05 2016  Admin password set...
 * Starting ntop ...
Wed Dec 28 21:42:05 2016  Initializing gdbm databases                     [ ok ]

再起動後、自動で立ち上がるようにrc-updateで起動サービスを追加します。

# rc-update add ntop default
 * service ntop added to runlevel default

最後に忘れずlbuコマンドでcommitします。

# lbu commit

その後、rebootコマンドなどで再起動して、各種設定が正しく反映していれば成功です。

既存WiFiルータの設定変更

既存のWiFiルータの設定は、大きく分けて「ブリッジモードの設定」「dhcpの停止」「IPアドレスの変更」の3つになります。

ブリッジモードの設定

WiFiルータをインターネットと自宅やオフィスの境界におくための「ルータモード」ではなく「ブリッジモード」または「APモード」などとよばれるモードに切り替えます。これは製品によって名前が異なりますが、同じような機能は最近のWiFiルータはだいたい実装されているはずです。Buffalo、IO DATA、Atermの場合の手順は以下から参照できます。

DHCPサーバの停止

これまで動かしていたWiFiルータはおそらく接続した機器に対して自動的にIPアドレスを割り当ててくれるDHCPサーバの機能がオンになっていると思われます。このDHCPサーバの機能は新しいルータ BUFFALO BBR-4MG で動かす必要があるので、2つ以上のDHCPサーバが同じネットワークにあるとネットワークが壊れます。停止の方法はメーカーによって異なるので適宜調べて操作してください。

IPアドレスの変更

最後にIPアドレスを変更します。DHCPを使った機器しかないのであれば、BUFFALO BBR-4MGに別のアドレスを振れば良いのですが、ルータのIPアドレスを手動で設定してある機器があるとやっかいなので、今回は新しいルータBUFFALO BBR-4MGにもともとWiFiルータが使っていたIPアドレス 10.0.0.1 を譲り、WiFiルータは 10.0.0.2 へ変更することにします。

BUFFALO BBR-4MG の設定変更

まず、基本的には製品の説明書にしたがってWAN側のISPとの接続を設定してください。BUFFALO BBR-4MGのWANポートと光回線終端装置などをLANケーブルで接続し、LAN側のポートと有線LANのあるPCを繋いでインターネット接続ができるようにします。パスワード変更などもしておくのがおすすめです。

インターネットへの接続が完了したらブラウザの設定画面の右下にある「アドバンスト」というリンクをクリックしてIPアドレスとDHCPの設定画面に移動します。

BBR-4MG-conf.png

変更箇所は2つで、本体のIPアドレスをもとのWiFiルータと同じにする(今回は10.0.0.1)ことと、DHCPサーバの割り当てIPアドレスを少し後ろにずらすことです。割り当てIPアドレスをずらすのはルータが使っている10.0.0.1以外にも元のWiFiルータが10.0.0.2、Raspberry Piが10.0.0.3などいくつか静的に設定したIPアドレスを使いたいからです。図では10.0.0.129からとしていますが、今回の構成では10.0.0.4からでも構いません。

ネットワークの構成変更

ここまで諸々の設定が終わったらいよいよネットワークの構築です。(BUFFALO BBR-4MGの設定の時点でプロバイダとの接続をいじっている状態ですが)ここでネットワークの図を再掲します。それぞれの機器を図のとおり接続し、電源を入れてください。

home-monitoring-mark.png

と言われてもあまり馴染みのない方だとピンとこないのではと思いましたので、物理配線図(実写)もご用意しました。それぞれ(a)〜(d)のつながりが上の配線図と下の写真で対応しています。

network-photo.png

設定が全てうまくできていれば以下の2点ができるはずです。

  • 元のWiFiルータに接続している機器からインターネット(Google、Yahooなど)へ接続できる
  • ntopが動いているRaspberry Piに接続できる(今回の構成では http://10.0.0.3:3000 をブラウザで開けるはず)

Good Luck!

ntopの出力結果紹介

ここからはntopの機能紹介のようになってしまいますが、実際にこの環境を構築して自宅のネットワークを監視したところ、どのような情報が見れるようになったかを紹介します。(ただntopは今回10年ぶりぐらいに使っていろいろ様変わりしているので、UIの説明についてはちょっと正確ではないかもしれません)

ntop3.png

まず一部の人には馴染みの深いMRTGのようなトラフィック流量です。この日は18時過ぎに帰宅してそのあといろいろ作業を始めたのですが、グラフにも顕著にその様子が現れています。

ntop2.png

自宅のネットワークに接続している機器の一覧(IPアドレス毎)です。どのノードがどれくらい通信をしているのか、通信の中身がアップロードなのかダウンロードなのかもわかります。仮にそこそこの台数をつないだネットワークを運用していて、特定の機器が帯域を専有しているのでは?という懸念がある場合、IPアドレスごとにトラフィック量をみて調査をすることができます。

ntop4.png

さらに機器ごとの詳細を見ると、その機器がどの外部ホストと多く通信をしているのかという視覚化された情報を見ることができます。同じ宛先に対して伸びている帯の太さがトラフィック量の多さを表しています。同じホストに対して複数帯がでているのはアップロードとダウンロードを区別しているようです。このホストは筆者の作業用ホストですが、作業ディレクトリがdropbox内にあるのでファイルを変更するたびにdropboxとsyncをするせいか、dropbox.comとの通信料が極めて多いのがわかります。また、Google Chromeやinboxなどのサービスをつかっているためか、googleとも頻繁に通信をしていることがわかります。

ntop1.png

また、どういう仕組で動いているのかよくわかりませんが、Webサービスごと(Twitter, Google Maps、YouTubeなど)の通信量も計測してくれていました。SNSサービスのトラフィック量はそこまで大したことはないと思いますが、YouTubeなどのストリーミングサービスなどがどれくらい使われているかはネットワークへの影響を見ることができます。

今回導入したntopはどちらかというとトラフィックの傾向分析という側面が強いので、あまりセキュリティに特化した結果はでてきませんでしたが、セキュリティ監視という意味ではOpen Source SoftwareのIDSとしてSnortSuricataThe Bro Network Security Monitorなどがあるので、今後はそれを導入する方法についても試してみたいと思います。

FAQ

というか想定質問。

ISPへの接続が1Gbpsだと何が起きるの?

2つボトルネックがあります。1つはISPと監視するネットワークをつなぐBUFFALO BBR-4MG、もう1つはトラフィックをキャプチャするRaspberry Piのインターフェースです。BUFFALO BBR-4MGについてはこれはもうどうしようもないので上位のルーターに(最低3,000円ほど)置き換えることで解決します。

Raspberry Piについては少しむずかしい問題で、Raspberry Piがもっていてネットワークに使えるのが10/100MbpsのオンボードNICとUSB2.0の口になります。オンボードは100Mbpsが最大なので打ち止めですが、USB2.0は最大データ転送速度が480Mbpsなので USB2.0のGbE対応の変換アダプタにすれば400Mbpsぐらいまでは出るのではないかと推定されます(試してはいません)

これ以上を求めるとなるともうRaspberry Piでは対応しきれないので、別のマシンに置き換える必要があります。余っているマシンなどを持っているのであればそれにGbEのNICをさして同じような構成にするのが良いでしょう。

ただ、最近回線速度が1Gbpsをうたっているサービスがでてきたとはいえ、実際に1Gbpsも実効速度が出ていますか? というか1Gbpsを埋め尽くすほど使っていますか? という問題がまず先にくるような気がするので、まずは一旦Raspberry Piの構成で試してみるのでも良いのではないかと思います。

ちなみにISPとつなぐルータと既存WiFiルータ(もうルータじゃないけど)がGbEになり、ミラー先のRaspberry Piが100Mbpsでも大丈夫なのか?という点については検証した結果、めだった問題は見られませんでした。ミラー側で取りこぼすだけで、ルータ間はちゃんとスループットがでます。

Raspberry Piでパケットキャプチャとかすると負荷は大丈夫? CPUが焼き切れたりしない?

TP-LinkのスイッチとRaspberry Piを入手したあと一番最初に実験しましたが、少なくとも100Mbpsの範囲で通常の使い方をしている限り、OS的なキャプチャ性能に問題はありません。

もう少し細かく書くと、このようなパケットキャプチャ処理では1秒あたりの転送量(byte per second)よりも1秒あたりのパケット処理数(packet per second)の方が性能に影響します。この構成でパケットキャプチャに使っているUSB LAN変換アダプタで計測したところ、110,000ppsほどまでパケットキャプチャできていました。昨今のパケットの平均長は800バイトほどらしいので、これが110,000ppsで流れたとするとOSの処理性能的には概ね700Mbpsまで耐えられる計算になります。(ただし先述したとおりデバイスが100Mbpsなのでそこで打ち止めになります)

なのであとはソフトウェア側の実装(今回はntop)のできの良さに依存するわけですが、実際にtopコマンドなどで目視している限りではほとんど負荷はかかっていないように見えます(一人暮らしですが、デバイスは10台くらい動いています)。というわけで、今回の構成ではほとんど問題になることはないのではないか…と見ています。

Alpine LinuxのRaspberry Piのやつってdisklessだからntopの結果って再起動すると消えるんじゃ…。

はい、その通りで再起動するたびにそれまでとったログなどは綺麗サッパリ消えます。microSDに書き込み可能領域をつくってrddの結果などを保存することも出来るんですが、本来のSDメモリの使い方ではないような気がしたので今回は再起動ごとに記憶喪失になるということで割り切ってます。

まじめにデータを永続的に保存するとしたら別にNAS的なものを立てるか、あるいはHDD/SSDなどをUSB経由でつなぐか…というようなアプローチが考えられますが、それはそれで壮大な物語になるので次回のチャレンジということにしたいと思います。

使ってないWiFiルータがあるから、それをBUFFALO BBR-4MGの代わりにできない?

大丈夫です。ただ気をつけなければいけない点として、WiFi機能はオフにしてください。BUFFALO BBR-4MGの代わりの位置に来たWiFiルータに直接つないでインターネットに出ていってしまうとRaspberry Piで通信を補足することができなくなります。

その他にもRaspberry Piは低電力・低価格ということで選んでいるので、もし余っているマシンなどがあって電気代を気にせず使えるならそれをRaspberry Piに置き換えることも可能です。

2016.12.31 追記

Twitter、はてブなどでコメントを拝見したので拾えるところだけ。

「あまりセキュリティに特化した結果はでてきませんでしたが」ってあるけど、これセキュリティの話じゃなかったのかよ!

セキュリティの話を目的にして出発しているのですが、今回取り上げたntopはセキュリティだけでなくトラフィックチューニングを目的にした側面が強いのでちょっと自信なさげな書きっぷりになりました。ただ、まずどういう通信が発生しているかということを把握するというのも十分セキュリティの一貫ですし、この文章の後に述べたとおりIDSなどを導入すればセキュリティに特化したイベントが検出できるようになります。しかしIDSはこれはこれで使いこなすのがなかなか難しいものではあると思うので、そのあたりについてはまた後日改めて解説をしたためたいと思います。

今回でてきたような結果を見たいんだったらProxyを導入したほうがいいんじゃない?

はい。これはおっしゃる通りで、大きい企業さんだったりするとHTTP Proxyを導入していて通信は全てそこを通らないと出ていけないようになっていることが多いと聞きます。HTTP Proxyを使う方法だと通信をenforceしやすいですし、今回のケースで考えても導入する機器が少なくて済みます。

一方で、今回解説した構成だと基本的に通信の邪魔をすることはないというメリットがあります。HTTP(S) over everythingと思える今日このごろでも、いまだにHTTP/HTTPS以外の通信をしているアプリケーションというのは一定数存在します。そういったアプリケーションを全て排除する or そういったアプリケーションを使うたびに制御ルールを変更する、というようなことができればいいですが、それなりに骨は折れます。何かネットワークがおかしい、みたいなときにはトラブルシュートすべきポイントも増えます。今回の構成では通信は全てミラーするのでそういった影響が極小化できます。

こんなことできるのかよ怖ええ

まず冒頭で書いたとおり、これは自身の管理するネットワークのみで実施してほしい内容になります。みだりにこのようなことをすると法に触れるので注意してください。

ただし、これは裏を返すと法的に問題があっても、技術的にはこのようなことができるということです。自分で管理しているネットワークではあまり意識する必要はないかもしれませんが、よく知らないWiFiネットワークなどに接続した時に悪意ある人物がこれと全く同じか、あるいはもっとひどいことをしていない保証はまったくありません。HTTPSをはじめとする通信の暗号化技術はこういった攻撃をする相手に対して有効な手段なので、これをきっかけにそういった技術に興味を持ってもらえれば幸いです。

441
510
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
441
510