通信中にCiscoのACLを削除すると何が起きるのか?
インタフェースにACLを適用している状態でACL本体を削除すると何が起きるのか?という質問を受けたのですが、どうなると思いますか?
今回は次のような構成のネットワークを作成してテストしてみます。

ubuntu-0 | 10.0.0.254 |
ubuntu-1 | 10.0.1.254 |
ubuntu-2 | 10.0.2.254 |
pingを送信しながら挙動を確かめるため、こんな感じのACLを設定します。
Router(config)#ip access-list extended MYACL
Router(config-ext-nacl)#permit icmp host 10.0.0.254 host 10.0.1.254
Router(config-ext-nacl)#
Router(config-ext-nacl)#int gi0/0
Router(config-if)#ip access-group MYACL in
ubuntu-0(10.0.0.254)からubuntu-2(10.0.2.254)にpingを実行すると、このようにフィルタされます。
root@ubuntu-0:~# ping 10.0.2.254
PING 10.0.2.254 (10.0.2.254) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=1 Packet filtered
From 10.0.0.1 icmp_seq=2 Packet filtered
From 10.0.0.1 icmp_seq=3 Packet filtered
^C
--- 10.0.2.254 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2004ms
root@ubuntu-0:~#
それではpingを実行しながらACLを削除してみましょう。ACLを削除したら引き続きインタフェースにACLが適用されている事を確認します。
Router(config)#no ip access-list extended MYACL
Router(config)#
Router(config)#do show run int gi0/0
Building configuration...
Current configuration : 139 bytes
!
interface GigabitEthernet0/0
ip address 10.0.0.1 255.255.255.0
ip access-group MYACL in
duplex auto
speed auto
media-type rj45
end
Router(config)#
結果は…ACLを削除した瞬間にpingが通り始めました!
root@ubuntu-0:~# ping 10.0.2.254
PING 10.0.2.254 (10.0.2.254) 56(84) bytes of data.
From 10.0.0.1 icmp_seq=1 Packet filtered
From 10.0.0.1 icmp_seq=2 Packet filtered
From 10.0.0.1 icmp_seq=3 Packet filtered
64 bytes from 10.0.2.254: icmp_seq=32 ttl=63 time=1.57 ms
64 bytes from 10.0.2.254: icmp_seq=33 ttl=63 time=1.16 ms
64 bytes from 10.0.2.254: icmp_seq=34 ttl=63 time=1.22 ms
64 bytes from 10.0.2.254: icmp_seq=35 ttl=63 time=1.35 ms
実験の感想
インタフェースに適用されているACLを削除できるっていうのが違和感あるし定義されていないACLがインタフェースに適用されている状態っていうのが気持ち悪いのですが、これが仕様なんですね。
こういうのは仕様と割り切った方が良いです。
TCP接続している状態でCiscoのdeny ACLをインタフェースに適用するとどうなるのか?
denyするACLを適用したら既にTCP接続している通信がどうなるのかテストしてみたいと思います。

ubuntu-0 | 10.0.0.254 |
ubuntu-1 | 10.0.1.254 |
ubuntu-2 | 10.0.2.254 |
まずはubuntu-0(10.0.0.254)からubuntu-2(10.0.2.254)の65000/tcpにコネクションが張れる事を確認します。
root@ubuntu-0:~# nc 10.0.2.254 65000
この状態で「TEST」という文字列を送信してみます。
root@ubuntu-0:~# nc 10.0.2.254 65000
TEST
ubuntu-2では次のように表示されます。
root@ubuntu-2:~# nc -l 65000
TEST
「TEST」という文字列が送信出来る事が確認できたのでACLを追加します。
Router#conf t
Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#ip access-list extended DENY-ACL
Router(config-ext-nacl)#deny ip host 10.0.0.254 host 10.0.2.254
Router(config-ext-nacl)#
Router(config-ext-nacl)#int gi0/0
Router(config-if)#ip access-group DENY-ACL in
Router(config-if)#
この状態で「TEST2」という文字列を送信してみます。
root@ubuntu-0:~# nc 10.0.2.254 65000
TEST
TEST2
ubuntu-2を確認すると…「test2」は表示されず通信が遮断されている事が分かります。
root@ubuntu-2:~# nc -l 65000
TEST
実験の感想
FWでポリシー追加するような場合は新規通信から追加したポリシーが適用される事が多いのですが、CiscoのACLはdeny ACLを適用した瞬間に通信が拒否される事が分かりました。