パケットフィルタリング(ACL)とは?


ACL(Access Control List)は、通信の「許可 / 拒否」を判断するためのルール集合です。
主に以下の項目を基準に通信を制御します:

  • 送信元IPアドレス
  • 宛先IPアドレス
  • プロトコル(TCP/UDP/ICMPなど)
  • ポート番号(80, 443, 22…)
  • TCPフラグ(SYN/ACK など)
  • タイムレンジ(Time-based ACL)
  • ユーザーID(AAA連携時)

ACL は「L3〜L4」で動くフィルタリング機能で、FW の最も基本的なコア機能です。

1. ACL の種類(Cisco基準で理解すると明確)

標準ACL(Standard ACL)

  • 条件:送信元 IP のみ
  • 精度が低い(宛先やポートを見ない)
  • ※FW ではほとんど使われない(ルータ向け)

拡張ACL(Extended ACL)

  • 送信元・宛先IP、プロトコル、ポート番号まで判定
  • Firewall の標準的ACLがこれ

動的ACL(Dynamic / Lock-and-Key)

  • 認証後に一時的にACLを開ける
  • VPNや一時アクセスに使える
  • ASA/FTD ではあまり使わない

時間ベースACL(Time-based ACL)

  • 曜日・時間で ACL を有効化
  • 「業務時間だけ許可」のような運用が可能

2. Firewall での ACL の働き(ルーターと FW は違う)

◆ルーター:

  • ACL = パケットを単純に許可/拒否するだけ

◆Firewall:

  • ACL+ステートフルインスペクションで動作
  • OUT→INの戻り通信は ACL がなくても許可(stateful)

例:
LAN→インターネットへHTTP(80)で外へ出て行く
→ 戻りHTTPの ACK/ESTABLISHED パケットは自動許可。

3. ACL の評価方法(これ重要)

ACL は「上から順に評価」します。

① 先頭から1行ずつ評価

② 最初に条件にマッチした行が適用

③ どれにもマッチしなければ最後に「暗黙の deny」

つまり ACL の最後は必ず拒否
(設定してなくても、自動で)

例:

access-list OUTSIDE-IN extended permit tcp any host 203.0.113.10 eq 443
access-list OUTSIDE-IN extended permit icmp any host 203.0.113.10 echo
access-list OUTSIDE-IN extended deny ip any any   ← 表示されていないが存在

4. ACL 記述の方法(実際の書き方)

◆ TCP/UDP の例

access-list OUTSIDE-IN extended permit tcp any host 203.0.113.10 eq 443

「どこからでも、203.0.113.10 の TCP 443 を許可」

◆ ネットワーク指定

access-list INSIDE-OUT extended permit ip 192.168.10.0 255.255.255.0 any

「192.168.10.0/24 から外部へ向かう全IP通信を許可」

◆ ICMP の例

access-list OUTSIDE-IN extended permit icmp any any echo-reply

◆ オブジェクト(ASA)

object network WEB-SERVER
 host 203.0.113.10

object service HTTPS
 service tcp destination eq 443

access-list OUTSIDE-IN extended permit object HTTPS any object WEB-SERVER

5. ACL の適用(ASAの例)

ACL を作るだけでは動かない。
インターフェースに“バインド”する必要がある。

access-group OUTSIDE-IN in interface outside
  • in … そのインターフェースに入ってくるトラフィック
  • out … インターフェースから出ていくトラフィック

通常は “in” に適用する。

6. ACL の設計ポイント(プロが見る視点)

① 外部 → 内部は「拒否が基本、例外許可」

② 内部 → 外部は「許可が基本、不要通信は拒否」

③ サブネット単位で分類(過剰な any は危険)

④ L3〜L4 のみで限界がある

L7攻撃は ACL では防げない → IPS/URLフィルタ導入へ

⑤ 管理用アクセス(SSH/HTTPS)は最上段で許可

7. ACL の動作確認

ASA:

show access-list

ヒットカウント付きで表示される。

例:

access-list OUTSIDE-IN; 2 elements
access-list OUTSIDE-IN line 1 extended permit tcp any host 203.0.113.10 eq 443 (hitcnt=1543)

8. ACL 運用の失敗例

最後に deny any any があるのを忘れる

→ SSH / HTTPS の管理アクセスが全滅。管理アクセス許可は ACL の最上段に入れる。

INSIDE トラフィックにも不必要な OUT ACL をつける

→ 内部ユーザーが外へ出られなくなる

NAT と ACL の順序を理解してない

→ 「NAT後のIPで ACL 判定」 が ASA 基本

まとめ

ACL(パケットフィルタリング)は FW の基礎だが、
実際はステートフルと NAT と組み合わせて動作するのがポイント。

  • L3/4 で通信の許可・拒否
  • 上から順に評価
  • 戻り通信はステートフルで自動許可
  • NAT後のIPでルール評価(ASA)
  • ACL+インスペクション+IPS で完全防御になる