拒否すべきか、許可すべきか、それが問題だ!ファイアウォールのフィルタリングルール(ACL)
はい、こんにちは!ネットワーク間の砦「ファイアウォール」について連続記事でご紹介しております!
前回は、パケットフィルタリング型ファイアウォールについてお話ししました。レイヤ3(ネットワーク層)とレイヤ3(トランスポート層)での、フィルタリングがあるんでしたね。ヘッダにあるIPアドレスやポート番号を見て、どのノードからか?どのアプリに接続しようとしてるのか?などを判定するのでしたね!
さて、今回は、その通信をフィルタリングするための規則、「フィルタリングルール」についてお話ししましょう!
これを読めば、どんなルールでフィルタリングが行われるか、その概要がなんとなく分かるはず!
ということで、行ってみよう!
フィルタリングルールの例
まずは、フィルタリングルール(あるいはAccess Control List; ACL)の例を見ていきましょう。
ネットワークは、「外部ネットワーク、DMZ、内部ネットワーク」で構成されていて、DMZには、メールサーバとプロキシサーバがある、と想定しています。
実際にはいろんなサーバがDMZにありますし、もっと細かい設定が必要ですし、安全でない古いプロトコルが使われています。アプライアンス(機器)によっては、設定の仕方も異なるでしょう。
詳しいことは専門の文献を当たってくださいね。あくまで、これは、概念を理解するためのACLとご理解ください。
ルールの説明
上から条件文(ステートメント)を解説すると次の通りです。
内部からプロキシへのHTTP通信許可: プロキシを介してHTTP通信する想定です。内部ネットワークからHTTPプロキシサーバへのポート80(HTTP)通信を許可します。
プロキシから外部へのHTTP通信許可: プロキシサーバから外部ネットワークへのポート80(HTTP)通信を許可します。
外部からメールサーバへのSMTP通信許可: 外部ネットワークからメールサーバへのポート25(SMTP)通信を許可します。これでメールが受信できますね。
内部からメールサーバへのメール受信通信許可: 内部ネットワークからメールサーバへのポート110(POP3)および143(IMAP)通信を許可します(※DMZにメールボックスを置いておいてセキュリティ的にいいのか?ということは棚上げしましょう。)
メールサーバから外部へのSMTP通信許可: メールサーバから外部ネットワークへのポート25(SMTP)通信を許可します。(※あ、内部からメールサーバへのフィルタリングルールを書き忘れましたが、お許しを。)
その他全てのトラフィック拒否: 明示的に許可されていない全てのトラフィックを拒否します。
条件文は、上から該否判定して、当てはまった時点でそれが適用されます。一度該当してしまうと、次の条件文は読まれませんから、より限定的な条件ほど先に書くようにします。順番は重要な意味があるんですね。
そして、例外な条件文を一通り書き連ねたら、最後に「上記以外は全部拒否だ!」と自動的に設定され、表示されません。これを、Implicit Deny(暗黙の拒否)といいます。
それから、原則として、内部と外部のネットワークが直接通信するのを避けて、DMZを仲介させます。これで、内部セグメントを守りやすくします。
ふう、フィルタリングルールのテーブルはこれくらいにしましょう。
戻ってくる通信はどうしたの?
上のACLの条件文1と2では、HTTP通信で「クライアント→プロキシ→ウェブサーバ」と要求するアウトバウンドのトラフィックが規定されています。
待てよ?「ウェブサーバ→プロキシ→クライアント」と、戻ってくるパケットのトラフィックについては、条件文がありません。これでいいのかしら?
実は、原則として、HTTPの戻りのトラフィックについては、条件文を書きません(詳細な設定をするときや、アプライアンスによっては書くようですが)。
これは、HTTPの応答は、要求に対応するものであるため、HTTP要求を条件文で制御するなら、HTTPの返信も制御できるからです。
具体的には、応答パケットのTCPヘッダに含まれるコントロールフラグの一つ「ACKフラグ」を確認すれば、内部セグメントにいるクライアントからの要求であることが分かります。
この「ACKフラグ」は偽装される可能性がありますが、同じくヘッダに含まれる「シーケンス番号」を見れば、偽装を見抜けます。
以上のような仕組みによって、応答パケットは、条件文がなくても受け取ることができます。
内部からDMZや外部へのルールは必要だろうか?
ファイアウォールは、基本的に外からの脅威から内側を守るためのハードウェア(ソフトウェアのことも)です。
なら、内部から外へ向かうトラフィックを規定する条件文は、いらないのでは?という疑問が浮かびます。
実は、内部から外へ向かう通信も制約しなければいけません。
というのも、内部セグメントでマルウェア感染が起きて、内部のデータが外へ送信されるリスクがあります。加えて、内部にいる悪意ある者がデータを送信するとも限りません。
内側からの脅威への対策も必要というわけです。
はい、本日はここまで。今回は、ファイアウォールのフィルタリングルール(ACL)についてお話ししました。私は専門家でもなんでもないので、参考で示したACLは、あくまで「学習用の参考」としてくださいね。
次回から、DMZやUTM、さらに冗長化と進めていきます。うん、時間がかかりそうです。が、順を追って進めます。
では!
この記事が気に入ったらサポートをしてみませんか?