はじめに (対象読者・この記事でわかること)
本記事は、Windows10 のシステム管理者や IT サポート担当者、個人で PC のセキュリティを強化したいユーザーを対象としています。
この記事を読むことで、以下のことが実践的に理解できるようになります。
- Windows Defender ファイアウォールの「受信規則」に特定 IP アドレスだけを許可する設定方法
- PowerShell や
netshコマンドを使ったスクリプト化手順 - 設定途中で起こりがちなエラーやトラブルシューティングのポイント
自宅やオフィスで業務アプリに対して外部からのアクセスを限定したいケースなど、実務で即活用できる内容です。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。
- Windows10 の基本操作(設定アプリやコマンドプロンプトの起動方法)
- TCP/IP やポート番号の概念、一般的なネットワーク用語(IP アドレス、サブネットマスク 等)
- PowerShell の基本的な実行方法(管理者権限での実行が必要になることがある)
背景と概要 – なぜ特定 IP のみ許可が必要か
インターネットに接続された Windows10 マシンは、デフォルトで多くの受信通信をブロックしますが、業務上は特定のサーバーやリモートデスクトップ、VPN クライアントなど、限定された IP アドレスからの接続だけを許可したいケースが頻繁にあります。
例えば、社内の検証サーバーへリモートでアクセスする際に、社外からの不正アクセスを防止したい、あるいは遠隔地の開発拠点からだけソフトウェア更新サーバーに接続させるといったシナリオです。
こうした要件に対し、Windows Defender ファイアウォールの「スコープ」設定を活用することで、受信規則単位で許可 IP を限定できます。GUI での操作に加えて、PowerShell や netsh を用いれば一括管理や自動化が可能です。以下では、GUI とスクリプトの両方の手順を詳しく解説します。
特定 IP のみ許可する具体的な手順
手順 1 – GUI で受信規則を作成・設定する
-
「Windows Defender ファイアウォール with Advanced Security」を起動
-Win + R→wf.mscと入力し、Enter キー。管理者権限が必要な場合は「管理者として実行」してください。 -
左ペインの「受信規則」へ移動し、右側の「新しい規則…」をクリック
- 「規則の種類」画面で「ポート」を選択し、次へ。 -
対象のプロトコルとポートを指定
- 例:TCP → 特定のローカルポート(例:3389=リモートデスクトップ)。次へ。 -
「接続を許可する」を選択
- 「次へ」。 -
適用するプロファイルを選択
- 通常は「ドメイン」「プライベート」「パブリック」のすべてまたは必要なものだけにチェック。次へ。 -
規則に名前と説明を付ける
- 例:RDP from 203.0.113.25 only。完了で規則が作成されます。 -
作成した規則を右クリック → 「プロパティ」 → 「スコープ」タブ
- リモート IP アドレスの「これらの IP アドレス」にチェックし、追加ボタンで許可したい IP(例:203.0.113.25)を入力。
- 必要に応じて「ローカル IP アドレス」も限定できます。設定が終わったらOK。
ポイント
- 複数の IP アドレスやサブネットを許可したい場合は、カンマ区切りで追加するか、CIDR 表記(例:203.0.113.0/24)でまとめて指定できます。
- 「任意の IP アドレス」に設定されたままだと、すべての外部からの接続が許可されてしまうので必ず「これらの IP アドレス」に変更してください。
手順 2 – PowerShell で同等の規則を自動作成する
PowerShell を使えば、上記の GUI 手順をスクリプト化できます。以下は例です。
Powershell# 管理者権限で PowerShell を実行してください $RuleName = "Allow_RDP_From_Specific_IP" $DisplayName= "RDP from 203.0.113.25 only" $Description= "リモートデスクトップ接続を 203.0.113.25 のみ許可" $Protocol = "TCP" $Port = 3389 $RemoteIP = "203.0.113.25" # 既存の同名規則があれば削除 if (Get-NetFirewallRule -DisplayName $DisplayName -ErrorAction SilentlyContinue) { Remove-NetFirewallRule -DisplayName $DisplayName } # 受信規則を作成 New-NetFirewallRule ` -DisplayName $DisplayName ` -Direction Inbound ` -Action Allow ` -Protocol $Protocol ` -LocalPort $Port ` -RemoteAddress $RemoteIP ` -Enabled True ` -Profile Any ` -Group "Custom_RDP_Rules"
解説
- New-NetFirewallRule の -RemoteAddress パラメータで許可 IP を直接指定しています。
- -Profile Any はすべてのネットワークプロファイルに適用する意味です。環境に合わせて Domain, Private, Public に絞り込めます。
- -Group パラメータで同じ目的の規則をまとめると、後から一括削除や有効化・無効化が楽になります。
手順 3 – netsh コマンドでレガシーモードの規則を作成
古いバージョンや GUI が使えない環境では、netsh advfirewall が有効です。
Cmdnetsh advfirewall firewall add rule name="Allow_RDP_SpecificIP" dir=in action=allow protocol=TCP localport=3389 remoteip=203.0.113.25 enable=yes profile=any
remoteipに許可したい IP アドレスを列挙できます(例:203.0.113.25,203.0.113.30)。profileをdomain,private,publicのいずれかに限定すると、より細かい制御が可能です。
ハマった点やエラー解決
| 現象 | 原因 | 解決策 |
|---|---|---|
| 規則を作成したのに接続できない | ローカル IP アドレスが「任意」になっている | 「スコープ」タブでローカル IP を必要に応じて絞るか、Any のままにする。 |
PowerShell 実行時に New-NetFirewallRule : The term 'New-NetFirewallRule' is not recognized |
PowerShell が古い(Windows 7 以前) | 管理者権限の PowerShell 5.1 以降を使用するか、netsh を代替手段にする。 |
netsh でエラー Access is denied |
管理者権限で実行していない | コマンドプロンプトを「管理者として実行」して再試行。 |
複数 IP を RemoteAddress に指定したが、全てが許可されていない |
スペースやカンマの余計な文字 | 正しい区切りはカンマ(例:192.168.1.10,192.168.1.20)で、余計な空白は除去する。 |
ベストプラクティスと注意点
- 最小権限の原則
- 必要なポート・プロトコルだけを許可し、余計なアプリケーションの規則は作らない。 - ロギングの有効化
- 「Windows Defender ファイアウォール」→「プロパティ」→「ロギング」で受信がブロックされたログを取得し、異常アクセスを監視できるようにする。 - 定期的なレビュー
- 企業のネットワーク構成が変わったら、許可 IP リストを見直す。自動化スクリプトにGet-NetFirewallRuleで一覧取得し、CSV で管理すると便利。
まとめ
本記事では、Windows10 のファイアウォールで特定 IP アドレスからの通信だけを許可する方法 を以下の三つの観点から解説しました。
- GUI を用いた受信規則の作成とスコープ設定
- PowerShell で自動化・スクリプト化する手順
netshコマンドによるレガシー環境向けの設定
これにより、限定されたリモートアクセスを安全に実装できる と同時に、トラブルシューティングのポイントやベストプラクティス も押さえることができます。次回は、複数の IP アドレスやサブネットをまとめて管理する高度なスクリプト例、そして Windows Defender の「高度なセキュリティ」機能を活用したログ分析手法について取り上げる予定です。
参考資料
- Microsoft Docs – Windows Defender Firewall with Advanced Security
- PowerShell Cmdlet Reference – New-NetFirewallRule
- Netsh advfirewall command reference
