Windows Server はファイアウォールが有効な状態で届きます。これは正しい既定値で、外から接続しようとするものは、ルールで許可しない限りすべて拒否されます。変更が必要になるのは、ポート 8080 の Web アプリや、自社オフィスからだけ使わせたいサービスなど、自分のものを動かすときです。このガイドでは Windows Server 2022 上で PowerShell を使ってすべてを行います。各ルールは当社のイメージで試し、別のマシンから確認したので、本当にポートが開く・閉じることがわかっています。
PowerShell を管理者として開いてください。まだなら、先に RDP の保護 を済ませましょう。そちらのガイドでリモートデスクトップ自体の制限を扱っています。
1. 何が有効になっているか確認する
Get-NetFirewallProfile | Format-Table Name, Enabled, DefaultInboundAction, DefaultOutboundAction
Get-NetConnectionProfile | Format-Table InterfaceAlias, NetworkCategory
作ったばかりのサーバーでは、3 つのプロファイル(Domain、Private、Public)がすべて有効で、ネットワークアダプターは Public に属していました。DefaultInboundAction は NotConfigured と表示され、これは Windows の既定の動作、つまり受信はブロック、送信は許可という意味です。したがって効いてくるのは Public プロファイルのルールです。
受信で何が許可されているかは、次のコマンドで確認します。
Get-NetFirewallRule -Direction Inbound -Enabled True -Action Allow |
Group-Object DisplayGroup | Sort-Object Count -Descending |
Select-Object Count, Name -First 8
有効な受信ルールは 54 個ありました。ほとんどは Windows 自体のもの(Core Networking、Cast to Device、mDNS)で、ほかにリモートデスクトップのルールが 3 つ。ping はその中にありませんでした。
2. ポートを開ける
アプリが TCP ポート 8080 で待ち受けているとします。
New-NetFirewallRule -DisplayName 'Web app 8080' -Direction Inbound `
-Protocol TCP -LocalPort 8080 -Action Allow
ルールは作成した瞬間から有効です。別のマシンから見ると、ポート 8080 はブロックから開放に変わり、同じくプログラムが待ち受けていたポート 8081 はブロックされたままでした。-Profile を付けないルールは、Public を含むすべてのプロファイルに適用されます。
範囲やリストにするなら -LocalPort 8000-8010 や -LocalPort 80,443 を使います。UDP なら -Protocol を変えます。
3. 特定のアドレスだけ許可する
たいていのサービスは、インターネット全体から接続を受ける必要がありません。接続してよいアドレスにルールを絞りましょう。
Set-NetFirewallRule -DisplayName 'Web app 8080' -RemoteAddress 203.0.113.10
Set-NetFirewallRule -DisplayName 'Web app 8080' -RemoteAddress 203.0.113.10, 198.51.100.0/24
両方のパターンを試しました。-RemoteAddress に別のアドレスを入れると、テスト用のマシンからは接続できなくなりました。そのマシンのアドレスを加えると、接続できました。同じパラメーターをリモートデスクトップのルールに付ければ、RDP をオフィスからだけに限定できます。自宅の IP がよく変わるなら、RDP でこれをする前によく考えてください。
4. ping を有効にする
初期状態の Windows は ping に応答しません。ルールはありますが、無効です。
Enable-NetFirewallRule -DisplayName 'File and Printer Sharing (Echo Request - ICMPv4-In)'
これで当社のサーバーはすぐに ping に応答するようになりました。ping で死活を確認する監視ツールには必要です。元に戻すには、同じ名前で Disable-NetFirewallRule を使います。
5. ブロックされたものを記録する
何かが接続できないのに理由がわからないときは、ファイアウォールに破棄したものを書き残させましょう。
Set-NetFirewallProfile -Profile Public -LogBlocked True -LogMaxSizeKilobytes 4096
Get-Content C:\Windows\System32\LogFiles\Firewall\pfirewall.log -Tail 20
ブロックされた試行は、1 回ごとに次のような行になります。
2026-10-25 02:07:25 DROP TCP 198.51.100.7 203.0.113.25 43386 445 60 S 2112839481 0 64240 - - - RECEIVE 4
読み方は、日時、動作、プロトコル、送信元アドレス、サーバーのアドレス、送信元ポート、宛先ポートの順です。少し待ってください。Windows はログをまとめて書くので、当社のテストでは試行から約 1 分後に記録が現れました。4 MB の上限があるので、ファイルが際限なく大きくなることはありません。
6. バックアップと後片付け
大きな変更の前に、すべてのルールをファイルに保存しておきます。
netsh advfirewall export C:\fw-backup.wfw
当社のエクスポートは 148 KB でした。netsh advfirewall import C:\fw-backup.wfw を実行すると、そのときのルール一式がそのまま戻り、今あるルールは置き換えられます。不要になったルールは名前で削除します。
Remove-NetFirewallRule -DisplayName 'Web app 8080'
締め出されてしまったら
ルールのせいで自分のリモートデスクトップが切れたら、管理画面のコンソールを開いてください。RDP を経由しないので、ログインして Remove-NetFirewallRule や Set-NetFirewallRule で元に戻せます。
NAT か専用 IP か
NAT プランでは、インターネットからサーバーへは個別ポート 1 つだけで届き、それはリモートデスクトップにつながっています。Windows ファイアウォールで何を許可しても、ほかのポートには外から届きません。Web サイトを公開したり、ほかのポートで接続を受けたりするには専用 IPv4 が必要です。Windows Small-IP(4 vCPU、4 GB、50 GB、月 $28)ならすべてのポートが開いた IP が付き、判断するのは Windows ファイアウォールになります。Windows-Small は NAT で月 $11 です。Windows の 4 プランはすべて Windows VPS ページにあり、支払いは Base、Ethereum、Polygon 上の USDT、USDC、ETH です。
コメント
まだコメントはありません。最初になりましょう。