Access Control List(ACL)
20131001

はじめに
 管理上の都合から、名前付きACLとする。
 作成したACLの最後尾に暗黙の「deny all」が存在する事を忘れない事。
 logオプション等、細かな詳細については説明を後に追記していきます。
 また、拡張ACLのその他プロトコル(ICMP等)についても後に追記を予定。

確認環境
 確認機種 : Cisco 851
       Cisco 892
 IOS : 12.4(6)T
    15.2(4)M4
ACL作成
 標準ACL
  Cisco(config)#ip access-list standard 名前
 拡張ACL
  Cisco(config)#ip access-list extended 名前
標準ACL構文
permit(許可) or deny(拒否) 送信元アドレスorネットワーク ワイルドカードマスク

アクセス可否の設定(例)

  まずACLの作成(test)
   Cisco(config)#ip access-list standard test

  IPアドレス192.168.0.3をからの通信を許可
   Cisco(config-std-nacl)#permit host 192.168.0.3

  ネットワーク192.168.10.0からの通信を許可
   Cisco(config-std-nacl)#permit 192.168.10.0 0.0.0.255

設定確認
 Cisco#show ip access-lists
 Standard IP access list test
   10 permit 192.168.0.3
   20 permit 192.168.10.0, wildcard bits 0.0.0.255

暗黙のdeny allにより、上記以外のアクセスを全て遮断する。
拡張ACL構文
 permit(許可) or deny(拒否) プロトコルorIP 送信元アドレスorネットワーク ワイルドカードマスク(場合によって省略可) 送信先アドレスorネットワーク ワイルドカードマスク(場合によって省略可) ポート指定

アクセス可否の設定(例)

 まずACLの作成
  Cisco(config)#ip access-list extended Name

 TCPポート80(www)のアクセスを許可する場合
  Cisco(config-ext-nacl)#permit tcp any any eq 80(wwwでも可)

 UDPポート10000〜20000を許可する場合。
  Cisco(config-ext-nacl)#permit udp any any range 10000 20000

 TCPポート40000以降(40001〜65535)を許可する場合
  Cisco(config-ext-nacl)#permit tcp any any gt 40000

 UDPポート1000未満(1〜999)を許可する場合
  Cisco(config-ext-nacl)#permit udp any any lt 1000

 TCPポート22以外全てを許可する場合。
  Cisco(config-ext-nacl)#permit tcp any any neq 22

#「Name」と言う名前の拡張ACLを作成


#「eq」対象ポートと"等しい"


#「range」対象ポートの"範囲"を指定


「gt」対象ポートより"大きい"


#「lt」対象ポートより"小さい"


#「neq」対象ポート"以外"

設定確認
 Cisco#show ip show ip access-lists
 Extended IP access list Name
   10 permit tcp any any eq www
   20 permit udp any any range 10000 20000
   30 permit tcp any any gt 40000
   40 permit udp any any lt 1000
   50 permit tcp any any neq 22

暗黙のdeny allにより、上記以外のアクセスを全て遮断する。
ACLルールの挿入及び一部削除について
 CiscoのACL内容の一部を変更する場合、「一度全て削除した上で、変更したものを再作成」する必要があると思われがちですが、
 現在のIOSでは一部のみ変更を加える事が可能となっています。

対応ver
 IOS12.2(14)T以降ぐらい。

対応しているかどうかは以下のコマンドで判断可能。
 ACL作成説明部分での名前付き拡張ACLを作成した物としてコマンドを実行しています。

Cisco#show ip show ip access-lists
Extended IP access list Name
  10 permit tcp any any eq www
  20 permit udp any any range 10000 20000
  30 permit tcp any any gt 40000
  40 permit udp any any lt 1000
  50 permit tcp any any neq 22

赤文字部分、シーケンスナンバーが表示されていれば対応しています。

挿入方法
Cisco#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Cisco(config)#ip access-list extended Name
Cisco(config-ext-nacl)#11 permit tcp any any eq 65535
 通常設定の先頭にシーケンスナンバーを設定するだけです。

削除方法
Cisco(config-ext-nacl)#no 30 permit tcp any any gt 40000
 こちらもシーケンスナンバーを指定する事で1ルールのみ削除出来ます。

この2つのコマンド結果を表示してみましょう。

Cisco#show ip access-lists
Extended IP access list Name
  10 permit tcp any any eq www
  11 permit tcp any any eq 65535
  20 permit udp any any range 10000 20000
  40 permit udp any any lt 1000
  50 permit tcp any any neq 22

シーケンスナンバー「11」のルールが追加され、「30」のルールが削除されています。

規則性の乱れたシーケンスナンバーを再構成
Cisco#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Cisco(config)#ip access-list resequence extended Name 10 10

10は開始する番号
10は1個のルールでカウントをいくつ増やすか指定

Cisco#show ip access-lists
Extended IP access list Name
  10 permit tcp any any eq www
  20 permit tcp any any eq 65535
  30 permit udp any any range 10000 20000
  40 permit udp any any lt 1000
  50 permit tcp any any neq 22

綺麗になりました。
ACLをインターフェースへ適用

 ACL作成だけでは何の意味もありません。
 インターフェースへ適用していきましょう。

 名前付き拡張ACL「Name」をWAN側インターフェースのインバウンドへ適用する。
  Cisco(config)#interface Dialer0
  Cisco(config-if)#ip access-group Name in
最後に
 ACLを実装後、ブラウジング等を行う際に戻りトラフィックも
  同時に暗黙の「deny all」にて破棄されてしまい、正しく通信出来ない場合があります。
 以上の事から、ACL実装と同時にCBACを実装を推奨しております。

 詳しくは以下参照
  ContextBased Access Control