CoPPは、コントロールプレーンのCPUに着信するトラフィックを制御できる機能です。
アクセススイッチを導入する際には、CoPP機能やそのデフォルト値を意識することはないかと思いますが、ハイパフォーマンスが要求されるよくあるコアスイッチをリプレースする際にはネットワーク構成や通信要件によっては要注意な機能とも言えます。
ハイエンドモデルのCatalystでデフォルトで有効になっていることを知らず、あるいは、そのデフォルト値を意識しなかった結果、痛い目に合ったNWエンジニアは少なからずいるかと。
CoPPの技術解説については以下のリンク先の記事で5分くらいで理解できます。
→ CoPP( Control Place Policing )とは
※ ローエンドのスイッチでは「 mls qos copp protocol 」コマンドで設定します。
※ Nexusスイッチは class-map/policy-map のtypeで「control-plane」を指定します。
※ Cisco ASRルータなど機種により、出力レート制限「service-policy output」も可能。
※ 設定例のACLの「permitに合致したトラフィックはポリシング対象」という意味です。
上図は概念図ですが、Catalystの場合の詳細は、パケットが着信すると「Packet Buffer」→「CEF/FIB Lookup」→ Processor Switched Packets に対してCoPPが適用されます。
CoPPで処理された後にコントロールプレーンに着信するトラフィックには、管理系のTelnet、SSH、SNMPなどやICMPトラフィック、ルーティングアップデートなどが含まれます。
CoPPには色々な制約がありますので、詳細は該当機種の該当マニュアルを熟読しましょう。
チューニングした後、最も多かった問い合わせがACLに「log」オプションつけていいですか?という経験があるので、個人的な想いで、logキーワードはダメという仕様だけ特筆しました。
今回はネットワークエンジニアのお仕事での苦い過去を書きたかったのではなく、このCoPPがCCNP/CCIE Enterpriseの試験範囲なので紹介しています。昔からの技術なのですが。
・ 350-401 ENCORでは「セキュリティ」分野の項目で「CoPP」と書かれています。
・ 300-410 ENARSIでは「インフラストラクチャセキュリティ」で次の記載があります。
CoPP(Control Plane Policing)のトラブルシューティング(Telnet、SSH、HTTP(S)、SNMP、EIGRP、OSPF、BGP)
CCNPでもCCIEでも「セキュリティ」分野に分類されていますが、それはCoPPがDoS攻撃などのトラフィックからCPUを守るという基本コンセプトがあるからです。
どういう内容で出題されるのかまだ試験を確認していませんが、CiscoのマニュアルにCoPPのトラフィック分類の基本ACL例が紹介されており、そこでこの試験範囲に合致するTelnet、SSH、HTTP(S)、SNMP、EIGRP、OSPF、BGPのキーワードがあるので以下に紹介します。
CoPPトラフィック分類の基本ACLの設定例
・ ACL 101:クリティカル トラフィック
・ ACL 102:重要トラフィック
・ ACL 103:通常トラフィック
・ ACL 104:不要なトラフィックを明示的に拒否(対象)
・ ACL 199:その他すべてのトラフィック
ポリシーが入力だけに適用されることが前提である場合は、双方向に一致するポリシーを定義する必要はありません。トラフィックは一方向(CoPPが有効な機器へ)だけで識別します。
※ 設定例では「10.9.9.9」がCoPPが有効なCiscoデバイスとします。
※ 次のACLは通信の許可/拒否ではなく「分類」です。通信制限は「policy」で決定します。
◆ ACL 101:クリティカル トラフィック(例:BGP通信)
・ ピアのBGPポートからこのCoPPが有効な機器へのBGP通信を対象とする例
access-list 101 permit tcp host 192.168.1.1 host 10.9.9.9 eq bgp
access-list 101 permit tcp host 192.168.1.1 eq bgp host 10.9.9.9
◆ ACL 102:重要トラフィック(例:TACACS+、SSH、SNMP、NTP通信)
・ TACACSホストからのリターントラフィックを対象
access-list 102 permit tcp host 192.168.1.2 host 10.9.9.9 established
・ サブネットからCoPPが有効なCiscoデバイスへのSSHアクセスを対象
access-list 102 permit tcp 192.168.1.0 0.0.0.255 host 10.9.9.9 eq 22
・ NMSホストからCoPPが有効なCiscoデバイスへのSNMPアクセスを対象
access-list 102 permit udp host 192.168.1.3 host 10.9.9.9 eq snmp
・ CoPPが有効なCiscoデバイスへの既知のクロックからのNTPパケットを対象
access-list 102 permit udp host 192.168.1.4 host 10.9.9.9 eq ntp
◆ ACL 103:通常トラフィック(例:traceroute / ping 通信)
・ CoPPが有効なCiscoデバイスからの traceroute トラフィックを対象
access-list 103 permit icmp any any ttl-exceeded
access-list 103 permit icmp any any port-unreachable
・ ping を発信したCoPPが有効なCiscoデバイスに応答の受信トラフィックを対象
access-list 103 permit icmp any any echo-reply
・ CoPPが有効なCiscoデバイスへのpingパケットを対象
access-list 103 permit icmp any any echo
◆ ACL 104:不要クラス用の定義(分類とモニタを目的でありドロップ対象)
・ UDPポート1434 を宛先とするすべてのトラフィックをポリシング用の対象
access-list 104 permit udp any any eq 1434
◆ ACL 199:その他すべてのトラフィックの定義
・ その他すべてのトラフィック用に ACL199を定義する例
access-list 199 permit ip any any
冒頭でも申し上げた通り、これらのACLは通信を許可、拒否するACLというよりも「分類」のためのACLであり、最終的なアクション(パケットの制御)はc、lass-mapとpolicy-mapにて定義されます。設定後のステータスは show policy-map control-plane で確認できます。