さくらのクラウド VPNルータ入門 2. ポートフォワーディングとファイアウォールで外からのアクセスに対応する

公開:最終更新日:

前回 から「VPNルータ」を取り上げています。インターネットとプライベートネットワークのゲートウェイとして「VPNルータ」を起動することまで説明したので、今回はインターネットからの接続を処理します。内部の「サーバ」で提供するサービスは外部からのアクセスをポートフォワーディングで転送し、それ以外をファイアウォールで遮断します。

目次
  1. ポートフォワーディングにより外部からの接続を受け入れる
    1. SSHとWebのポートフォワーディングを設定する
    2. SSHでログインしてWebサーバーを立ち上げる
  2. ファイアウォール機能で接続を遮断する
    1. デフォルトですべての通信を遮断する
    2. Webアクセスを受け入れるルールを設定する
    3. SSH用のルールを設定する
    4. ステートフルインスペクションとは
  3. 参考リンク

ポートフォワーディングにより外部からの接続を受け入れる

本記事の前提となるネットワーク構成を、コントロールパネルの「マップ」メニューで確認しましょう。次のように「VPNルータ」をゲートウェイとしてインターネット(共有セグメント)とプライベートネットワークが存在し、プライベート側は「スイッチ」を介して1台の「サーバ」が接続されています。

外部のIPアドレスから「VPNルータ」にアクセスがあったとき、ポートフォワーディング(NAT)機能を利用すればプライベート(192.168.0.2)で起動している「サーバ」に対応させることができます。

SSHとWebのポートフォワーディングを設定する

コントロールパネルで「VPNルータ」の詳細画面から「NAT」タブを開き、ポートフォワーディング一覧の右側にある「追加」をクリックします。

まず、プライベートネットワークの「サーバ」にログインして作業できるように、「追加:ポートフォワーディング」画面からSSH(TCP 22番ポート)を追加します。

同様に、今回はWebサーバーを公開したいのでHTTP(TCP 80番ポート)のフォワーディングも設定します。

設定を反映するため右上の「反映」をクリックします。

SSHでログインしてWebサーバーを立ち上げる

ポートフォワーディングが設定できているか試してみましょう。ローカルのコマンドラインから「VPNルータ」の共有セグメント側のIPアドレス(今回は 133.125.238.37)に、SSHで接続します。

$ ssh ubuntu@133.125.238.37

問題なければプライベートネットワークの 192.168.0.2:22 にフォワーディングされ、SSHでログインできます。

ログインできた「サーバ」で、Webサーバーを立ち上げてみましょう。これまでのネットワーク入門でも説明したように、以下のコマンドでパッケージからNGINXをインストールして起動できます。

$ sudo apt update
$ sudo apt install -y nginx
$ sudo systemctl start nginx

ローカルのWebブラウザから http://133.125.238.37 にアクセスすれば、NGINXのデフォルトのトップページが表示されるでしょう。

ファイアウォール機能で接続を遮断する

さくらのクラウドの「VPNルータ」では、送受信の通信がデフォルトでAllow状態であり、すべての送受信が可能となっています。今回のようにポートフォワーディングを設定すると、インターネット上の任意の通信が内部ネットワークに到達できるため、不要な通信を遮断するファイアウォールの設定を推奨します。

VPNルータのファイアウォールではルール一覧の上から評価され、若い番号のルールが先に適応されるため、対象がWebサーバーの場合には以下の順番でルールを記述します。

  1. HTTPの80番(およびHTTPSの443番)ポートのみを開放
  2. デフォルトですべての通信を遮断

このように、より若い番号のルールに「80/443ポートのみを開放」を設定しておけば「すべての通信を遮断」より先に適用され、Web以外の通信はすべてドロップ(遮断)されます。

デフォルトですべての通信を遮断する

VPNルータのファイアウォール機能を設定するには、詳細画面から「ファイアウォール」タブをクリックします。

外部からのアクセスを制御するので「受信方向」一覧の右下にある「+追加」をクリックします。ルールとして以下の項目が設定可能です。

まず、すべての通信を遮断するルールを追加してみましょう。ネットワークやポートを指定しなければ「すべて」となるので、送信元と宛先は空欄のまま「アクション」だけを「deny」に変更して「追加」をクリックします。

ここで通信が遮断されることを確認するため、右上の「反映」をクリックして、Webブラウザで先ほどと同じIPアドレスにアクセスしてください。つながらずタイムアウトすれば成功です。

Webアクセスを受け入れるルールを設定する

続いてHTTP(tcp/80)の通信を許容するルールを追加します。同じく「受信方向」の「+追加」をクリックし、今回は宛先にポートフォワーディング先の 102.168.0.2:80 を指定して「アクション」は「allow」のままとします。

このとき新たなルールは優先順位が低く追加されるので、ルールの右にある「三本線のアイコン」をドラッグして、HTTPを許可するルールが上になるよう順番を入れ替えてください。

これで「反映」を再度クリックし、Webブラウザでアクセスしてみます。NGINXのデフォルトのトップページが表示されれば成功です。

SSH用のルールを設定する

通信を許可する通信としては、もうひとつポートフォワーディングしているSSHがあります。設定の方法は同様ですが、よりセキュアに設定するのなら、例えば特定の拠点(IPアドレス)からのSSHのみを許可するよう「送信元ネットワーク」を指定することもできます。

ステートフルインスペクションとは

ファイアウォール機能はステートフルで動作します。つまり、クライアントからサーバーへの上り通信が通れば、サーバーからクライアントへの戻りの通信も自動で許可されます。

このため「送信方向」で以下のように外向きの通信をすべて禁止していても、Webサーバーへのリクエストに呼応するレスポンスは問題なく動作します。

参考リンク

本記事で紹介した「VPNルータ」の各機能については、さくらのクラウドのマニュアルで下記のページを参照してください。

VPNルータの料金については以下サイトをご確認ください。評価・検証で利用した場合、作業終了後に速やかにサービスを削除することでコストを抑制できます。

※プレミアムプラン以上をご利用の場合、上位に「ルータ+スイッチ」が必要となるため「ルータ+スイッチ」の料金も発生いたします。

亀田治伸
制作者

クラウド事業本部

亀田治伸

兵庫県伊丹市出身、米国州立南イリノイ大学卒業。認証系独立ASP、 動画・音楽配信システム構築、決済代行事業者、外資クラウドエバンジェリスト数社を経て現職。得意領域は、認証、暗号、ネットワークを中心としたセキュリティ、 映像配信、開発手法に見る組織論、クラウドアーキテクチャ、プレゼンテーション。