ファイアウォールとは ― 仕組みと種類
ファイアウォールとは、
ファイアウォールとは、通してよい通信だけを通す仕組み
ファイアウォールとは、あらかじめ決めたルールと通信を照合し、許可した通信だけを通して、それ以外は遮断する仕組みです。社内ネットワークとインターネットの境目など、信頼できる範囲と信頼できない範囲の境界に置きます。境界で通信を絞ることで、内側の機器を外からの不正な接続から守ります。
ファイアウォールには、見る場所の違いで、いくつかの方式があります。パケットフィルタリングはIPアドレスやポート番号を見ます。ステートフルインスペクションは行きと戻りの対応を記録します。アプリケーションゲートウェイは通信の中身まで見ます。
ファイアウォールの役割
ファイアウォールは英語のfirewallで、直訳すると「防火壁」です。家やオフィスの実際の壁と同じように、ファイアウォールは境界に立ちます。そして、通してよいものだけを通します。
インターネット上には、内部の機器に許可なく接続しようとする攻撃が常にあります。ファイアウォールが境界にないと、内部の機器は外部からのあらゆる通信を受け取ってしまいます。
ファイアウォールは、通信を通すかどうかを判断する機器です。ネットワークの全体像のページの機器一覧にも載っています。見るのは、第3層〜第4層のIPアドレスとポート番号です。種類によっては、第7層の通信の中身まで見ます。
ルータは「どこへ届けるか」を決め、ファイアウォールは「届けてよいか」を決めます。
パケットフィルタリング
もっとも基本的な方式がパケットフィルタリングです。見るのは、パケットが持つ送信元IPアドレス・宛先IPアドレス・宛先ポート番号・プロトコル(TCP/UDPなど)です。
これらを、管理者があらかじめ用意したルールの一覧と上から順に照合します。最初に一致したルールの、許可または拒否の動作がそのまま適用されます。それ以降のルールは見ません。
ポート番号を持たないICMPは、ポート番号の代わりにタイプで指定します。ICMPを全部止めると困る理由は、ICMPの記事で説明しています。
例として、Webサーバを公開する場合を考えます。WebサーバのIPアドレスは 203.0.113.60 です。あわせて、社内PCだけが外部のDNSサーバに問い合わせられるようにします。社内PCのネットワークは 192.168.10.0/24 です。
| No | 送信元 | 宛先 | 宛先ポート | プロトコル | 動作 |
|---|---|---|---|---|---|
| 1 | any | 203.0.113.60 | 443 | TCP | 許可 |
| 2 | any | 203.0.113.60 | 80 | TCP | 許可 |
| 3 | 192.168.10.0/24 | any | 53 | UDP | 許可 |
| 4 | any | any | any | any | 拒否(暗黙の拒否) |
最後のルール4に注目してください。どのルールにも一致しなかった通信は、最後にまとめて拒否されます。これを暗黙の拒否(implicit deny)と呼びます。通るのは管理者が明示的に許可したルールに一致した通信だけで、それ以外はすべて拒否されます。
ネットワーク機器のACLも、同じ考え方で動きます。上から順に照合し、一致しなければ最後は拒否します。ACLは、アクセスコントロールリストの略です。標準ACLと拡張ACLの違いやワイルドカードマスクの読み方は、ACLの記事にまとめています。
ここで見た方式は、あらかじめ決めたルールだけで照合します。この方式を、静的パケットフィルタリングと呼ぶことがあります。次に見る方式は、通信の状態まで見ます。こちらは、動的パケットフィルタリングと呼ぶことがあります。
動かして確かめる:パケットはどのルールに当たるか
上のルール表を使って、5つのパケットがどのルールに当たるかを確かめられます。当たったルールで、許可か拒否かが決まります。ルールは上から順に照合され、最初に一致したところで判定が確定します。
| No | 送信元 | 宛先 | 宛先ポート | プロトコル | 動作 |
|---|---|---|---|---|---|
| 1 | any | 203.0.113.60 | 443 | TCP | 許可 |
| 2 | any | 203.0.113.60 | 80 | TCP | 許可 |
| 3 | 192.168.10.0/24 | any | 53 | UDP | 許可 |
| 4 | any | any | any | any | 拒否(暗黙の拒否) |
P1:外部PCから自社の公開Webサイトを HTTPS で見る
送信元 198.51.100.20 → 宛先 203.0.113.60:443(TCP)
- ルール1一致 → ここで確定
- ルール2照合しない(確定済み)
- ルール3照合しない(確定済み)
- ルール4照合しない(確定済み)
結果:許可(ルール1が決めた)
P2:外部PCから自社の公開Webサイトを HTTP で見る
送信元 198.51.100.20 → 宛先 203.0.113.60:80(TCP)
- ルール1不一致 → 次のルールへ
- ルール2一致 → ここで確定
- ルール3照合しない(確定済み)
- ルール4照合しない(確定済み)
結果:許可(ルール2が決めた)
P3:社内PCが外部のDNSサーバに問い合わせる
送信元 192.168.10.25 → 宛先 198.51.100.1:53(UDP)
- ルール1不一致 → 次のルールへ
- ルール2不一致 → 次のルールへ
- ルール3一致 → ここで確定
- ルール4照合しない(確定済み)
結果:許可(ルール3が決めた)
P4:外部PCが自社の公開WebサーバのSSH(22番)に侵入を試みる
送信元 198.51.100.20 → 宛先 203.0.113.60:22(TCP)
- ルール1不一致 → 次のルールへ
- ルール2不一致 → 次のルールへ
- ルール3不一致 → 次のルールへ
- ルール4一致 → ここで確定
結果:拒否(ルール4=暗黙の拒否が決めた)
P5:外部PCが自社の公開Webサーバのリモートデスクトップ(3389番)に接続を試みる
送信元 198.51.100.20 → 宛先 203.0.113.60:3389(TCP)
- ルール1不一致 → 次のルールへ
- ルール2不一致 → 次のルールへ
- ルール3不一致 → 次のルールへ
- ルール4一致 → ここで確定
結果:拒否(ルール4=暗黙の拒否が決めた)
P4とP5は、どちらもルール1〜3のどれにも一致しません。そのため、暗黙の拒否である最後のルール4で拒否されています。これは、管理者が許可を書き忘れたからではありません。「許可すると書いていない通信は拒否する」という設計だからです。
ステートフルインスペクション
さきほどのパケットフィルタリングには弱点があります。PCがサーバに接続すると、サーバからPCへ応答が戻ってきます。この戻りの通信も許可しないと、通信は成立しません。
しかし、戻りの通信をルールで許可したとします。すると、その宛先ポート宛てには、外部から新しく通信を始めることまで許可してしまいます。
これを解決するのがステートフルインスペクションです。この方式では、内部から外部へ通信が出て行くとき、その通信の情報を記録しておきます。記録するのは、送信元・宛先のIPアドレスとポート番号などです。記録を置く表を、状態テーブルと呼びます。
戻ってきた通信は、状態テーブルの記録と照らし合わせます。一致すれば、自動的に許可されます。記録のない通信は拒否されます。外部から新しく始まる通信が、これにあたります。
NATの記事で説明したNAPTの変換テーブルも、行きの通信を記録します。そして、戻りの通信をその記録と照合します。この点では、状態テーブルと同じ考え方です。
ただし、NATの変換テーブルは、アドレスを書き換えるための記録です。ステートフルインスペクションの状態テーブルは、通してよいかを判断するための記録です。目的が違うので、NATとファイアウォールは別の機器・別の設定として扱われます。この違いは、後の「NATとの違い」の節で説明します。
現在市販されているファイアウォール製品のほとんどは、パケットフィルタリングにステートフルインスペクションを組み合わせています。この方式をステートフルパケットインスペクション(SPI)と呼びます。
アプリケーションゲートウェイ(プロキシ型)
パケットフィルタリングとステートフルインスペクションは、どちらもIPアドレスやポート番号などヘッダの情報だけを見ています。通信の中身までは見ていません。
中身まで検査したい場合に使われるのがアプリケーションゲートウェイです。プロキシ型ファイアウォールとも呼びます。
アプリケーションゲートウェイは、PCとサーバの間に代理として立ちます。この代理をプロキシと呼びます。PCは、サーバと直接つながるのではなく、いったんプロキシに接続します。
プロキシは、内容を検査したうえで、あらためてサーバへ接続し直します。第7層の通信の中身まで検査できる分、パケットフィルタリングより処理は重くなります。
| 方式 | 見る | 特徴 |
|---|---|---|
| パケットフィルタリング型 | 第3層・第4層(IPヘッダ・TCP/UDPヘッダ) | 送信元/宛先IPアドレス・ポート番号・プロトコルをルールと照合する。処理が軽く、もっとも基本的な方式 |
| ステートフルインスペクション | 第3層・第4層+通信の状態 | パケット単体でなく、行きと戻りの対応関係(状態)を記録して照合する。今のファイアウォールの主流 |
| サーキットレベルゲートウェイ | 第5層(セッションの確立) | TCPのコネクション(セッション)が正しく確立されたかどうかだけを見て中継する。SOCKSなどが例 |
| アプリケーションゲートウェイ(プロキシ型) | 第7層(通信の中身) | PCとサーバの間に代理(プロキシ)として立ち、通信内容そのものを検査してから中継する |
プロキシの仕組み自体は、通信の許可判断とは別の用途にも使われます。たとえば、キャッシュによる高速化や負荷分散です。プロキシの仕組みと、フォワードプロキシ・リバースプロキシの違いは、プロキシの記事で解説しています。
WAFと次世代ファイアウォールの違い
WAF(Web Application Firewall)は、Webアプリケーションへの攻撃を防ぐことに特化した、専用のファイアウォールです。ネットワークの全体像の機器一覧表にも、WAFが載っています。
SQLインジェクションやクロスサイトスクリプティングなど、Webアプリの脆弱性を突く攻撃があります。こうした攻撃は、IPアドレスやポート番号しか見ない通常のパケットフィルタリングでは見つけられません。WAFは、第7層にあたるHTTP/HTTPSの通信の中身を検査します。そして、こうした攻撃のパターンを見つけて遮断します。WAFの検査の方式と限界、置き場所は、WAFの記事にまとめています。AWSのWAFについては、AWS WAFとShieldの記事で説明しています。
一方、次世代ファイアウォール(NGFW:Next Generation Firewall)は、従来のパケットフィルタリングに機能を足したファイアウォールです。IPSという侵入防止の機能なども、取り込んでいます。Webアプリに限らず、幅広い通信を第7層まで検査できます。
IDSは、怪しい通信を見つけて管理者に知らせるだけです。自分では遮断しません。IDSはIntrusion Detection Systemの略で、侵入検知システムと訳します。
IPSは、さらに一歩進みます。見つけた怪しい通信を、その場で遮断します。IPSはIntrusion Prevention Systemの略で、侵入防止システムと訳します。
NGFWは、このIPSの機能を内蔵していることが多いです。ファイアウォールのルール照合に、IPSの攻撃パターン検知を組み合わせています。
置き場所の違いや、誤検知と見逃しは、IDSとIPSの違いの記事を読むと分かります。
| ファイアウォール | WAF | 次世代ファイアウォール | |
|---|---|---|---|
| 見る場所 | 第3〜4層(IP・ポート) | 第7層のうちWebアプリの通信(HTTP/HTTPS)だけ | 第3〜4層に加え、第7層まで幅広く |
| 防ぐもの | 許可されていないIPアドレス・ポートへの通信 | SQLインジェクションなどWebアプリの脆弱性を突く攻撃 | IPS機能などを取り込み、既知の攻撃パターンも検知 |
| 位置づけ | 通信の入り口を絞る基本の壁 | Webサーバの手前に置く専用の壁 | パケットフィルタリングに機能を足した壁 |
WAFは、Webサーバを守る専用の壁です。NGFWは、ネットワークの境界に立つ壁の機能を広げたものです。実際の現場では、両方を組み合わせて使うことも珍しくありません。
ファイアウォールでは防げないもの
パケットフィルタリングとステートフルインスペクションは、許可したIPアドレス・ポート番号あての通信かどうかしか見ません。Webサーバでは、80番・443番などのポートを許可します。いったん許可したポートを経由してくる攻撃は、通常のファイアウォールでは見つけられません。SQLインジェクションのように、正規のリクエストに見せかけた攻撃がその例です。
こうした攻撃を防ぐには、通信の中身まで検査するWAFや、アプリケーションゲートウェイのような仕組みが必要になります。アプリ側の対策は、SQLインジェクションとXSSの記事で説明しています。
他人のID・パスワードを盗み、許可されたポートから正規の手順でログインする手口も、ファイアウォールでは防げません。手口ごとに効く対策は、不正アクセスの記事にまとめています。正規の通信と見分けにくい大量の通信で、サービスを使えなくする攻撃もあります。この攻撃はDoS攻撃・DDoS攻撃の記事で説明しています。
DMZ:公開サーバを置く区画
Webサーバのように、外部から接続を受ける必要のあるサーバを、内部LANと同じ区画に置くとします。そのサーバが乗っ取られると、内部LANの機器まで攻撃者から見えてしまいます。
そこで、外部に公開するサーバだけを専用の区画に隔離して置きます。この区画をDMZ(DeMilitarized Zone)と呼びます。日本語では、非武装地帯と訳します。
インターネットからDMZのWebサーバへは、80番・443番など、公開サービスのポートだけを許可します。そして、DMZから内部LANへの通信は原則として拒否します。
こうしておけば、万が一DMZのWebサーバが乗っ取られても、攻撃者はそこから内部LANの機器へ直接は届きません。内部LANの機器からインターネットへの通信は、これまでどおり許可します。
ファイアウォールを2台使う形と1台使う形の違い、DMZに置くサーバの選び方は、DMZの記事を読むと分かります。
内側を信頼する設計の限界と、それを見直す考え方はゼロトラストの記事にあります。
パーソナルファイアウォール
ここまで説明したファイアウォールは、ネットワークとネットワークの境界に置く専用の機器でした。このような専用の機器を、アプライアンスと呼びます。
一方、WindowsやmacOSには、1台のPC自身を守る機能がOS標準で組み込まれています。この機能をパーソナルファイアウォールと呼びます。Windowsの「Windows Defender ファイアウォール」などが、これにあたります。
考え方は同じです。そのPC宛て・そのPC発の通信をルールと照合し、許可した通信だけを通します。
社内ネットワークの境界にファイアウォール機器があっても、社内の別のPCから攻撃を受ける可能性があります。境界のファイアウォールとパーソナルファイアウォールは、どちらか一方ではなく両方使われるのがふつうです。
NATとの違い:NATは防御の仕組みではない
NATの記事で説明したとおり、家庭用ルータのNATは、変換テーブルに対応するエントリの無い通信を内部に届けられません。ここでのNATは、実際にはNAPTです。
この結果だけを見ると、外部からの通信を防いでいるように見えます。そのため「NATがあればファイアウォールは要らない」と誤解されることがあります。
しかし、NATはIPv4アドレスを節約するために作られた変換技術です。通してよい通信かどうかを判断するために作られた仕組みではありません。理由は次の4つです。
- 1
外から
届かないのは、 判断ではなく 変換の 副作用 NATは「この通信は許可する・この通信は拒否する」というルールを持ちません。単に対応関係を変換テーブルに記録しているだけです。外部からの新しい通信が届かないのは、記録が無いことの副作用にすぎません。
- 2
ポート開放や
UPnPで 固定の 入口が できると、 送り主を 問わず 届く ポート開放では、固定の変換エントリを用意します。機器が自動で同じことを行う仕組みもあり、UPnP(Universal Plug and Play)と呼びます。こうした入口には、送信元を問わず、どこからでも通信が届くようになります。NATは、送信元を選んで通す仕組みではありません。ポート開放とUPnPの仕組みと注意点は、ポート開放の記事にまとめています。
- 3
実装に
よっては、 通信相手以外からも 届く ことがある 「NAPT(IPマスカレード)」で説明したとおり、戻りのパケットの送信元をどこまで厳しく照合するかは、ルータの実装によって幅があります。照合が緩い実装では、最初の通信相手以外からの通信が、変換テーブルのエントリに一致して内部に届いてしまうことがあります。
- 4
IPv6では
NATを 使わないのに、 ファイアウォールは 必要 IPv6の記事で説明したとおり、IPv6はアドレス空間が広大なため、NATを基本的に使いません。それでも、ファイアウォールは必要です。NATとファイアウォールは、そもそも役割が別だからです。
家庭用ルータの多くは、NAPT機能とファイアウォール機能の両方を1台に持っています。1台にまとまっているため、境目が意識されにくくなります。
NATの目的は、アドレスを節約することです。ファイアウォールの目的は、通してよい通信かを判断することです。2つは、目的の異なる別々の機能です。
練習問題(全5問)
正解:あらかじめ決めた
ファイアウォールは、
正解:ルールに
パケットフィルタリングは、
正解:
ステートフルインスペクションは、
正解:WAFは
WAFは、
正解:NATは
NATは、
選んでから「採点する」を押すと、解説つきで答え合わせができます。
関連記事
おすすめの本 PR
この記事の内容を扱っている本です。
