Tech Karte::

できることをひとつずつ。

ACL設定で行き詰まっている話

これまではただひたすら自作したネットワークの疎通確認ばかり取ってきましたが、今回はGNS3上でACL(アクセス制御リスト)を作成・設定して動作確認を行ってみました。

ACLの概要

ACL(Access Control List):アクセス制御リスト

ルータを通過する通信アクセスを制御するリストのこと。
特定の端末・ネットワークからのアクセスに対して許可・拒否の設定が可能。

ACLが設定されたルータはパケットを受信するとACLの条件を1行目から順番に照合し、最初に合致した条件に従ってパケットの通過を許可or拒否する。

ACLの重要規則:暗黙のdeny any

ACL作成時に注意しなければならないのが「暗黙のdeny any」という規則。
作成したACLの最終行に必ず「deny(拒否)any(全て) ⇒すべてのパケット通過を拒否する」という設定が付加される。
この最終行のdeny anyはACLには表示されないため「暗黙のdeny any」と呼ばれる。

ACLの種類
ACLの設定方向(インバウンド/アウトバウンド)

ACLインバウンド(IN:着信)とアウトバウンド(OUT:発信)、どちらに適用するかで動作が異なる。

1:インターフェイス着信(IN)してきたパケットにACLが適用される。
2:許可されたパケットは通過し、拒否されたパケットは破棄される。

  • アウトバウンドACL

1:インターフェイスに着信したパケットはルーティングテーブルに従いルーティングされる。
2:発信(OUT)段階でACLが適用され、許可されたパケットはそのまま発信され、拒否されたパケットは破棄される。

GNS3上でのACL設定

以前作成したネットワーク構成にACLを設定して、特定の端末・ネットワークからのアクセスを制御してみました。

f:id:k-matsuda0901:20160420111855p:plain

今回のACL設定
  • 特定端末のアクセス制御:PC3(192.168.2.2)からPC1(192.168.1.1)へのアクセスを拒否
  • 特定ネットワークのアクセス制御:192.168.3.0ネットワーク(PC4・5)からのPC1(192.168.1.1)へのアクセスを拒否


ACLはR1(PC1側)のインターフェイスg0/0、インバウンドで設定しました。

R1(config)#access-list 101 deny ip host 192.168.2.2 host 192.168.1.1 
→ACL[101]を作成し、「ホスト192.168.2.2からホスト192.168.1.1へのIPアクセスをdeny(拒否)する」設定を追加

R1(config)#access-list 101 deny ip 192.168.3.0 0.0.0.255 host 192.168.1.1
→ACL[101]に「192.168.3.0ネットワークからホスト192.168.1.1へのIPアクセスをdeny(拒否)する」設定を追加

R1(config)#access-list 101 permit ip any any
→ACL[101]に「全てのIPアクセスをpermit(許可)する」設定を追加


R1(config)#interface gigabitethernet 0/0 ←R1のインターフェイスg0/0設定へ移行
R1(config-if)#ip access-list 101 in    ←ACL[101]をインバウンドに設定

ここで作成したACL設定を確認することに。

R1#show access-lists

f:id:k-matsuda0901:20160420111910p:plain

Extended(拡張)ACL[101]に3行ほど条件文が追加されています。
表示されていませんが、最終行には「暗黙のdeny any」が設定されています。
1・2行目の拒否設定のみだと、設定外の他の端末・ネットワークからのアクセスは暗黙のdeny anyに該当してしまいパケットが破棄されます。
そのため、3行目にすべてのIPアクセスを許可する条件文を足してあります。

動作確認

ACL設定が確認できたので、Pingで動作確認。


PC2(192.168.2.1)からのPing
f:id:k-matsuda0901:20160420111930p:plain

ACL設定外のPC2は、PC1(192.168.1.1)へのPingが5回通っています。

PC3(192.168.2.2)からのPing
f:id:k-matsuda0901:20160420111950p:plain

ACLで拒否設定をしたPC3はちょっと様子が違います…。
Pingが192.168.10.1(R1のg0/0のIPアドレス)で返って来ています。
あとは謎の「communication administratively prohibited」の表示…。
英語読めませんが調べてみると、「通信が管理上遮断されている」というICMPメッセージでした。

PC4・5のPing結果も同様に、管理上遮断のICMPメッセージが返ってきました。

ここまでは全く問題なくOKでした。

行き詰まった話

ACLは一方向設定なので、今回設定したPC1へのアクセス制御はできていることが分かったのですが…
逆にPC1からそれぞれの端末にアクセスすると、ACLに設定してある端末(PC3~5)へのアクセス(Ping)がすべてタイムアウトになってしまいました…

原因考察

PC1(192.168.1.1)からPC3~5へのICMPエコー要求は通ってる(と思いたい…)が、エコー要求を受けたPC3~5からPC1へのエコー応答がR1に設定したACLで遮断されている(?)

対策

テキストに書いてある構文を試しに試しましたが…全く分かりません。
設定を追加すればいいのか、そもそもの設定自体を変えればいいのかもこんがらがってきました。


あと一歩のところという感覚はあるのですが、ここで行き詰まりました。

2016/04/21 追記

PC1からACLに設定してある端末(PC3~5)へのアクセスを通すために、ACLステートメント(条件構文)を追加して検証を行いました。

R1(config)#ip access-list extended 101 ←拡張ACL[101]設定へ移行
R1(config-ext-nacl)#5 permit icmp any any echo-reply ←拡張ACL[101]の5番に「全てのICMPエコー応答をpermit(許可)する」設定を追加

ステートメント追加後のPC1からPC3~5へのPingは通るようになりましたが、TracerouteしてみるとR2通過以降の情報が得られませんでした…

原因は現在調査中です。