L2セキュリティ(スプーフィング対策/IP・ARP系)

目次

IPソースガードとは

IPソースガードは、ネットワーク上で「送信元IPアドレスのなりすまし」を防ぐためのセキュリティ機能です。
簡単に言えば、「そのポートから流れてくるIPアドレスが正しい利用者のものかどうか」をスイッチが確認し、不正な場合は通信を遮断します。

この機能は、特に DHCPスヌーピング と連携して動作する点が特徴です。つまり、DHCPスヌーピングで作られた「バインディングテーブル」が前提となります。

フィルタリングの仕組み

IPソースガードは以下の情報を利用して、トラフィックをチェックします。

  • DHCPスヌーピングバインディングテーブル
    DHCPによって割り当てられた「MACアドレス・IPアドレス・VLAN・ポート番号」の対応表
  • 手動で設定されたバインディングテーブル
    管理者が静的に定義した対応表

スイッチは、受信したフレームの 送信元IPアドレス・MACアドレス・ポート番号 をテーブルと照合します。一致すれば正規の端末として通信を許可し、一致しなければ不正な通信として破棄します。

ここで重要なのは、IPソースガードが有効化されたポートでは スイッチが自動的にアクセス制御リスト(PACL)を生成して適用する という点です。管理者が手動でACLを用意する必要はありません。

利用条件と制約

  • 前提条件
    DHCPスヌーピングが有効であること。これがなければIPソースガードは利用できません。
  • 適用可能なポート
    IPソースガードは「Untrustedポート」に対して設定します。
    適用できるのは アクセスポート または トランクポート といったL2ポートに限られます。

つまり、DHCPスヌーピングによって「どのIPがどのポートで使われているか」を記録し、その情報を元に「IPソースガード」で不正な送信元を防ぐ、という二段構えの仕組みになります。

試験対策としては、「DHCPスヌーピングとIPソースガードはセットで使う」「Untrustedポートで動作」「L2ポートにのみ設定可能」という点を必ず押さえておくことが大切です。

IPソースガードの設定手順

IPソースガードを使うためには、前提条件として DHCPスヌーピング が有効化されている必要があります。まずはグローバル設定と対象VLANの指定を行い、その後にポートごとにIPソースガードを有効にします。

DHCPスヌーピングの前提設定

まずはスイッチ全体でDHCPスヌーピングを有効化します。

(config)# ip dhcp snooping

次に、どのVLANでDHCPスヌーピングを有効にするかを指定します。

(config)# ip dhcp snooping vlan vlan-id [ smartlog ]

さらに、DHCPメッセージに含まれる Option 82(リレー情報)の挿入と削除を許可します。

(config)# ip dhcp snooping information option

IPソースガードの有効化

IPソースガードは、対象のインターフェイス設定モードで以下のいずれかを選んで有効化します。

① IPアドレスによるフィルタリング

送信元IPアドレスのみを検証します。
受信フレームの送信元IPが、DHCPスヌーピングバインディングテーブル(または静的に定義したバインディングテーブル)と一致した場合に通信が許可されます。

(config-if)# ip verify source

② IPアドレスとMACアドレスの両方によるフィルタリング

送信元IPアドレスに加えて、送信元MACアドレスも照合します。両方が一致した場合のみ通信を転送します。
この設定を利用する場合、DHCPサーバ側が Option 82 をサポートしている必要があります。

(config-if)# ip verify source port-security

静的バインディングの追加(任意設定)

特定の端末に対して、手動で「IPアドレスとMACアドレスの対応」を設定することもできます。
これによりDHCPを使わない端末でもIPソースガードを適用可能です。

(config)# ip source binding mac-address vlan vlan-id ip-address interface interface-id

設定例

以下は VLAN100・200・300 でDHCPスヌーピングを有効にし、

  • FastEthernet 0/1~0/24 に接続されたクライアントポートでIPソースガードを有効化(送信元IPのみ検証)
  • GigabitEthernet 0/1 をDHCPサーバ用のTrustedポートに設定

する例です。

SW1(config)# ip dhcp snooping
SW1(config)# ip dhcp snooping vlan 100,200,300
SW1(config)# ip dhcp snooping information option

SW1(config)# interface range fastethernet 0/1 - 24
SW1(config-if)# switchport mode access
SW1(config-if)# switchport access vlan 100
SW1(config-if)# spanning-tree portfast
SW1(config-if)# ip verify source

SW1(config)# interface gigabitethernet 0/1
SW1(config-if)# switchport mode trunk
SW1(config-if)# switchport trunk allowed vlan 100,200,300
SW1(config-if)# ip dhcp snooping trust

確認コマンド

設定後は以下のコマンドで状態を確認します。

  • show ip verify source
    → IPソースガードの有効化状況、利用中のバインディング情報を確認
  • show ip source binding
    → VLANやポートごとのバインディングテーブルを確認

・IPソースガードは DHCPスヌーピング必須
・適用対象は Untrustedポート
・アクセスポートやトランクポート(L2ポート)にのみ設定可能。
・「IPのみ照合」か「IP+MAC照合」の2種類がある。

ここは出題頻度が高いため、特に「デフォルトではどのポートがUntrustedか」「どの情報と照合するのか」を明確に覚えておくことが重要です。

ARPスプーフィングとは

ARPスプーフィングとは、LAN内で使われる ARP(Address Resolution Protocol) を悪用した攻撃のひとつです。本来、ARPは「IPアドレスから対応するMACアドレスを問い合わせる仕組み」で、正常な通信のために欠かせない役割を担っています。

しかしこの仕組みには認証の仕組みがなく、誰が送ったARP応答であってもクライアントがそのまま受け入れてしまうという弱点があります。攻撃者はこの弱点を突き、偽のARP応答を送りつけることで「自分を正規の通信相手に見せかける」ことが可能になります。これがARPスプーフィングです。

結果として、被害者は本来ルータやゲートウェイに送るはずのパケットを攻撃者へ転送してしまい、攻撃者による盗聴や改ざんが可能になります。

攻撃の流れ

ARPスプーフィングの典型的な流れを整理すると次のようになります。

  1. 正規クライアントからのARP要求
    例えばホストAがゲートウェイに通信したいとき、「このIPアドレスに対応するMACアドレスは?」とARP要求をブロードキャストします。
  2. 正規ルータからのARP応答
    ゲートウェイのルータは自身のMACアドレスを含む正しいARP応答を返します。
  3. 攻撃者からの偽ARP応答
    攻撃者は、ルータに成りすましたARP応答をブロードキャストで送信します。しかも、何度も繰り返し送るため正規応答を上書きしてしまいます。
  4. 被害者が不正な情報をキャッシュ
    ホストAはARPテーブルに攻撃者のMACアドレスを登録してしまい、本来ルータに送るはずのパケットを攻撃者に送ってしまいます。

このようにして攻撃者は「通信経路の中間」に入り込み、盗聴や改ざんを行えるようになります。この手法は Man-in-the-Middle攻撃(中間者攻撃) の代表例でもあります。

攻撃の応用例

攻撃者は単にホストAだけを騙すのではなく、ルータ側(ルータB)に対しても偽ARP応答を送ることができます。
この場合、ホストAとルータBの両方が「通信相手のMACアドレスは攻撃者のもの」と信じてしまうため、攻撃者は完全に通信の中継点となり、双方向のトラフィックを盗聴したり改ざんしたりできます。

なぜ不正ARP応答が受理されるのか

「ARPパケットの送信元IPアドレスとMACアドレスが、実際のIPヘッダやEthernetヘッダと食い違っていたら弾かれるのでは?」と思うかもしれません。しかし、ARPには厳格な検証機構がなく、また Proxy ARP のような正規機能をサポートするために、こうした不正なARP応答も受理されてしまいます。

この仕組みが、ARPスプーフィングが成立してしまう大きな理由です。

・ARPはLAN通信に不可欠だが、認証や検証の仕組みがないため脆弱。
・攻撃者が偽のARP応答を送ると、被害者のARPテーブルが書き換えられる。
・結果として盗聴・改ざんが可能になり、代表的な 中間者攻撃 の一種となる。

ここはセキュリティ関連の出題範囲として重要な部分なので、必ず整理して覚えておく必要があります。

DAI(Dynamic ARP Inspection)とは

DAI(ダイナミックARPインスペクション)は、LAN上でやり取りされる ARPパケットを検査 し、不正なARP応答を防ぐセキュリティ機能です。ARPスプーフィングのように攻撃者が偽のARP応答を送ってきても、スイッチがそのパケットを受け取り、内容を検証して破棄することで被害を防ぎます。結果として、正規のARP応答だけが転送され、クライアントが誤ったARP情報をキャッシュすることを防止できます。

DAIは、ARPパケットに含まれる IPアドレスとMACアドレスの対応関係 を検証することで正当性を確認します。この際に利用されるのが「バインディングテーブル」です。

DAIで使用されるバインディングテーブル

DAIではネットワーク環境に応じて次のいずれかを利用します。

ネットワーク環境必要な仕組み利用されるバインディングテーブル
DHCP環境DHCPスヌーピングが必要DHCPスヌーピングバインディングテーブル
非DHCP環境不要スタティックに設定されたIPとMACの対応表

ここで重要なのは、DHCP環境ではDAIはDHCPスヌーピングと連携するが、非DHCP環境ではスタティック設定で単独運用可能 という点です。DHCPスヌーピングやIPソースガードと違い、DAIは必ずしもDHCPスヌーピングを前提としません。

DAIのインターフェース区分

DAIを有効化すると、すべてのポートはデフォルトで「信頼できない(Untrusted)」として扱われます。そのため、特別な設定をしなければARP検査が行われます。

インターフェース設定コマンド説明
信頼できるインターフェース(Trusted)ip arp inspection trustこのポートではDAIによる検査を行わない(例:DHCPサーバやルータが接続されるポート)
信頼できないインターフェース(Untrusted)設定不要(デフォルト)このポートで受信したARPパケットはDAIによる検査対象となる

試験では「DAIはデフォルトでUntrusted」「Trustedにする場合だけ明示的に設定」という点が狙われやすいです。

DAIによる検査の流れ

DAIが有効なスイッチ上でのARP検査の流れは次の通りです。

  1. 信頼できないポートから送られたすべてのARP要求およびARP応答をスイッチが受信する。
  2. スイッチはそのARPパケットに含まれる IPアドレスとMACアドレスの組み合わせ をバインディングテーブルと照合する。
  3. バインディングテーブルに存在しない組み合わせであれば、そのARPパケットを破棄する。

つまり、DAIは「ARP応答が正しい送信元からのものかどうか」を逐一確認し、不正な応答をネットワークに流さない仕組みです。

・DAIは ARPスプーフィング対策 に使う。
・DHCP環境では DHCPスヌーピングのバインディングテーブル を利用。
・非DHCP環境では スタティックにIPとMACを紐づけて定義 すれば動作する。
・デフォルトで全ポートがUntrusted、Trustedにするには ip arp inspection trust を設定する必要がある。

特に「DHCPスヌーピング必須かどうか」「Trusted/Untrustedの扱い」は出題頻度が高いため確実に覚えておく必要があります。

Dynamic ARP Inspection(DAI)の設定方法

DAIは、DHCP環境と非DHCP環境で設定方法が異なります。どちらの場合もVLAN単位で有効化し、必要に応じてインターフェースを信頼できるポート(Trusted)に指定します。デフォルトではすべてのポートが信頼できないポート(Untrusted)です。

DHCP環境でのDAI設定

基本設定コマンド

まずDHCPスヌーピングを有効化し、対象のVLANを指定します。その後、DAIを有効化します。

(config)# ip dhcp snooping
(config)# ip dhcp snooping vlan vlan-id
(config)# ip arp inspection vlan vlan-id

必要に応じてスマートロギングを有効にできます。

(config)# ip arp inspection smartlog

DHCPサーバや上位ネットワークに接続されるポートは信頼できるポートに指定します。

(config)# interface interface-id
(config-if)# ip arp inspection trust

設定例(DHCP環境)

VLAN100でDAIを有効化し、FastEthernet0/1~0/24をクライアント用のUntrustedポート、GigabitEthernet0/1をバックボーン接続のTrustedポートにする例です。

Catalyst(config)# ip dhcp snooping
Catalyst(config)# ip dhcp snooping vlan 100
Catalyst(config)# ip arp inspection vlan 100

Catalyst(config)# interface range fastethernet 0/1 - 24
Catalyst(config-if)# switchport mode access
Catalyst(config-if)# switchport access vlan 100
Catalyst(config-if)# spanning-tree portfast

Catalyst(config)# interface gigabitethernet 0/1
Catalyst(config-if)# switchport mode trunk
Catalyst(config-if)# ip dhcp snooping trust
Catalyst(config-if)# ip arp inspection trust

非DHCP環境でのDAI設定

DHCPを使わない環境では、ARP ACLを作成して正規のIPアドレスとMACアドレスの対応を定義し、それをVLANに適用します。

ARP ACLの作成

(config)# arp access-list acl-name
(config-arp-acl)# permit ip host sender-ip mac host sender-mac [ log ]

VLANへの適用

(config)# ip arp inspection filter acl-name vlan vlan-range [ static ]

staticを指定するとACLにないARPパケットはすべて破棄されます。指定しない場合はDHCPスヌーピングバインディングテーブルを参照します。

Trustedインターフェースの設定

(config)# interface interface-id
(config-if)# ip arp inspection trust

設定例(非DHCP環境)

ホスト(IPアドレス192.168.0.10、MACアドレス1111.2222.aaaa)を許可し、その設定をVLAN100に適用する例です。

Catalyst(config)# ip arp inspection vlan 100

Catalyst(config)# arp access-list HOST01
Catalyst(config-arp-acl)# permit ip host 192.168.0.10 mac host 1111.2222.aaaa

Catalyst(config)# ip arp inspection filter HOST01 vlan 100

Catalyst(config)# interface gigabitethernet 0/1
Catalyst(config-if)# switchport mode trunk
Catalyst(config-if)# ip arp inspection trust

DHCP環境ではDHCPスヌーピングのバインディングテーブルを利用し、非DHCP環境ではARP ACLを利用する。DAIを有効化するとすべてのポートがUntrustedとなり、Trustedにするには明示的にip arp inspection trustを設定する。VLAN単位で有効化する仕組みであることを必ず押さえておくことが重要です。

DAI(Dynamic ARP Inspection)の任意設定

DAIはARPスプーフィング対策として非常に有効ですが、さらに運用を強化するために任意設定を加えることができます。ここでは代表的なオプションを整理します。

着信ARPパケットのレート制限

スイッチのCPUはARPパケットを検査するため、攻撃者が大量のARPを送りつけるDoS攻撃を仕掛けてきた場合に備え、Untrustedポートにはデフォルトでレート制限がかかっています。

  • デフォルト値:15 pps(1秒間に15パケットまで)
  • バースト間隔:1秒

制限を変更するコマンドは以下の通りです。

(config)# ip arp inspection limit [ rate pps [ burst interval seconds ] | none ]

rate none を指定すると制限をなくせます。制限を超えるとポートは errdisableステート に移行します。

その際、自動復旧を有効にする場合は次のコマンドを設定します。
デフォルトの復旧時間(interval)は300秒です。

(config)# errdisable detect cause arp-inspection
(config)# errdisable recovery cause arp-inspection
(config)# errdisable recovery interval 秒数

ARPパケットの妥当性チェック

DAIはARPパケットを受信して正当性を判断しますが、さらに詳細な検証を追加できます。

(config)# ip arp inspection validate [ src-mac ] [ dst-mac ] [ ip ]
  • src-mac:Ethernetヘッダの送信元MACとARP本文内の送信元MACが一致するか確認
  • dst-mac:Ethernetヘッダの宛先MACとARP本文内の宛先MACが一致するか確認
  • ip:ARP本文に無効なIPアドレスが含まれていないか確認

これを有効化することで、偽造ARPをより厳密に防げます。

ログバッファの設定

DAIは不正ARPパケットを破棄すると、その情報をログに記録します。
デフォルトでは以下の制限があります。

  • ログエントリ数:32
  • システムメッセージ数:1秒あたり5件まで
  • ロギング間隔:1秒

調整する場合は次のコマンドを使用します。

(config)# ip arp inspection log-buffer [ entries 数 | logs 数 interval 秒 ]

さらに、どの種類のARPパケットをログに残すかをVLAN単位で制御できます。

(config)# ip arp inspection vlan vlan-id logging [ acl-match { matchlog | none } | dhcp-bindings { all | none | permit } ]
  • acl-match matchlog:ARP ACLで許可・拒否をログに記録
  • acl-match none:ACLに一致したパケットを記録しない
  • dhcp-bindings all:DHCPバインディングに一致するパケットをすべて記録
  • dhcp-bindings none:DHCPバインディングに一致するパケットは記録しない
  • dhcp-bindings permit:許可されたバインディングパケットのみ記録

DAIのデフォルト設定まとめ

機能デフォルト設定
DAI無効(全VLANでディセーブル)
インターフェイスの信頼状態全インターフェイスはUntrusted
レート制限Untrustedポートは15pps、Trustedポートは制限なし、バースト間隔1秒
ARP ACL定義なし
妥当性検査実行されない
ログバッファエントリ数32、システムメッセージは1秒あたり5件まで、ロギング間隔1秒
VLAN単位のロギングすべての拒否/廃棄ARPパケットが記録される

・Untrustedポートはデフォルトで15pps制限がある。
・超過するとポートがerrdisableとなり、リカバリを設定すれば自動復旧可能。
ip arp inspection validatesrc-mac / dst-mac / ip を確認できる。
・ログ記録はバッファ数やロギングレートを調整可能。

ここはセキュリティ機能の理解を問う問題で出やすいため、デフォルト値(15pps、ログ32件、5メッセージ/秒)をしっかり押さえておくと得点につながります。

◆まとめスライド

目次