XG Firewall v18でLAN内のホストをインターネットに公開する

この記事で実現すること

XG Firewall v18において、LAN内のホストをインターネットへ公開できます。また日本国内からのアクセスに限るなど、防御を高めます。

今回の説明の環境について

インターネットから宅内の環境に対し、VPNを使わず直接アクセスするケースを説明します。ネットワークストレージ(NAS)へのアクセスやWebサーバーのコンテンツ公開を対象としています。この記事ではインターネット側にホームゲートウェイ、その内側にXG Firewallがあり、さらに内側にLANがある事を前提とします。XG Firewallでは、一般的なルーターと同じように内部のホストをインターネットに公開するためには設定が必要となります。一般的な用語でもありますが、Sophosでは、このような外から内へのパブリックIPとプライベートIPとの変換を伴う接続形態をDNAT(Destination NAT)と呼んでいます。

設定においては、上記の2つのサブネット(XGのWAN側、LAN側)があり、ホームゲートウェイ側からXGのWANインタフェースに対するポートフォワード、そしてXGからLAN内にあるホストへのポートフォワードとの2段階のポート転送が必要です。

ご注意

この記事はあくまで技術的にホストを公開する方法について記述していますが、昨今のサイバー攻撃はランサムウェアが猛威を奮っています。個人が行うサイバー攻撃対策ではとうてい太刀打ちできませんので、リスクを認識の上で設定してください。なお、インターネットから自宅のリソースへのアクセスは2要素認証付きのVPNによる接続をお勧めします。「XG Firewall VPNについて」の記事を参照してください。

サーバーアクセスアシスタント

v18では、サーバーアクセスアシスタントというウィザード形式で設定できる仕組みが導入されています。もちろん、このウィザードを使わなくてもDNATの設定は可能ですが、今回はウィザードを利用し設定します。

ホスト公開設定

一般的な設定例として、内部にあるWebサーバーのhttpsアクセス(Port443)をインターネットから接続するケースで説明します。パブリックIPのPort443プライベートIPのPort443に着信させる実例です。

ホームゲートウェイの事前設定

VPNの導入の記事でも書きましたが、まずはインターネットから内部のホストにデータを届けるためには、ホームゲートウェイとXGそれぞれに設定する必要があります。以下のように、ホームゲートウェイでPort443のトラフィックをXGのWAN側IPアドレスに転送します。

この画面はホームゲートウェイの画面であり、契約しているインターネット回線業者により、提供される機器は異なりますのであくまで設定例という事で参考までに掲載しています。

サーバーアクセスアシスタントの設定

サーバーアクセスアシスタントを使ったDNATを設定します。まずXGの左ペインメニューから、ルールとポリシーを選択します。ルールの上にあるファイアウォールルールの追加をクリックし、サーバーアクセスアシスタントDNATをクリックします。そうすると以下のウィザード画面が表示されます。

ここでは、LANに設置してある、公開したいサーバーのIPとそのホストの名前を入力します。ここで入力したホストの名前とIPアドレスの組みは自動的にXGのIPホストとして登録されます。今回のケースではWebサーバーとそのIPアドレスを入力しています。入力後、次へをクリックします。

2画面目では、以下のように公開したいパブリックIPアドレスを入力する画面となります。

これはパブリックIPアドレスからプライベートIPへ変換するためのマッピング情報の元となるものです。但し、注意点として、ここでの構成はあくまでホームゲートウェイによってプライベートIPに変換された後のXGのWAN側IPアドレス(つまりプライベートIPアドレス)を入力する事になります。XGのWAN側インターフェースのIPアドレスである、#Port2を選択し、次へをクリックします。

3画面目では、内部に転送するサービスを選択します。Port443のHTTPSを選択しています。

選択後、次へをクリックします。
4画面目では、外部の送信元ネットワークとデバイスを選択します。

表現が難しいのですが、WAN側のネットワークに制約を加える場合はここにネットワークの追加を行い、任意の設定を外す事になります。今回は、一旦はこのまま次へをクリックします。

5画面目では、これまで設定してきた内容の確認画面となります。画面の後半にNATルールを3つ作成しますという記述があります。DNAT以外の2つは不要なので後から削除する事になりますが、これは後ほど説明します。

保存して完了するをクリックしてください。これで、DNATの設定が完了しました。ルールとポリシーでは、作成されたルールは以下のようになっています。 ファイアウォールルールの一番上に新しいルールDNAT to xxxxが追加されています。引き続き、NATルールを見てみます。以下のように3つのルールが作成され、1番上にDNATルールが表示されています。

これでひとまず設定は完了しています。これでインターネットから内部ホストへアクセス出来るようになりました。

DNSにプライベートIPを登録

さて、インターネットからパブリックIPを使って内部ホストへアクセス出来るようになりました。一般的にはダイナミックDNSなどを用いてURLでアクセスする事になります。しかし宅内のLAN環境に入り当該サーバーへ同じURLを使って接続する場合は、わざわざパブリックIPにする事はなく、直接LANのプライベートIPに対してアクセスする事になります。この場合は、XGのDNSでスタティックとしてプライベートIPを登録します。左ペインのネットワークからDNSを選び、DNSホストエントリで、サーバーのURLとプライベートIPの組み合わせを登録してください。クライアントはXGのDHCPによってDNSがXG自身である事を指定されているため、当該ホストについてはプライベートIPでアクセス可能となります。

DNATのウィザードで作成されるルールの詳細

ウィザードでは、シンプルにまずは繋がる事を優先に最低限度の設定を行いました。まずDNATの理解を深めるために、ウィザードで作成されたファイアウォールルールのDNATについて見てみましょう。

  • 送信元とゾーンは、WAN
  • 宛先ゾーンは、LAN
  • サービスは、HTTPS

以上のように、それなりに理解出来るものが記載されています。しかし理解が進まないのは、宛先ネットワーク#Port2、つまりXGのWAN側IPアドレスが記述されている点です。宛先として直感ではLAN側のインタフェースである、#Port1のように感じます。まして、転送したいWebサーバーのホスト名が記載されている項目はここにはありません。実際のHTTPSのアクセスである、Webサーバーに転送するという項目はNATルールで記載されています。XG Firewll v18におけるDNATはポリシールールとNAT変換ルールはそれぞれ独立しているのです。

  • Loopback NAT(不要)
    これはヘアピンNATとも呼ばれますが、内部ネットワークからパブリックIPアドレスを用いて再び内部ネットワークにある公開サーバーへアクセスしたい場合に使います。XGがWANの外に出ていこうとするトラフィックを無理やり内部の公開サーバーに振り向ける動作です。前述したとおり内部のホストには、DNSに登録したプライベートIPでアクセスするので不要です。
  • Reflexiv NAT(不要)
    これは普通に内部ホストからWAN向けのNATを伴う変換ルールです。インストール直後のSNAT(ソースNAT ※送信元アドレスを書き換える一般的なNAT)のルールが最初から存在している事、「XG Firewall v18のルールを作成する」において、To InternetというSNATのルールを作成しているので改めての作成は不要です。

インターネットの接続可能な範囲を絞る

公開するホストが国内からのアクセス用途に限定できるならば、少しFirewallらしい設定を加えてみましょう。ウィザードの4画面目で、任意とした外部の送信元ネットワークを活用します。もし、このWebサーバに対して日本国内からのアクセスに限れば、海外からの攻撃を防ぐ事ができます。この場合は、作成済みのDNATルールの送信元ネットワークとデバイス任意を外し、Japanを加えてください。