ACL(Access Control List)は、通信の「許可 / 拒否」を判断するためのルール集合です。
主に以下の項目を基準に通信を制御します:
- 送信元IPアドレス
- 宛先IPアドレス
- プロトコル(TCP/UDP/ICMPなど)
- ポート番号(80, 443, 22…)
- TCPフラグ(SYN/ACK など)
- タイムレンジ(Time-based ACL)
- ユーザーID(AAA連携時)
ACL は「L3〜L4」で動くフィルタリング機能で、FW の最も基本的なコア機能です。
Contents
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 で完全防御になる