現在の境界ファイアウォールルールを書き出せない場合は、Magic Transit のプレフィックス上にあるシステムやユーザーグループのカテゴリを洗い出します。例:
上の各項目について、許可するインターネットアクセスの要件を考えます。正当なトラフィックに必要なものだけを許可し、それ以外はブロックします。
リストの詳細は ルールリストを使う を参照してください。
Account Home の Configurations > Lists からも、ダッシュボードでリストを作成できます。
エンドポイントデバイスはサーバーとして動作しません。つまり次のとおりです。
- 一般的な標準ポート(例:
80や443)からのトラフィックを、エフェメラルポート向けに受け取ります。現行 OS では32768超(古い Windows Server 2003 および Windows XP では1025超)です。 - 接続は外向きであり、内向きではありません。そのため TCP SYN や ACK パケットを受信しません。
- 通常はクライアントの 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 アドレスについては、次のベストプラクティスに従います。
- IP リスト を作成します。例: Internal routers。対象の IP アドレスを入れます。
- ICMP が不要ならブロックします。
- デバイスがインターネット経由の 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 サーバー機能向けのトラフィックに加え、Web サーバーがクライアントとして動作するときのトラフィックフローも必要です。
可能な場合は、Web サーバーに必要な宛先 IP アドレスとポートだけを許可し、それ以外はブロックします。Web トラフィック用のポートに加え、NTP/DNS などの追加サービスが必要になることもあります。
以下は推奨ルールの例です。変更は、実際の要件に基づいて行ってください。たとえば Cloudflare の Layer 7 保護でプロキシしておらず、Web から自社 Web サーバーへのトラフィックを想定している場合です。
- IP リスト を作成します。例: web servers。Web サーバーの IP アドレスを入れます。
- インターネットからの Web サーバー向け受信トラフィックを許可します。
- インターネットからのインフラまたはクライアント向けトラフィックフロー(DNS や NTP など)を許可します。
- Web サーバーの IP アドレス宛ての他のトラフィックをすべてブロックします。
Rule ID: 1
Description: インターネットからの受信 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: 必要な場合は Allow。攻撃を受けているときは Disable
Rule ID: 3
Description: Web サーバーの IP アドレス宛ての他のトラフィックをすべてブロックするキャッチオール
Match: ip.dst in $web_servers
Action: Block
あるいは Cloudflare の Layer 7 保護がある場合は、HTTP/HTTPS の受信トラフィックについて、Cloudflare のパブリック IP アドレスを送信元 IP、Web サーバーを宛先 IP として許可できます。この推奨は、上の例の Rule 1 を置き換えます。
Cloudflare の IP アドレス一覧は Cloudflare の IP アドレス ↗ を参照してください。
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
サーバーが一般インターネットからのトラフィックを想定しているか、特定ユーザーだけかを基準に、送信元を制限します。
- 可能な場合は、送信元 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