
【CCNA_2】ACLとファイアウォールは何が違う?|似ているようで違う役割を整理
CCNAの勉強をしていると、
「ACLで通信を許可・拒否できるなら、ファイアウォールと何が違うの?」
という疑問が出てきました。
どちらも、
通していい通信と、通してはいけない通信を判断するもの
という意味では似ています。
でも、実際には通信を見る方法や役割に違いがあります。
今回は、ACLとファイアウォールの違いを整理します。
そもそもACLとは?
ACLは、
Access Control List(アクセスコントロールリスト)
の略です。
ルーターやL3スイッチなどに設定し、条件に一致するパケットを
permit(許可)
または
deny(拒否)
するために使います。
CiscoのACLは複数のpermit/deny条件を上から順番に確認し、最初に一致した条件に従ってパケットを処理します。
そのため、ACLではルールを書く順番も重要です。
また、どの条件にも一致しなかった通信は、最後に存在する暗黙のdenyによって拒否されます。
ACLは何を見て通信を判断する?
ACLにはいくつか種類があります。
CCNAで特に重要なのが、
標準ACL
と
拡張ACL
です。
標準ACLでは、主に送信元IPアドレスを条件に通信を制御します。
一方、拡張ACLでは、
* 送信元IPアドレス
* 宛先IPアドレス
* TCPやUDPなどのプロトコル
* ポート番号
など、より細かい条件を指定できます。
たとえば、
「192.168.1.0/24から来た通信を許可する」
「あるネットワークからWebサーバーのTCP 443番ポートへの通信だけ許可する」
といった設定ができます。
つまりACLは、
そのパケットが設定した条件に一致するかどうか
を見て、通信を許可・拒否する仕組みです。
じゃあファイアウォールと何が違う?
ここが今回一番気になったところです。
ファイアウォールもIPアドレスやポート番号などを使って通信を制御できます。
それなら、
ACLとやっていることは同じでは?
と思いました。
大きな違いのひとつが、
通信の状態を追跡できるかどうか
です。
一般的なACLによるパケットフィルタリングは、基本的にそれぞれのパケットを設定された条件と照らし合わせて判断します。
一方、ステートフルファイアウォールは、
そのパケットが、どの通信の流れに属しているのか
まで把握して判断します。
ステートレスとステートフル
この違いを理解するうえで出てくるのが、
ステートレス(Stateless)
と
ステートフル(Stateful)
です。
ACLによる基本的なパケットフィルタリングは、ステートレスな制御として考えることができます。
つまり、
それまでどんな通信が行われていたかを基本的には記憶せず、そのパケット単体を条件と照らし合わせる
という考え方です。
一方、一般的なファイアウォールではステートフルインスペクションが利用されます。
こちらは、
通信の状態を記録しながら判断する
仕組みです。
⸻
Webサイトを見る場合で考えてみる
たとえば社内PCからWebサイトを開いたとします。
PCから外部のWebサーバーへ通信を送ります。
PC
↓
ファイアウォール
↓
Webサーバー
当然、そのあとWebサーバーからPCへ返事が返ってきます。
ステートフルファイアウォールは、
「さっき内部のPCから始まった通信だ」
という接続情報を記録しています。
そのため、Webサーバーから返ってきたパケットについても、
新しく外部から突然送られてきた通信ではなく、内部から開始された通信への戻り通信
だと判断できます。
これが、
通信の状態を追跡する
ということです。
ACLの場合はどうなる?
基本的なACLでは、
「これはさっき内部から開始した通信への返事だ」
というように、通信全体の状態を追跡して判断するわけではありません。
設定された条件に、
そのパケットが一致するか
を確認します。
そのため、双方向の通信を制御するときには、
戻ってくる通信についても、どの通信を許可するのかを考える必要があります。
ここが、ACLによる単純なパケットフィルタリングとステートフルファイアウォールの大きな違いです。
⸻
イメージで考えると
ACLは、
「あなたは誰?どこから来た?どこへ行く?何番ポート?」
という条件を確認する門番。
条件に一致すれば通し、一致しなければ拒否します。
一方、ステートフルファイアウォールは、それに加えて、
「この通信は、さっき中から出ていった通信の続き?」
というところまで確認する門番。
そんなイメージで考えると分かりやすいです。

ファイアウォールはさらに多くの情報を見ることもある
現在のファイアウォールには、単純にIPアドレスやポート番号だけを見るものだけではありません。
製品や機能によっては、
* アプリケーション
* ユーザー
* URL
* 通信内容
* 不正な通信パターン
など、より多くの情報を使って通信を制御できます。
たとえば同じTCP 443番ポートを使う通信でも、
単純に、
「443番だから許可」
と判断するだけではなく、
実際にどのようなアプリケーションの通信なのか
まで識別できるファイアウォールもあります。
こうした高度な機能を持つものとして、NGFW(Next-Generation Firewall)などがあります。
じゃあACLはファイアウォールより劣っている?
ここまで見ると、
「ファイアウォールの方が高機能なら、ACLはいらないのでは?」
と思ってしまいます。
でも、そういうわけではありません。
ACLはシンプルに通信をフィルタリングできるため、
* 特定のネットワークからの通信を拒否する
* 特定の通信だけを許可する
* ルーターへの管理アクセスを制限する
* 不要な通信をネットワークの途中で止める
といった用途で使われます。
つまり、
ACLとファイアウォールは完全にどちらか一方を選ぶものではなく、それぞれ役割が違う
ということです。
実際のネットワークでは、ルーターのACLとファイアウォールを組み合わせて通信を制御することもあります。
「ACL=ステートレス」と覚えていい?
CCNAの勉強としては、
基本的なACL=ステートレス
ステートフルファイアウォール=通信状態を追跡する
という整理で理解しやすいと思います。
ただし、
「ACLという言葉が出てきたら、どんな場合でも絶対にステートレス」
とまで言い切るのは少し注意が必要です。
Ciscoの機器にも、動的なACLやファイアウォール機能とACLを組み合わせる仕組みがあります。
そのため、
CCNAで学ぶ基本的なACLによるパケットフィルタリングはステートレス
と覚えておくのが安全そうです。
今回のまとめ
今回一番覚えておきたいのは、
ACL
→ パケットを設定された条件と照らし合わせてpermit/denyする。
ステートフルファイアウォール
→ パケットの条件だけでなく、通信の状態も追跡して判断する。
という違いです。
かなりざっくり言えば、
ACLは「このパケットを通していい?」を見る
ステートフルファイアウォールは「このパケットは、どんな通信の流れの中にいる?」まで見る
と考えると理解しやすくなりました。
そして、ACLとファイアウォールは、
どちらか片方があればもう片方はいらない
という関係ではありません。
それぞれの特徴を使い分けながら、ネットワークの通信を制御します。
次に気になったのが、
「ステートフルとステートレスって、結局どういう仕組みなの?」
というところ。
次はこの違いをもう少し詳しく整理してみようと思います。
※この記事は初学者が学習の中で調べながらまとめた内容になります。
先輩エンジニアの皆さま、間違いや誤解があるなという箇所や追加の補足情報などありましたらご指摘いただけますと大変ありがたいです🙇♂️
関連記事
・前回「【CCNA_1】ハードウェア型とソフトウェア型のファイアウォール、結局どう違う?」
・次回「【CCNA_3】ステートフルとステートレスは何が違う?|通信の「状態を見る」とは」