ひよこブログ

自宅IoT、自宅Lab、住宅関連

Cisco ルーターをブロードバンドルーターとして利用 (Cisco IOS XE)

はじめに

Cisco ISR 1111 を フレッツ光ネクスト で利用する際、

アクセス制御周りで参考になるサイトが見当たらなかったため、備忘録として書き残したいと思います。

Cisco C891FJ をはじめとした従来の Cisco ルーター

CBAC(Context-Based Access Control) や Reflexive ACLs を利用し

  • プライベートネットワークからインターネット向けの通信は許可
  • プライベートネットワーク発通信に対するインターネットからの戻り通信は許可
  • インターネット発通信は拒否

など、FWのステートフルインスペクションと同等の動作を実現することが可能でしたが、IOS-XEでは実装されなくなってしまったようです。

その為、本稿では Zone-Based Policy Firewall を利用した設定方法を紹介します。

また、筆者の契約しているISPDS-Liteの提供や、v6プラス(固定IPアドレス)の提供をしていないため、Ciscoルーターを用いたDS-Liteのコンフィグレーションや、MAP-Eに関しては触れません。

 

参考資料

www.cisco.com

構成図

Cisco ISR 1111

Cisco IOS XE Software, Version 16.09.06

ルーターでNATしフレッツへ接続する一般的な構成となります。

f:id:Hikari1019:20201231160340j:plain

インターネット接続に関する設定(PPPoE/NAT)

基本的な内容なので説明は割愛

interface GigabitEthernet0/0/0
 description flets_onu
 no ip address
 negotiation auto
 no cdp enable
 pppoe enable group global
 pppoe-client dial-pool-number 1

interface Vlan10
 description home
 ip address 192.168.0.254 255.255.255.0
 ip nat inside
 ip tcp adjust-mss 1414

interface Dialer1
 ip address negotiated
 ip mtu 1454
 ip nat outside
 encapsulation ppp
 dialer pool 1
 dialer-group 1
 ppp authentication chap callin
 ppp chap hostname <ISP指定のID>
 ppp chap password <ISP指定のPassword>

ip route 0.0.0.0 0.0.0.0 Dialer1

ip access-list standard acl_nat_inside_to_outside
 permit 192.168.0.0 0.0.255.255

dialer-list 1 protocol ip permit


Zone-Based Policy Firewall に関する設計

Zone-Based Policy Firewallの基本動作

  • Zoneをまたぐ通信は拒否(Self Zoneは除く)
  • ルーター自身が持つI/Fは Self Zone に属し、通信許可
  • 同一Zone間の通信は許可
  • 行きの通信を定義するだけで戻りの通信は動的に許可(inspectオプション利用時)

私の通信要件

サーバー公開はせず、インターネット向けの接続のみとなります。

アクセス制御方針

  • 内部発→インターネット向けの通信はすべて許可
  • インターネット発→内部向けの通信はすべて拒否
  • ルーター発→インターネット向け通信はすべて許可
  • インターネット発→ルーター向け通信はすべて拒否

ゾーン設計

  • 内部ネットワーク:inside
  • インターネット:outside
  • ルーターI/F:self (デフォルト)

f:id:Hikari1019:20201231162201j:plain

Zone-Based Policy Firewallの設定方法

設定方法は下記の通り

  • zoneの定義
  • class-mapの定義
  • policy-mapの定義
  • zone pairの定義
  • zone memberの定義

zoneの定義

zone名は任意の名称を設定します。
私は『inside』と『outside』にしましたが、VLAN名などでもよいと思います。

(config)#zone security <zone名>

class-mapの定義

class-mapはACLによる通信の定義やプロトコル指定など可能です。

match-anyとmatch-allを使うことで、and条件やor条件が可能になります。

(config)#class-map type inspect [match-any , match-all] <class-map名>
#(config-cmap)#match <条件>

policy-mapの定義

policy-mapはclass-mapで定義した通信に対する振る舞いを指定することが可能です。今回は戻り通信を動的に許可したいため、 inspect を指定しています。

(config)#policy-map type inspect <policy-map名>
(config-pmap)#class type inspect <class-map名>
(config-pmap-c)#<inspect or pass or drop>

zone pairの定義

zone-pair で 通信の転送元ゾーンと転送先ゾーンの組み合わせを定義します。

その後、policy-mapの紐づけを行います。

(config)#zone-pair security <zone-pair名> source <zone名> destination <zone名>
(config-sec-zone-pair)#service-policy type inspect <policy-map名>

zone memberの定義

#(config)# interface <interface>
(config-if)# zone-member security <zone名>



Zone-Based Policy Firewall に関する設定

実際に私が設定した例は下記の通りです。

ゾーンの定義とインタフェース紐づけ

inside ゾーンとoutsideゾーンを定義し、インタフェースと紐づける。

zone security inside

zone security outside

interface Vlan10
 zone-member security inside

interface Dialer1
 zone-member security outside

内部発→インターネット向け通信の定義

内部で利用するネットワークアドレスをACLとclass-mapで定義し、inspectを指定する。

これにより内部発通信は許可され、戻りの通信は動的に許可される。

ip access-list extended acl_zfw_inside_to_outside
 permit ip 192.168.0.0 0.0.255.255 any

class-map type inspect match-all cmap_inside_to_outside
 match access-group name acl_zfw_inside_to_outside

policy-map type inspect pmap_inside_to_outside
 class type inspect cmap_inside_to_outside
  inspect
 class class-default

zone-pair security zp_inside_to_outside source inside destination outside
 service-policy type inspect pmap_inside_to_outside

ルーター発→インターネット向け通信の定義

ルーター自身がDNS解決やping疎通チェックを行うため、

tcp/udp/icmp通信をinspectする。これによりルーター発通信は許可される。

class-map type inspect match-any cmap_self_to_outside
 match protocol tcp
 match protocol udp
 match protocol icmp

policy-map type inspect pmap_self_to_outside
 class type inspect cmap_self_to_outside
  inspect
 class class-default

zone-pair security zp_self_to_outside source self destination outside
 service-policy type inspect pmap_self_to_outside

インターネット発→ルーター向け通信の定義

policy-mapは、class-mapの紐づけを行わないと、class-default で drop 処理される。

これにより、インターネット発通信はすべて拒否される。

policy-map type inspect pmap_outside_to_self
class class-default zone-pair security zp_outside_to_self source outside destination self
service-policy type inspect pmap_outside_to_self

インターネット発→ルーター向け通信の定義(おまけ)

下記のように drop log オプションを定義することで、通信拒否した内容をログを出力させることが可能です。トラブルシューティングなどに有用です。

policy-map type inspect pmap_outside_to_self
class class-default
drop log 

ログを有効にししばらく利用しておりましたが、日常的に 22,23,53,80,443,3389 ポート へのアクセスがありしっかりアクセス制御をしないと危ない印象を受けました。