ネットワークの学習をしているとACLという言葉にぶつかります。ネットワークにおけるレイヤーやルーティングの基礎などを学習している時には出てこないのですが、実際のネットワーク構築においては非常に重要な技術となります。
今回はこのACLに関して調べてみました。意外と奥深いです!
ACLは何の役に立つ?
ACLとは「Access Control List(アクセスコントロールリスト)」のことです。エーシーエルやアクルなんて呼び方をしてますね。
そもそもACLとは何のためにあるかというと、L3スイッチやルーターを通る通信を制御するためにあります。
ネットワークには常に様々な通信が同時に行われております。通常ネットーワークはセグメントで分けられ、そのセグメント内は更にIPアドレスでそれぞれの機器(サーバーやPC端末など)が分けられます。機器と機器の通信は無数で考えられますが、実際はL2スイッチ(スイッチングハブなど)によってセグメントレベルでの通信に限られます。そのセグメントレベルの通信を行うためにルーティングが必要となり、それを実現しているのがL3スイッチやルータとなります。
ここでルーティングができるとネットワークが広がっていくのですが、勝手にネットワークが広がってしまうと、知らない相手からの通信が届くようになってしまいます。この通信が悪意あるものだったり、悪意が無くても、とんでもない大量の通信が来てしまったら大変なことになります!
そういった事態を防ぐために通信を制御するリストであるACLが存在するのです。
自転車や歩行者だけしか通れない道路があったり、高速道路や車だけしか走れなかったり、私道は持ち主しか入れなかったりと、道路がルールで制御されいることと同じようなもんですかね(合っていますかね…)。
ACLを使って通信を制御することで、セキュリティを高め、無駄なトラフィックによる機器のリソース消費も抑えることができるわけです。
標準ACLと拡張ACLの二つがある!
ACLには、以下のように標準ACLと拡張ACLの大きく2つの種類があります。
- 標準ACL:送信元IPアドレスをチェックするACL
- 拡張ACL:送信元IPアドレス、宛先IPアドレス、プロトコル番号、送信元ポート番号、宛先ポート番号をチェックするACL
拡張ACLの方が柔軟で細かい制御ができるので、通常ACLといったら拡張ACLで考えると思います。
暗黙の deny any
「deny any」と書くとなんか呪文みたいな感じもしますが(汗)、実はACLを考える中で重要な設定になります。
「作成したACLの最終行には全てのパケットを拒否するというACLが自動に設定される」ということです。
ACLはリストとして設定した1行目から順番に条件に合致するかどうかを確認していき、最初に条件が合致したもので通信(パケット通過)が「許可」または「拒否」されます。条件に合致した以降はその条件は虫されてしまうので、最初に許可されたら後から拒否が書かれていても無視されてしまいます。そして、最後に「暗黙の deny any」で条件に設定されなかった通信がすべて拒否される仕組みとなってます。
このようにACLでは条件をどのような順番にし作成していくのかが非常に重要となりますね!
ACLの方向とは?
もう一つ、ACLには方向という概念があります。なぜ方向があるかというと、インバウンド(IN)で適用するか、アウトバウンド(OUT)で適用するかで制御の動作が異なるからです。
では、IN、OUTそれぞれで適用することでどう変わってくるか以下に図にしてみました。
「送信元」でしか制御しない標準ACLは他の通信へ影響を無くすためにアウトバンドで設定します。
「ネットワークに無駄なトラフィックを流さない」という大前提を考慮すると、ACL(拡張ACL)はインバウンドに設定するのが妥当ということになります。
まとめると「標準ACLはアウトバンド」、「拡張ACLはインバウンド」で設定するのが良いことになります。
通常は拡張ACLを使うと思いますので、基本ACLはインバウンドで設定、ということがベースになるかと思います!
まとめ
今回はネットワークにおける通信を制御するためのリストであるACLに関して学習しました。
ACLはセキュリティやトラフィック面において重要な役割を果たしますが、設定を間違えると今までできていた通信が突然不可能になったり、攻撃を受けやすくなってしまうなど大変な事態を招きかねません。そのためにも設定は慎重に行う必要があります。
システム開発におけるテスト期間でACLを間違っており、早く直したいのに、内容の確認をちゃんとやるため、意外と時間がかかってモヤモヤすることがありますね(涙)。それだけ重要な設定なんだと改めて分かりました!
参考URL)