Cisco ルーターをブロードバンドルーターとして利用 (Cisco IOS XE)
はじめに
Cisco ISR 1111 を フレッツ光ネクスト で利用する際、
アクセス制御周りで参考になるサイトが見当たらなかったため、備忘録として書き残したいと思います。
Cisco C891FJ をはじめとした従来の Cisco ルーターは
CBAC(Context-Based Access Control) や Reflexive ACLs を利用し
- プライベートネットワークからインターネット向けの通信は許可
- プライベートネットワーク発通信に対するインターネットからの戻り通信は許可
- インターネット発通信は拒否
など、FWのステートフルインスペクションと同等の動作を実現することが可能でしたが、IOS-XEでは実装されなくなってしまったようです。
その為、本稿では Zone-Based Policy Firewall を利用した設定方法を紹介します。
また、筆者の契約しているISPはDS-Liteの提供や、v6プラス(固定IPアドレス)の提供をしていないため、Ciscoルーターを用いたDS-Liteのコンフィグレーションや、MAP-Eに関しては触れません。
参考資料
構成図
Cisco ISR 1111
Cisco IOS XE Software, Version 16.09.06
ルーターでNATしフレッツへ接続する一般的な構成となります。
インターネット接続に関する設定(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 (デフォルト)
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
ルーター発→インターネット向け通信の定義
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 ポート へのアクセスがありしっかりアクセス制御をしないと危ない印象を受けました。