SD-AVCのアプリケーションで通信制御してみました！

　この記事はシスコの有志による Cisco Systems Japan Advent Calendar 2024 の 7 日目として投稿しています。初参加です。

2024年版はこちら↓↓
- https://qiita.com/advent-calendar/2024/cisco
歴代も素敵なコンテンツですので、↑から見てみてください。

:::note warn
免責事項
　本ページおよび、これに対応するコメント記載については、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。
:::

## はじめに

　この記事ではCatalyst Centerと連携したCatalyst 8000シリーズ(Autonomous Mode,IOS-XE 17.12 and later)で、CLIで実施する、App aware firewallコンフィグレーション例を記載しています。

## Why SD-AVC?
　ここ最近は各種SaaSサービスや、クラウド利用が一般的です。スケールアウトされるたびに、動的に日々新しいサイトが作られています。
 Web会議や音声などでは、なるべくプロキシを経由しないことを推奨しています。
　インターネットを企業で使われる場合は、FWやルータでの通信制御は、必要要件であることが多いですが、これが大変なのです。日々追加されるFQDNの取り込みは、複数のネットワークデバイスになればなるほど設定変更が必要で、FWポリシー設定のUpdate、テスト、適用・・・なんて大変なんだ。でもこれがリアルで、日々運用者さんは、セキュリティ性と利便性を守っております。
 
　

:::note info
　たとえば、運用では、日々生まれ出てくる、新しいIPアドレスやFQDNのとの格闘です。通信ができない、と問い合わせがあったら、新しいそのIPアドレスやFQDNを探索し、通信制御へ追加しないといけません。
 普通にFQDN ACLを書けばいいじゃない、ということもありますが、Cat8000は、64個のFQDNの利用に制限されています(2024/12現在)。追加しなくては！たくさん書かなければ！なのに、この制限によりできない、ということがおきます。
　思い切って、FW製品導入も手ですが、色々難しい場合も多いです。
:::

　そこでSD-AVCです。SD-AVCは司る機能により、上記のような64というような制限から解放されます。
 　
　そう、私は、SD-AVC使って、FQDNたちをコントロールしちゃおう例、を伝えたいのです。……作業軽減！と言いながら、CLIを紹介する私に、少し矛盾を感じますが、GUIじゃわからないところを、コンフィグベースで理解しよう、なのです。


　さて、本題へ入る前に、「そもそもSD-AVCって何？」と思われる方もいらしゃるかなと思いまして、まずは、用語説明をざっくり。

### AVC
　AVC(Application Visibility and Control)は、Cisco製ルータやスイッチ、Wireless製品に搭載されている、FNF（高速ロギング）やNBAR2エンジンなどをDPIで利用し、エンドポイントデバイスの通信をアプリケーション単位で認識し、可視化、制御に役立てる、というものです。
　ちなみに、ネットワーク製品以外にも応用されてます。例えばSNA(Stealthwatch)は、アプリケーション識別情報をセキュリティインテリジェンスに役立てています。

 ### NBAR2
　もともとはNBARとして登場しました。Network Based Application Recognitionの名前の通り、ネットワークからの情報をベースにしたアプリケーション識別のテクノロジーです。
 今は、アプリケーション識別のロジックをUpdateしたNBAR2となっています。
 
 ### じゃあ、SD-AVCとは
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927950/869600c9-aa90-a2ed-ae86-2d80a974915b.png)

　SD-AVCとは、上記AVCの進化版で、クライアントーサーバ方式で連携させます。つまり、SD-AVCサーバで一括管理されたアプリケーション(FQDN/IP/Protocolなど)を、任意のCiscoのネットワークデバイスと同一情報として共有します。可視化・分析・ルーティング・QoS/FWポリシー適用へ使えよう、ネットワークからアプリケーショントラフィックを認識します。
　通常の仕組みではネットワークデバイス単体でアプリケーションを識別していますが、SD-AVCでは外部の連携やルータで得た情報を共有することで、アプリケーションの識別の能力を高めることが可能となりました。
 
　SD-AVCサーバでは、管理するネットワークデバイスへ最新のNBARパッケージを自動でUpdateできます。
　そして、CiscoのNBARクラウドとも連携することができるのです。
　NBARクラウドでは、動的に増加している、たとえば、MicrosoftさんやGoogleさんでお使いの一般的な、最新FQDN情報を配信しており、これをアプリケーション情報として利用できます。これは便利！
　また、SD-AVCはカスタムアプリケーションもサポートしています。例えば、オンプレミスで利用の独自サーバ（アプリケーション）を識別したい場合は、こちらが使えます。これも柔軟！

　つまり、毎回マニュアルで更新せずとも、自動的に常に最新のFQDN情報を使ってAVCできちゃうってことですね。ルータ側でグループさせるようにコンフィグすると楽です。
便利！
　ちなみに、SD-AVCは、2024年12月現在だと、Catalyst CenterとvManage(SD-WAN)でサポートとなっています。


### Application Aware Firewallとは
　上記のアプリケーション情報をもとに、ネットワークデバイスは、アクセスコントロールやQoSのパラメータとして利用できる、というものです。
　SD-WANを利用していると、これがGUIベースで適用可能で便利ですが、Catalyst Centerの場合はネットワークデバイスごとにFWポリシーを書いていく必要があります。

:::note info
  SD-WANの場合は、GUIからでも、直感的に設定できますし、Applicationを指定したRoutingなんかも[実装してます。](https://www.cisco.com/c/en/us/td/docs/routers/sdwan/configuration/policies/ios-xe-17/policies-book-xe/application-aware-routing.html)
:::

## SD-AVCを利用するためには
　さて、手順ですが、SD-AVCサーバ(Catalyst Center•SD-WAN vManage)とネットワークデバイスのSD-AVC有効化し、連携が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927950/d2111591-16ac-6ad3-df21-fe0ee3b18355.png)

　どうやってSD-AVCを有効化し、ネットワークデバイスと連携するか、は、ユーザガイドがあるので、以下を参照します。
[Provision Application Telemetry Settings - Cisco Catalyst Center User Guide, Release 2.3.7.x](https://www.cisco.com/c/en/us/td/docs/cloud-systems-management/network-automation-and-management/catalyst-center/2-3-7/user_guide/b_cisco_catalyst_center_user_guide_237/b_cisco_dna_center_ug_2_3_7_chapter_01010.html?bookSearch=true)
　日本語版はこちら。更新が英語よりは、ゆっくりなので補足的にお読みください。
[Provision Application Telemetry Settings - Cisco Catalyst Center User Guide, Release 2.3.7.x](https://www.cisco.com/c/ja_jp/td/docs/cloud-systems-management/network-automation-and-management/catalyst-center/2-3-7/user_guide/b_cisco_catalyst_center_user_guide_237/b_cisco_dna_center_ug_2_3_7_chapter_01111.html#id_114499)

### App aware firewall設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3927950/9353407a-c885-b0e7-e4a2-731861575281.png)

　さて、コンフィグしていくにあたり、こんな検証環境を用意しました。実際にコンフィグする場合は、Zone based firewallで適用していきます。
　ACLだとSD-AVCで配信されるApplicationが扱えないためです。(扱えたらいいのに…という願望はあります)

#### Sourceの設定
　まずはSourceの定義です。Fromの部分は、ACLで表します。ここでは、DestをAnyで設定しておきます。

```ruby:Configure Source
object-group network LAN_IP
 192.168.1.0 255.255.255.0
!
ip access-list extended src_LAN_IP
 10 permit ip object-group LAN_IP any
```
#### Destの設定

##### class-mapで定義するもの
　これは、DestinationのFQDNやIPを定義します。ここへは、SD-AVCに定義されたApplicationである"bridge_cisco_com"をmatch protocolで指定します。

##### policy-mapで定義するもの
　Policy-mapでは、avcオプションを指定して、先ほど定義したclass-mapの条件を設定します。
　allowにすれば、通信許可、denyにすれば、通信拒否です。class-defaultは自動設定されます。

```ruby:Configure Destination
class-map match-any Dest_Apps
!!ここにDestを追加、上限16個まで。グループとして利用も。
match protocol bridge_cisco_com
!
policy-map type inspect avc Permit_Dest_Apps
class Dest_Apps
allow
class class-default
deny
```
#### SourceとDestinationを組み合わせる（最終）

　SourceとDestinationの定義を書いたら、あとはがっちゃんこします。

```ruby:Configure App Aware Firewall Policy
policy-map type inspect policy_lantowan
class type inspect src_LAN_IP
inspect
service-policy Permit_Dest_Apps
class class-default
drop
```

#### Zone Based Firewallの設定
　各インターフェースへZoneの設定と、Zone based firewallの設定をしポリシーを最適なインターフェースへ適用します。Zone based firewallは、ステートフルインスペクションがデフォルトで動きますので、戻り値がTCPで制御不要の場合、WANからLANへのポリシーの記載は記載しなくても、大丈夫です。
　UDPやICMPは、通信の性質上、戻り通信も記載しないとWANからの通信が通りませんので、ご注意。

```ruby:Configure Zone Based Firewall
!! Configure Zone
zone security LAN
zone security WAN
!
!! Set interface WAN
interface Gigabitethernet 0/0/0
 zone-member security WAN
 ip nbar protocol-discovery
!
!! Set interface LAN
interface Gigabitethernet 0/0/1
 zone-member security LAN
 ip nbar protocol-discovery
!
!! Configure Zone pair LAN to WAN
zone-pair security zone_pair_lan_wan source LAN destination WAN
 service-policy policy_lantowan
!
!! Configure Zone pair WAN to LAN
zone-pair security zone_pair_wan_lan source WAN destination LAN
!
```



## さいごに
　上記で示した通り、IOS-XE Autonomous modeでも設定できます、が、実はこの設定は、IOS時代からある機能です！設定自体はClass-map、Policy-mapなので、QoSの書き方に近いです。


Happy holiday! 
@yatogash