CCNA　ACLまとめ

## ACLの目的
Access Control Listの略。
ACLに基づきルータに送られてくるパケットの制御（通信許可、拒否）すなわち<font color="red">**パケットフィルタリング**</font>を行う。

## ACLの種類
|  | 標準ACL | 拡張ACL |
|:-:|:-:|:-:|
| チェック内容  | 送信元IPアドレス  | 送信元IPアドレス<br>宛先IPアドレス<br>プロトコル番号<br>送信元ポート番号<br>宛先ポート番号  |
| 番号付きACL  | 1～99(100個)<br>IOS 12.0以降<br>1,300～1,999(700個)  |100～199(100個)<br>+IOS 12.0以降<br>2,000～2,699(700個)   |
| 名前付きACL  | 名前を示す文字列  | 名前を示す文字列  |

## ACLのルール
-フィルタリングする条件を1行ずつ記述
-上から順番に制御を実施
-該当する制御があれば実施し終了
-該当する制御がない場合、すべて拒否(<font color="red">**暗黙のdeny**</font>)

## ワイルドカードマスク
フィルタリング条件としてOSPFと同様<font color="red">**ワイルドカードマスク**</font>を使う。
※書き方はサブネットマスクの逆

- 1つのIPアドレスのみを条件とするとき
①192.168.1.12 0.0.0.0
②host 192.168.1.12

- 全てのIPアドレスのみを条件とするとき
①0.0.0.0 255.255.255.255
②any

## ACLの適用
ルータのインターフェイスに適用。<font color="red">**インバウンド**</font>と<font color="red">**アウトバウンド**</font>で<font color="red">**1つずつ**</font>適用可。

- インバウンド
ルータのインターフェイスがパケット受信時にチェック

- アウトバウンド
ルータのインターフェイスがパケット送信時にチェック
※ただしルータ自身が送信する通信はチェック対象外(?不明)

## 標準ACLの設定、確認など #出る
①標準ACLを作成
- 番号付き標準ACLを作成
~~~
(config)#access-list <ACL No.> <permit|deny> <送信元IPアドレス> <ワイルドカードマスク>
~~~
※同じ番号を指定してaccess-listコマンドを実行すると、その番号付き標準ACLに条件行が追加
※暗黙のdenyは自動で最後に追加

<details><summary>【練習】：ACL No.=1で192.168.0.0/24からの通信を拒否、残りの通信を許可</summary>

~~~
Router1(config)#access-list 1 deny 192.168.0.0 0.0.0.255
Router1(config)#access-list permit any
~~~
</details>

- 名前付き標準ACLを作成
~~~
(config)#ip access-list standard <ACL name>
~~~
このコマンドにより、標準ACLコンフィグレーションモードに遷移する。その後条件を追加
~~~
(config-std-nacl)#<permit|deny> <送信元IPアドレス> <ワイルドカードマスク>
~~~

②インターフェイスに適用
作成した標準ACLはインターフェイスコンフィグレーションモードで次のコマンドを実行
~~~
(config-if)#ip access-group <ACL No.|ACL name> <in|out> 
~~~
※頭に"no"を付けると適用を解除
※標準ACLは宛先に近いインターフェイスへの運用が推奨
<details><summary>【練習】：Fa0/0のアウトバウンドにACL No.=1を適用</summary>

~~~
Router1(config)#interface FastEthernet 0/0
Router1(config-if)#ip access-group 1 out
~~~
</details>

<details><summary>【練習】：同様のことを名前付き標準ACL(TEST)で設定、インターフェイスに適用。</summary>

~~~
Router1(config)#ip access-list standard TEST
Router1(config-std-nacl)#deny 192.168.0.0 0.0.0.255
Router1(config-std-nacl)#permit any
Router1(config-std-nacl)#exit
Router1(config)#interface FastEthernet 0/0
Router1(config-if)#ip access-group TEST out
~~~
</details>

③標準ACLの確認
~~~
#show access-lists <ACL No.|ACL name>
~~~
※<ACL No.|ACL name>指定時は対象のACLのみ表示。指定しないと全ACLが表示。

<details><summary>【練習】：標準番号付きACL(ACL No.=1)を確認</summary>

~~~
Router1#show access-lists 1
standard IP access list 1
   10 deny   192.168.0.0, wildcard bits 0.0.0.255
   20 permit any
~~~
</details>

<details><summary>【練習】：標準名前付きACL(ACL name = TEST)を確認</summary>

~~~
Router1#show access-lists TEST
standard IP access list TEST
   10 deny   192.168.0.0, wildcard bits 0.0.0.255
   20 permit any
~~~
</details>

④標準ACLを適用したインターフェイスを確認
<details><summary>【練習】：Fa0/0に適用されたACLを確認(show ifで)</summary>

~~~
Router1#show ip interface FastEthernet 0/0
FastEthernet0/0 is up, line protocol is up
  internet addrss is 172.16.0.1/24
  Broadcast address is 255.255.255.255
  Address determined by setup command
  MTU is 1500 bytes
  Helper address is not set
  Directed boradcast forwarding is disabled
  Outgoing access list is 1
  Inbound access list is not set
  Proxy ARP is enabled
~~~
</details>

<details><summary>【練習】：適用されたACLを確認(running-configで)</summary>

~~~
Router1#show running-config
(省略)
interface FastEthernet 0/0
 ip address 172.16.0.1 255.255.255.0
 ip access-group 1 out
 duplex auto
 speed auto
!
(省略)
access-list 1 deny 192.168.0.0 0.0.0.255
access-list 1 permit any
~~~
</details>


## 拡張ACLの設定、確認など #よく出る
①拡張ACLを作成
- 番号付き拡張ACLを作成
~~~
(config)#access-list <ACL No.> <permit|deny> <プロトコル> <送信元IPアドレス> <ワイルドカードマスク> [<送信元ポート番号>] <宛先IPアドレス> <ワイルドカードマスク> [<オプション>]
~~~
※同じ番号を指定してaccess-listコマンドを実行すると、その番号付き標準ACLに条件行が追加
※暗黙のdenyは自動で最後に追加
※プロトコル、オプション例
| プロトコル| 説明 | オプション |
|:-:|:-:|:-:|
| ip  | IPに関する項目。省略するとIPを使用する全通信を指定可能  | dscpなど  |
| tcp  | パラメータ+ポート番号。<br>パラメータはeq(=), neq(≠), lt(小さい),gt(大きい)<br>ポート番号は数字またはポート名で指定  | eq www, eq 80  |
| udp  | パラメータ+ポート番号。指定方法はtcpと同じ  | eq snmp, eq 161  |
| icmp  | ICMPのメッセージのタイプ  | echo (エコー要求), echo-reply(エコー応答)など  |

<details><summary>【練習】：端末192.168.1.11からのネットワーク172.16.1.0/24へのIP通信を拒否</summary>

~~~
Router1(config)#access-list 100 deny ip host 192.168.1.11 172.16.1.0 0.0.0.255
~~~
</details>

<details><summary>【練習】：すべての送信元からWebサーバ172.16.0.11へのHTTP通信のみを許可</summary>

~~~
Router1(config)#access-list 100 permit permit tcp any host 172.16.0.11 eq www
~~~
</details>

<details><summary>【練習】：端末192.168.1.11からのネットワーク172.16.1.0/24へのエコー要求を拒否</summary>

~~~
Router1(config)#access-list 100 deny icmp host 192.168.1.11 172.16.1.0 0.0.0.255 echo
~~~
</details>
- 名前付き拡張ACLを作成
~~~
(config)#ip access-list extended <ACL name>
~~~
このコマンドにより、拡張ACLコンフィグレーションモードに遷移する。その後条件を追加
~~~
(config-ext-nacl)#<permit|deny> <プロトコル> <送信元IPアドレス> <ワイルドカードマスク> [<送信元ポート番号>] <宛先IPアドレス> <ワイルドカードマスク> [<オプション>]
~~~

②インターフェイスに適用
作成した拡張ACLはインターフェイスコンフィグレーションモードで次のコマンドを実行
~~~
(config-if)#ip access-group <ACL No.|ACL name> <in|out> 
~~~
※頭に"no"を付けると適用を解除
※拡張ACLは<font color="red">**送信元**</font>に近いインターフェイスへの運用が推奨
<details><summary>【練習】：<br>PC01(192.168.0.11)からWebサーバに対してポート番号80のアクセスを拒否<br>PC02(192.168.0.12)からWebサーバに対してポート番号23のアクセスを拒否<br>それ以外の送信元からすべての宛先へのアクセスを許可</summary>

~~~
Router1(config)#access-list 100 deny tcp host 192.168.0.11 host 172.16.0.11 eq 80
Router1(config)#access-list 100 deny tcp host 192.168.0.12 host 172.16.0.11 eq 23
Router1(config)#access-list 100 permit ip any any
~~~
</details>
※ eq 80はeq wwwと記述可能<br>
※ eq 23はeq telnetと記述可能

<details><summary>【練習】：作成した番号付き拡張ACLをインターフェイスFa0/1にインバウンド適用</summary>

~~~
Router1(config)#interface FastEthernet 0/1
Router1(config-if)#ip access-group 100 in
~~~
</details>

<details><summary>【練習】：同様の内容を名前付き拡張ACL(EXTEST)をインターフェイスFa0/1にインバウンド適用</summary>

~~~
Router1(config)#ip access-list extended EXTEST
Router1(config-ext-nacl)#deny tcp host 192.168.0.11 host 172.16.0.11 eq 80
Router1(config-ext-nacl)#deny tcp host 192.168.0.12 host 172.16.0.11 eq 23
Router1(config-ext-nacl)#permit ip any any
Router1(config-ext-nacl)#exit
Router1(config)#interface FastEthernet 0/1
Router1(config-if)#ip access-group EXTEST in
~~~
</details>

③拡張ACLの確認
番号付きACLを確認(show access-listsで)
~~~
Router1#show access-lists
Extended IP access list 100
   10 deny tcp host 192.168.0.11 host 172.16.0.11 eq www
   20 deny tcp host 192.168.0.12 host 172.16.0.11 eq telnet
   30 permit ip any any (231 matches)
~~~
名前付きACLを確認(show access-listsで)
~~~
Router1#show access-lists
Extended IP access list EXTEST
   10 deny tcp host 192.168.0.11 host 172.16.0.11 eq www
   20 deny tcp host 192.168.0.12 host 172.16.0.11 eq telnet
   30 permit ip any any (231 matches)
~~~

適用されたACLを確認(running-configで)
~~~
Router1#show running-config
(省略)
!
interface FastEthernet 0/1
 ip address 172.16.0.1 255.255.255.0
 ip access-group 100 in
 duplex auto
 speed auto
!
(省略)
access-list 100 deny tcp host 192.168.0.11 host 172.16.0.11 eq 80
access-list 100 deny tcp host 192.168.0.12 host 172.16.0.11 eq 23
access-list 100 permit ip any any
~~~

⑤ACL削除
~~~
(config)#no access-list <ACL No.|ACL name>
~~~
※特定の行を消せない。