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ソースガード」で不正な送信元を防ぐ、という二段構えの仕組みになります。
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やポートごとのバインディングテーブルを確認
ARPスプーフィングとは
ARPスプーフィングとは、LAN内で使われる ARP(Address Resolution Protocol) を悪用した攻撃のひとつです。本来、ARPは「IPアドレスから対応するMACアドレスを問い合わせる仕組み」で、正常な通信のために欠かせない役割を担っています。
しかしこの仕組みには認証の仕組みがなく、誰が送ったARP応答であってもクライアントがそのまま受け入れてしまうという弱点があります。攻撃者はこの弱点を突き、偽のARP応答を送りつけることで「自分を正規の通信相手に見せかける」ことが可能になります。これがARPスプーフィングです。
結果として、被害者は本来ルータやゲートウェイに送るはずのパケットを攻撃者へ転送してしまい、攻撃者による盗聴や改ざんが可能になります。
攻撃の流れ
ARPスプーフィングの典型的な流れを整理すると次のようになります。
- 正規クライアントからのARP要求
例えばホストAがゲートウェイに通信したいとき、「このIPアドレスに対応するMACアドレスは?」とARP要求をブロードキャストします。 - 正規ルータからのARP応答
ゲートウェイのルータは自身のMACアドレスを含む正しいARP応答を返します。 - 攻撃者からの偽ARP応答
攻撃者は、ルータに成りすましたARP応答をブロードキャストで送信します。しかも、何度も繰り返し送るため正規応答を上書きしてしまいます。 - 被害者が不正な情報をキャッシュ
ホストAはARPテーブルに攻撃者のMACアドレスを登録してしまい、本来ルータに送るはずのパケットを攻撃者に送ってしまいます。
このようにして攻撃者は「通信経路の中間」に入り込み、盗聴や改ざんを行えるようになります。この手法は Man-in-the-Middle攻撃(中間者攻撃) の代表例でもあります。
攻撃の応用例
攻撃者は単にホストAだけを騙すのではなく、ルータ側(ルータB)に対しても偽ARP応答を送ることができます。
この場合、ホストAとルータBの両方が「通信相手のMACアドレスは攻撃者のもの」と信じてしまうため、攻撃者は完全に通信の中継点となり、双方向のトラフィックを盗聴したり改ざんしたりできます。
なぜ不正ARP応答が受理されるのか
「ARPパケットの送信元IPアドレスとMACアドレスが、実際のIPヘッダやEthernetヘッダと食い違っていたら弾かれるのでは?」と思うかもしれません。しかし、ARPには厳格な検証機構がなく、また Proxy ARP のような正規機能をサポートするために、こうした不正な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による検査の流れ
DAIが有効なスイッチ上でのARP検査の流れは次の通りです。
- 信頼できないポートから送られたすべてのARP要求およびARP応答をスイッチが受信する。
- スイッチはそのARPパケットに含まれる IPアドレスとMACアドレスの組み合わせ をバインディングテーブルと照合する。
- バインディングテーブルに存在しない組み合わせであれば、そのARPパケットを破棄する。
つまり、DAIは「ARP応答が正しい送信元からのものかどうか」を逐一確認し、不正な応答をネットワークに流さない仕組みです。
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
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パケットが記録される |