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

前回 から「VPNルータ」を取り上げています。インターネットとプライベートネットワークのゲートウェイとして「VPNルータ」を起動することまで説明したので、今回はインターネットからの接続を処理します。内部の「サーバ」で提供するサービスは外部からのアクセスをポートフォワーディングで転送し、それ以外をファイアウォールで遮断します。
- ポートフォワーディングにより外部からの接続を受け入れる
- SSHとWebのポートフォワーディングを設定する
- SSHでログインしてWebサーバーを立ち上げる
- ファイアウォール機能で接続を遮断する
- デフォルトですべての通信を遮断する
- Webアクセスを受け入れるルールを設定する
- SSH用のルールを設定する
- ステートフルインスペクションとは
- 参考リンク
ポートフォワーディングにより外部からの接続を受け入れる
本記事の前提となるネットワーク構成を、コントロールパネルの「マップ」メニューで確認しましょう。次のように「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サーバーの場合には以下の順番でルールを記述します。
- HTTPの80番(およびHTTPSの443番)ポートのみを開放
- デフォルトですべての通信を遮断
このように、より若い番号のルールに「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ルータの料金については以下サイトをご確認ください。評価・検証で利用した場合、作業終了後に速やかにサービスを削除することでコストを抑制できます。
※プレミアムプラン以上をご利用の場合、上位に「ルータ+スイッチ」が必要となるため「ルータ+スイッチ」の料金も発生いたします。





