Access-listのちょっとした検証
今日はAccess-listについて理解が浅かった時に直面した疑問。
例のごとく初歩的なお話になりますので、知見のあるエンジニアが満足できる内容ではないです。
とはいえ、どんな人であれネットワークを学習し始めるとこんなことを思う時があると思います。
「色々な機能についてなんとなく理解してきたけど、細かな仕組みや決まりごとがイマイチ飲み込めないなあ」
「基本的なことすぎて聞きにくい、恥ずかしい」
そんな駆け出しエンジニアの助けになれば良いなあ思いブログを書いている部分があるので、コンセプトとしてはこれで良いんです。
アウトプットすることで自分の知識の定着にも繋がりますし、一緒に腕を上げていけたら本望です。
てことで今日はAccess-listについて学習した時に抱いた疑問の話です。
構成は以下図のようにPC①からRT-blueへの通信をACLで制御します。
イン用とアウト用の拡張ACLを作成しRT-redのインバウンドとアウトバウンドにそれぞれ適用します。
それでは最初の疑問から。
protoclにipを指定する
ネット等でACLについて調べていた時に見つけたこんな設定。
上記のパラメーターでACLを作成して、PC①からRT-blueへのTCP通信、icmp通信を実現するというものです。
「ACL_10_in」をRT-redのインバウンドに、「ACL_10_out」をRT-redのアウトバンドに適用します。
アウトバウンドのACLは理解できますね。
(PCが所属するセグメントからRT-blueがもつ各セグメントへのTCP、icmpを許可し、それ以外の通信を拒否している)
ここで湧いた疑問というのは、インバウンドのACL。
TCP通信を行う為には対向からの確認応答(ACK)、icmpには対向からのecho replyを受信して初めて通信が成り立つのは周知の通り。
しかし、このパラメーターの戻り(インバウンド)の制御を見てみると、
" permit ip any any "と、"全ての通信を拒否する(暗黙のdeny any)"しか定義されていません。
ってことはtcpやicmpの戻りパケットは暗黙のdeny anyで拒否されてしまうのではないか?としたらTCP通信もpingの疎通確認もできないのでは?
...と、なまじTCPやICMPの通信フローを理解してしまった為に、上記のような戻り通信についての制御内容に納得がいかない、そんな時はなかったでしょうか。
この疑問の回答はいたってシンプルで、
・ProtocolにIPを指定するとTCP、UDP、icmp全てが含まれる。
・" permit ip any any "とすることで全てのパケットを許可する。
ということ。
なので、TCPのACKもicmpのecho replyも ip any any で許可される。
実際に自宅のルータで検証してみましたが、確かにPCを送信元としたRT-blueへのTCP通信もicmp通信も実現できました。
続いての疑問は...
アウトバウンドのフィルタリング対象パケットは
続いては以下のようなパラメータ。
結論から述べると、
・アウトバウンドに適用するACLのフィルタリング対象パケットはルータを通過するトラフィックにのみ
言い換えると、ルータが送信元となるトラフィックはアウトバウンドに適用しているACLのフィルタリング対象にならない。
RT-redのLoopbackやFe0/0からRT-blueへのpingを打つとして、「ACL_10_out」のパラメータを見てみると、RT-redのLoopbackやFe0/0を送信元としたRT-blueへのフィルタリングは定義されていません。
一方「ACL_10_in」のパラメータを見てみるとRT-blueからRT-redのLoopbackのへのICMPが許可されていますね。
つまり、RT-redからRT-blueへのEcho RequestはACL対象でなく、
RT-blueからRT-redへのEcho ReplyはACL対象となる、ということ。
ネット等で情報を漁っていると、ACLフィルタリング対象パケットは「ルータを通過するパケット」なんて書かれていたりするので、今回の構成だとRT-blueからRT-redへの通信もイン方向のACLに引っかからない(ルータを通過しないから)なんて誤解をしがちです。
けど、そんなことなくて、"ルータのアウトバウンドに適用するACLの対象パケットはルータを通過するパケット"です。
一応ね、実際に自宅のネットワーク環境で検証したんですけれども、
パラメーターの赤枠の部分を削除して、RT-redからRT-blueへpingを打ってみるとタイムアウトすることが確認できました。
Echo ReplyがACL_10_inで暗黙のdeny anyに落ちたんでしょう。
というCCNAレベルの内容ですが、
CCNAで勉強することは非常に大切!と思っていますので、これからも基礎的なネットワークの話をしていきたいと思っています。