拡張ルールセットは、最小ルールセット を土台に、ネットワーク上のシステム種別ごとに対象を絞ったルールを作ります。これらのルールを作る前に、カテゴリごとに IP リストを作成 する必要があります。
現在の境界ファイアウォールルールをエクスポートできない場合は、Magic Transit プレフィックス上にあるシステムやユーザーグループのカテゴリを洗い出してください。例:
上記のそれぞれについて、許可する Internet アクセスの要件を考えます。正当なトラフィックに必要なものだけを許可し、それ以外はブロックします。
リストの詳細は ルールリストを使う を参照してください。
Account Home の Configurations > Lists からも、ダッシュボードでリストを作成できます。
エンドポイントデバイスはサーバーとして動作しません。つまり次のとおりです。
- 標準的なよく使うポート(たとえば
80や443)から、エフェメラルポート(OS がアウトバウンド接続向けに割り当てる一時ポート。現行 OS では通常32768より上)へ向けてトラフィックを受け取ります。 - 接続は外向きに流れ、内向きには流れません。そのため、未送信のインバウンド TCP 接続は受け取りません。
- 通常必要なのはクライアントの TCP と UDP だけで、イングレス ICMP は不要です。
たとえば、外部の ping や traceroute を許可する汎用クライアント TCP とクライアント UDP の組み合わせ用リストと、ほかのプロトコルとトラフィック向けのキャッチオールルールを作成できます。
Endpoints という名前のリストを作成し、ルール内で参照するエンドポイントまたはユーザー IP アドレスを指定します。
Rule ID: 1
Description: エフェメラルポートへの戻りトラフィック(アウトバウンドリクエストへの応答)を許可し、未送信のインバウンド接続をブロックします。インバウンドの SYN のみのトラフィックをブロックします(SYN-ACK は許可します)。
Match: ip.proto eq "tcp" and ip.dst in $endpoints and tcp.dstport in {32768..60999} and not (tcp.flags.syn and not tcp.flags.ack)
Action: Allow
Rule ID: 2
Description: エンドポイント(クライアント)は、エフェメラルポート宛てのトラフィックを受け取ります。
Match: ip.proto eq "udp" and ip.dst in $endpoints and udp.dstport in {32768..60999}
Action: Allow
Rule ID: 3
Description: $endpoints リストの宛先 IP アドレスへの ICMP トラフィックを、次の ICMP タイプで許可します。
- Type 0 = Echo Reply
- Type 3 = Destination Unreachable
- Type 11 = Time Exceeded
Match: ip.proto eq "icmp" and ip.dst in $endpoints and (icmp.type eq 0 or icmp.type eq 3 or icmp.type eq 11)
Action: Allow
Rule ID: 10
Description: それ以外は、$endpoints リストの IP 向けトラフィックをすべて拒否します。
Match: ip.dst in $endpoints
Action: Block
MT プレフィックス上の内部ルーターまたはファイアウォールインターフェイス IP アドレスについては、次のベストプラクティスに従ってください。
- たとえば Internal routers という IP リスト を作成し、IP アドレスを入れます。
- ICMP が不要ならブロックします。
- デバイスが Internet 経由の GRE / IPsec トンネルを持つ場合は、必要に応じて GRE / ESP を許可します。
Rule ID: 1 Description: 次を含む、限定したインバウンド ICMP トラフィックを許可します。
- Type 0 - Echo Reply
- Type 3 - Destination Unreachable
- Type 8 - Echo
- Type 11 - Time Exceeded
Match: ip.proto eq "icmp" and ip.dst in $internal_routers and ( (icmp.type eq 0 or icmp.type eq 3) or (icmp.type eq 11) or (icmp.type eq 8) )
Action: Allow
Rule ID: 2
Description: これらの IP アドレス宛てのほかのトラフィックをすべてブロックします。
Match: ip.dst in $internal_routers
Action: Block
Web サーバーでは、必要なトラフィックフローを慎重に検討してください。web server 機能向けのトラフィックに加え、Web サーバーがクライアントとして動くときのトラフィックフローも必要です。
可能な場合は、Web サーバーに必要な宛先 IP アドレスとポートだけを許可し、それ以外はブロックします。Web トラフィック用のポートに加え、NTP / DNS などの追加サービスが必要なこともあります。
次は推奨ルールの例です。変更は自環境の要件に合わせて行ってください。たとえば Cloudflare Layer 7 保護でプロキシされておらず、Web から自社 Web サーバー向けのトラフィックを想定している場合です。
- たとえば web servers という IP リスト を作成し、Web サーバーの IP アドレスを入れます。
- Internet からのインバウンド Web サーバートラフィックを許可します。
- DNS や NTP など、Internet からのインフラまたはクライアント向けトラフィックフローを許可します。
- Web サーバー IP アドレス宛てのほかのトラフィックをすべてブロックします。
Rule ID: 1
Description: Internet からのインバウンド HTTP/S トラフィックを、SYN のみまたは ACK のみのフラグ(SYN/ACK ではない)で許可します。
Match: ip.proto eq "tcp" and tcp.srcport in {32768..60999} and ip.dst in $web_servers and tcp.dstport in {80 443} and not (tcp.flags.syn and tcp.flags.ack)
Action: Allow
Rule ID: 2
Description: Web サーバーへの DNS と NTP の UDP 応答を許可します。
Match: ip.dst in $web_servers and ip.proto eq "udp" and udp.srcport in {53 123} and udp.dstport in {1024..65535}
Action: 必要な場合は許可し、攻撃を受けているときは無効にする
Rule ID: 3
Description: Web サーバー IP アドレス宛てのほかのトラフィックをすべてブロックするキャッチオールです。
Match: ip.dst in $web_servers
Action: Block
あるいは、Cloudflare Layer 7 保護がある場合は、HTTP/HTTPS インバウンドトラフィックの送信元 IP として Cloudflare のパブリック IP アドレスを許可し、宛先を Web サーバーの IP アドレスにできます。この推奨は、上の例の Rule 1 を実質的に置き換えます。
Description: Cloudflare からのインバウンド HTTP/S トラフィックを、SYN または ACK で許可します。
Match: ip.proto eq "tcp" and ip.dst in $web_servers and tcp.dstport in {80 443} and not (tcp.flags.syn and tcp.flags.ack) and ip.src in {173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/13 104.24.0.0/14 172.64.0.0/13 131.0.72.0/22}
Action: Allow
サーバーが一般の Internet からのトラフィックを想定しているか、特定ユーザーからのみかを踏まえて、送信元を制限します。
- 可能な場合は、送信元 IP またはポートに基づくルールを適用します。
- 許可する宛先ポートを、必要なものだけに絞ります。
- 閉じたポートへの着信 SYN をブロックします。
IP Destination Address { non-web server } and TCP dst port in \<valid ports> — PermitIP Destination Address { non-web server } and UDP dst port in \<valid ports> — PermitIP Destination Address { web server } — Block