とりあえずの記録

はじめは同学科の人向けのナレッジまとめでした

はじめてのWebサーバ構築 - [オプション]ネットワークコース

まえがき

この記事は,Google Developer Student Clubs - National Institute of Technology, Kumamoto College2022/12/22に開催したイベント資料のアーカイブです.

オプション講座 - ネットワークコース

はじめに

本講座では,基礎講座で製作したWebサーバについて,インターネットからのアクセスを有効化する方法を示します.
注) 基礎講座・・・Raspberry Pi にNginxをインストールし,起動するまでを実施したものです.

世界中に存在する悪意のあるユーザからの攻撃を受けるリスクがあります.
決して個人情報や他人の著作物などを公開しないでください.

なお本コースに限り,セキュリティコースの内容を修了していることを前提条件とします.
本コース内容の実施を希望する方は,先にセキュリティコースのコマンドを一通り実行してからこちらへ戻ってきていただくようお願いいたします.

リバースプロキシサービスの利用

本来,Webサーバの対外公開を行う場合は以下のような手順を踏む必要があります.

  1. グローバルIPアドレスドメインを取得する.(有料)
  2. ネットワーク機器を適切に設定し,外部との疎通を有効化する.
  3. DNSサーバにレコードを登録し,グローバルIPアドレスFQDN(ドメインを利用した文字列)を紐付ける.
  4. Let's Encryptなどでサーバ証明書を取得し,httpsによる暗号化通信を可能とする.

しかし,ハンズオンイベントの中で行うにはいずれも少々荷の重い作業となります.

よって今回は,ngrok(エングロック)というサービスを利用することで工程を端折って実施してみることにします.
小規模な開発にはとても有用なサービスです.

アクセストークンの取得

ngrokのアカウントを作成し,動作に必要なアクセストークンを入手します.

  1. こちらのページにアクセスし,アカウントを作成してください.
    下部のボタンから,GitHubアカウントやGoogleアカウントを利用して登録しても構いません.

  2. アカウントの作成ができたら,こちらのページにアクセスしてログインします.

  3. 左側メニューから,Your Authtokenをクリックします.
    もし表示されていなければ,Getting Startedのすぐ右にあるボタンを押し,メニューを展開してみてください.

  4. 画面右側に現れる 青いCopyを押します.

これで,クリップボードにアクセストークンがコピーされました.

アクセストークンはパスワードと概ね同様の働きをします.
決して他人に教えたり,他人が見ることのできる領域に保存したりしないよう注意してください.

ngrokの導入

ngrokをダウンロード&インストールします.

  1. はじめに,ngrokの提供元を登録して,aptで参照できるようにします.
    以下のコマンドをコピー&ペーストして実行してください.
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list
  1. 参照先を追加したため,各ソフトウェアに関する情報を更新します.
sudo apt update
  1. ngrok本体をインストールします.
sudo apt install ngrok -y
  1. アクセストークンを設定します.
    このとき,ngrok authtokenのあとに半角スペースを入れた上で,先ほどコピーしたアクセストークンを貼り付けて実行してください. {}は不要です.
ngrok authtoken {取得したAuthToken}

以上で設定完了です.

開通

それでは,WebサーバであるNginxが動作している80番ポートを公開してみます.
以降,sudoは必要ありません.
もしrootユーザで作業している場合は,exitコマンドを実行して一般ユーザに戻ってから以下を実行してください.

  1. 以下のコマンドを実行してください.
ngrok http 80
  1. 出力された文字列の中から,以下に該当する行を探します.
Forwarding  http://~~~/ngrok.io -> http://localhost:80
Forwarding  https://~~~/ngrok.io -> http://localhost:80

このうち,http://~~~/ngrok.ioの部分をChromeなどのブラウザに貼り付けて開いてみてください.
正常に表示されていれば,OKです.

同様にしてhttps://~~~/ngrok.ioの方も開いてみると,httpsを利用した暗号化通信が行われていることが確認できます.

おわりに

ngrokを利用し,簡潔に外部からのアクセスを受けられるようにしました.
今回の演習,お楽しみいただけたでしょうか.
これで,手元の環境で開発したWebアプリケーションをインターネットに公開できます.

なお冒頭にも示しましたが,サーバをインターネット上に公開する行為には相応のリスクが伴います.
いつ,どこから,どのような攻撃が来るか分かりません.
どれだけ気をつけて開発・運用していたとしても,常に未知の脆弱性を突かれる可能性を孕んでいます.

十分な知識と技術を手にするまでは,

  • 漏洩すると困るデータをサーバに保存しないこと
  • 確認を終えたら都度,対外接続を切断すること

をおすすめします.

お疲れさまでした.