WindowsファイアウォールをnetshでRemote IP(範囲・CIDR・複数)追加・変更する方法|既存ルール編集も解説

Windows ファイアウォールの受信規則を netsh で作ったあと、「特定の接続元 IP だけ許可したい」と思っても、GUI では見つけにくく、コマンドだと追加方法に迷いがちです。本記事では remoteip の指定(範囲・CIDR・複数)と、既存ルールを安全に更新する手順を具体例付きで整理します。

目次

Windows ファイアウォールで Remote IP を絞り込む意味

Windows ファイアウォールの受信規則は「ポートを開ける/閉める」だけではなく、接続元(Remote IP)を限定できます。たとえば FTP・RDP・管理用 Web コンソールなど、外部に公開すると攻撃対象になりやすいサービスは、許可する接続元を絞るだけでリスクが大きく下がります。

特にサーバー運用では、次のような場面で Remote IP 制限が効きます。

  • 社内・拠点・VPN の固定グローバル IP からだけ管理を許可したい
  • 踏み台サーバー(ジャンプホスト)からのみアクセスさせたい
  • 特定の監視サーバーからの疎通(TCP/UDP)だけを許可したい
  • 公開は必要だが、国や ISP レベルで広く開けたくない

GUI(Windows Defender ファイアウォールの詳細設定)でも Remote IP は設定できますが、運用が進むと「どのルールが対象か」「同名ルールがあるか」「カスタム扱いで項目が見つけにくい」などで詰まりがちです。そこで netsh advfirewall で確実に指定・更新する方法を押さえておくと、再現性の高い手順として残せます。

最初に押さえる結論:remoteip= で指定し、既存ルールは new remoteip= で更新する

今回の主題は次の 2 点です。

  • 新規作成時:remoteip= を付ければ Remote IP(単体/範囲/CIDR/複数)を指定できる
  • 既存ルール更新:set rule で new remoteip= を使う(ただし「追加」ではなく「置き換え」)

これだけ覚えておけば、GUI で作った「カスタム」ルールでも、ルール名で特定できる限り同様に更新できます。

netsh でよく使う操作の早見表(作成・確認・変更・バックアップ)

やりたいことコマンド例ポイント
ルールを新規作成netsh advfirewall firewall add rule ... remoteip=...remoteip= で接続元を限定
既存ルールの Remote IP を更新netsh advfirewall firewall set rule name="..." new remoteip=...「追加」ではなく置き換え
ルール内容を確認netsh advfirewall firewall show rule name="..." verbose更新前後で必ず確認
設定をバックアップnetsh advfirewall export "C:\backup\firewall.wfw"変更前に取ると安心
設定を復元(置き換え)netsh advfirewall import "C:\backup\firewall.wfw"現在の設定が上書きされる

remoteip= の指定ルール(範囲・CIDR・複数)を整理

remoteip= は「カンマ区切り」で複数指定できます。IP の表記は混在させられるので、単体 IP/範囲/CIDR を必要に応じて組み合わせます。運用で事故が起きやすいので、スペースを入れずに書くのが無難です。

指定パターン例意味使いどころ
単体 IP203.0.113.10その 1 台だけ許可固定 IP の管理端末/踏み台サーバー
IP 範囲(開始-終了)192.168.1.1-192.168.1.100範囲内を許可社内セグメントの一部だけ許可
CIDR172.16.0.0/16ネットワーク単位で許可拠点/VPN セグメントをまとめて許可
複数指定(カンマ区切り)192.0.2.10,198.51.100.0/24複数の条件を同時に許可複数拠点・複数踏み台からのアクセス
全許可anyRemote IP を限定しない一時的な切り分け/制限を外す
ローカル サブネットlocalsubnet同一サブネットからのみ許可閉域ネットワーク内のサーバー公開

なお、Remote IP 制限は「受信規則」では 接続元(クライアント側) を意味しますが、「送信規則」では 宛先(サーバーが接続する相手) を意味します。direction(dir)と合わせて理解しておくと混乱しません。

ルール方向remoteip が指すもの例(イメージ)
dir=in(受信)接続元(相手の IP)「この IP から来た接続だけ許可」
dir=out(送信)接続先(相手の IP)「この宛先 IP への通信だけ許可」

IPv6 を扱うときの注意

IPv6 環境では、クライアントが IPv6 を優先して接続する場合があります。Remote IP 制限を IPv4 だけで設計すると「IPv4 は制限したのに IPv6 側は想定外に通る/通らない」といった現象が起きます。必要に応じて IPv6 のプレフィックス(CIDR)も設計に含めてください。

netsh advfirewall firewall set rule name="FTP1" new remoteip=172.16.0.0/16,2001:db8::/32

新規作成時:remoteip= を付けて Remote IP 制限つきルールを作る

まずは「最初から Remote IP を絞った状態」でルールを作る例です。質問にある FTP の TCP 20 番(受信許可)を例にします。

netsh advfirewall firewall add rule name="FTP1" dir=in action=allow protocol=TCP localport=20 ^
  remoteip=192.168.1.1-192.168.1.100,157.60.0.1,172.16.0.0/16

上の例では Remote IP に「範囲」「単体」「CIDR」を混在させています。実務では、次のような追加オプションも併用すると運用しやすくなります。

  • profile=(domain/private/public)で適用範囲を明確化する
  • description= で「なぜこの IP を許可しているか」を残す
  • enable=yes/no で段階的に有効化する
netsh advfirewall firewall add rule name="FTP1" dir=in action=allow protocol=TCP localport=20 ^
  remoteip=172.16.0.0/16,192.168.1.1-192.168.1.100 ^
  profile=domain,private ^
  description="FTP TCP/20: allow only VPN+office ranges" ^
  enable=yes

コマンドは管理者権限(管理者として実行)で実施してください。権限が足りないと作成・更新に失敗します。

既存ルールの Remote IP を変更する(GUI の「カスタム」ルールでも可)

既存ルールを更新する場合は、netsh advfirewall firewall set rule を使い、new remoteip= で Remote IP を更新します。

netsh advfirewall firewall set rule name="FTP1" new remoteip=192.168.1.1-192.168.1.100,157.60.0.1,172.16.0.0/16

GUI で作ったルールがプロパティ上「カスタム」と表示されていても、ルール名(表示名)で特定できる限り、同じように更新できます。カスタムとは「条件が複数付いている(標準テンプレートに収まらない)」という意味合いで、netsh で編集できないことを意味しません。

重要:new remoteip= は「追加」ではなく「置き換え」

ここが最重要ポイントです。netsh の set rule で指定する new remoteip= は既存値の追記ではなく、指定した内容で丸ごと置き換えです。つまり「追加したい」場合でも、最終的に許可したい Remote IP の一覧をすべて書き直す必要があります。

具体例:既存の Remote IP に 1 件だけ「増やす」

たとえば現在の Remote IP が 172.16.0.0/16 のみで、ここに 198.51.100.10 を追加したい場合を考えます。やることは「現在値を確認 → 最終一覧に追記 → その一覧で置き換え」です。

まず現在値を確認します。

netsh advfirewall firewall show rule name="FTP1" verbose

Remote IP が 172.16.0.0/16 だった場合、追加後の最終一覧は 172.16.0.0/16,198.51.100.10 です。これをそのまま new remoteip= に渡します。

netsh advfirewall firewall set rule name="FTP1" new remoteip=172.16.0.0/16,198.51.100.10

「増やしたいのに、なぜ全部書くの?」と感じますが、これが netsh の仕様です。置き換え前に控えを残す(あるいは export でバックアップする)運用が欠かせません。

既存ルールの内容を確認する(show rule verbose)

置き換え事故を防ぐために、更新前後で必ず現在値を確認します。次のコマンドでルールの詳細が表示されます。

netsh advfirewall firewall show rule name="FTP1" verbose

出力の中に「RemoteIP」や「リモート IP」といった項目があるので、そこが期待通りかを確認してください。Windows の言語設定により表示項目名が異なる場合があります。

「同名ルール」がある場合の注意

Windows ファイアウォールは同じ表示名(name)を複数作れてしまいます。その状態で set rule を実行すると、同名の複数ルールに一括で適用されることがあります。意図せず別ルールまで書き換えるのは典型的な事故です。

同名が疑わしい場合は、条件を足して対象を絞るか、命名規則を見直して一意にするのが安全です。例えば「方向」「プロトコル」「ポート」を条件に付けて更新します。

netsh advfirewall firewall set rule name="FTP1" dir=in protocol=TCP localport=20 ^
  new remoteip=172.16.0.0/16,192.168.1.1-192.168.1.100

ルールをまとめて管理したい場合は、作成時に group= を付け、更新も group 指定で行うと運用が楽になります(例:FTP 関連ルールを同じグループ名で揃える)。

netsh advfirewall firewall add rule name="FTP TCP20" group="MyServer-FTP" dir=in action=allow protocol=TCP localport=20 remoteip=172.16.0.0/16
netsh advfirewall firewall add rule name="FTP TCP21" group="MyServer-FTP" dir=in action=allow protocol=TCP localport=21 remoteip=172.16.0.0/16

netsh advfirewall firewall set rule group="MyServer-FTP" new remoteip=172.16.0.0/16,198.51.100.10

「追加したい」運用を安全に回すための実務テクニック

netsh 単体では差分追加ができないため、運用では「現状を確認 → 追記した最終一覧で置き換え」が基本です。次のチェックリストを守るだけでも事故率が下がります。

  • 更新前に export でバックアップ(復旧ルートを確保)
  • show rule で Remote IP を控え、最終形を作ってから set rule
  • 同名ルールがないか確認し、必要なら dir/protocol/port で絞る
  • リモート作業中は、管理系(RDP/WinRM など)のルールを誤って閉じない

バックアップ:エクスポートしておく

ファイアウォール設定はエクスポートできます。変更前に 1 回取っておくと、万が一の復旧が早いです(ただしインポートは現在の設定を置き換えるので取り扱い注意)。

netsh advfirewall export "C:\backup\firewall.wfw"

復元(インポート)する場合:

netsh advfirewall import "C:\backup\firewall.wfw"

「一時的に全許可」に戻して切り分ける

Remote IP 制限のせいで疎通できないか切り分けたい場合は、まず new remoteip=any で制限を外し、通信できるか確認してから段階的に絞る方法が安全です。

netsh advfirewall firewall set rule name="FTP1" new remoteip=any

Remote IP 制限が効かない/期待と違うときに疑うポイント

Remote IP を設定したのに「なぜか通る」「なぜか通らない」場合、設定ミスではなくネットワーク構成が原因のことがあります。

症状よくある原因対策の方向性
想定外の接続元から通ってしまう実際の接続元が NAT/ロードバランサの IP になっている手前機器の IP を許可する、もしくは手前で制限する
許可したはずなのに通らないプロファイル(domain/private/public)が想定と違う適用プロファイルを確認し、profile= を明示する
同じポートなのにルールが効いたり効かなかったり別ルール(ブロック)が優先、またはプログラム/サービス指定の差該当ポートの関連ルールを棚卸しし、意図を揃える
IPv4 は通るのに IPv6 だけ通る/通らないremoteip に IPv6 を含めていない、またはクライアントが IPv6 優先IPv6 の Remote IP も設計する(もしくは IPv6 を無効化/制限)

特に NAT 配下では「クライアントの実 IP」ではなく「NAT 装置の IP」に見えることがあり、Remote IP 制限が期待通りに動きません。経路上の機器(プロキシ、ロードバランサ、VPN ゲートウェイ)を含めて、サーバーから見える接続元を確認しましょう。

FTP は 20 番だけでは足りないことが多い(アクティブ/パッシブの違い)

質問例では FTP の TCP 20 番を開けていますが、FTP は構成により必要ポートが変わります。20 番だけ許可しても通信できないケースが多いので、実務では「どのモードで使うか」から設計するのが安全です。

モード制御接続データ接続ファイアウォールで注意する点
アクティブTCP 21(クライアント→サーバー)TCP 20(サーバー→クライアント)データ接続の向きが逆転しやすく、NAT と相性が悪い
パッシブ(一般的)TCP 21(クライアント→サーバー)サーバー側の任意ポート範囲(クライアント→サーバー)パッシブ用ポート範囲を固定し、その範囲だけ許可する設計が必須

パッシブ FTP を採用する場合は、FTP サーバー側で「パッシブに使うポート範囲」を固定し、その範囲をファイアウォールで許可するのが基本です(例:TCP 50000-50100 など)。

FTP を Remote IP 制限つきで設計する例

例として、次の 3 本を「同じ Remote IP 制限」で揃えると整理しやすいです。

  • TCP 21(制御)
  • TCP 20(アクティブのデータ、使わないなら不要な場合も)
  • TCP 50000-50100(パッシブ用に固定したデータ範囲)
rem 制御(21)
netsh advfirewall firewall add rule name="FTP TCP21" group="MyServer-FTP" dir=in action=allow protocol=TCP localport=21 ^
  remoteip=172.16.0.0/16,198.51.100.10 profile=domain,private

rem アクティブ用(20)※構成によっては不要
netsh advfirewall firewall add rule name="FTP TCP20" group="MyServer-FTP" dir=in action=allow protocol=TCP localport=20 ^
  remoteip=172.16.0.0/16,198.51.100.10 profile=domain,private

rem パッシブ用(固定範囲)
netsh advfirewall firewall add rule name="FTP Passive 50000-50100" group="MyServer-FTP" dir=in action=allow protocol=TCP localport=50000-50100 ^
  remoteip=172.16.0.0/16,198.51.100.10 profile=domain,private

FTP は「つながる/つながらない」がポート設計に強く依存するため、Remote IP 制限を入れる前に、まず必要ポートが整理できているかを確認してください。

GUI で作成した「カスタム」ルールを netsh で編集するコツ

GUI で作ると、次のような理由で「カスタム」表示になることがよくあります。

  • プログラム指定やサービス指定をしている
  • 特定のプロファイル(ドメインのみ等)に限定している
  • インターフェイス種別、エッジ トラバーサルなど複数条件がある

この場合でも、Remote IP という「アドレス条件」を更新するだけなら netsh で問題なく反映できます。ポイントは 対象ルールを 1 つに特定することです。

  • ルール名(name)を一意にする(おすすめ)
  • 一意にできないなら、dir/protocol/port などで絞って set rule
  • 複数ルールをまとめるなら group を活用

よくあるエラーと対処(netsh のつまずきポイント)

No rules match the specified criteria.

指定した条件に一致するルールが 1 つもない状態です。多い原因は「ルール名が違う(全角半角、スペース、記号)」か「dir/protocol/localport で絞り込みすぎ」です。まずは show で存在確認をしてから set すると確実です。

netsh advfirewall firewall show rule name="FTP1"

同名ルールが複数あって意図しないものまで変わった

先述の通り、name は一意ではありません。運用では、ルール名に「ポート」「方向」「用途」を含めて一意にするのが安全です。例:

  • Allow-FTP-In-TCP21
  • Allow-FTP-In-Passive-50000-50100

すでに混在してしまっている場合は、まず GUI か PowerShell で棚卸しし、命名とグループを揃えるところから着手すると、その後の netsh 運用が安定します。

Remote IP を指定したら管理アクセスまで遮断してしまった

リモート作業中に RDP/WinRM/管理 Web を絞り込みすぎると、サーバーに入れなくなることがあります。次のような保険が現実的です。

  • 変更前に out-of-band(iLO/iDRAC/コンソール)やクラウドのシリアルコンソールが使えるか確認
  • 管理用ルールは「まず any にして疎通確認 → 段階的に絞る」
  • 作業時間帯を短くし、ロールバック手順(export/import)を用意

補足:PowerShell で同じことをする場合(将来の運用向け)

netsh は今でも使えますが、Windows のファイアウォール管理は PowerShell(NetSecurity モジュール)の方が扱いやすい場面が増えています。特に「現在の Remote IP を取得して追加して更新する」といった差分処理は PowerShell が得意です。

例:ルールのアドレスフィルターを確認し、RemoteAddress を設定する(基本形)。

Get-NetFirewallRule -DisplayName "FTP1" |
  Get-NetFirewallAddressFilter

Get-NetFirewallRule -DisplayName "FTP1" |
Get-NetFirewallAddressFilter |
Set-NetFirewallAddressFilter -RemoteAddress "192.168.1.1-192.168.1.100","172.16.0.0/16"

ただし、環境によっては DisplayName が重複する・複数ヒットするなどの注意点は同じなので、運用上は「命名とグルーピング」を先に整えるのが近道です。

まとめ:Remote IP 追加のつもりで「置き換え」事故を起こさない

  • 新規作成は remoteip= で Remote IP を範囲/CIDR/複数指定できる
  • 既存ルール更新は set rule の new remoteip= で更新できる(GUI のカスタムでも可)
  • new remoteip= は追加ではなく置き換えなので、最終的に許可したい一覧を全部指定する
  • 同名ルールの存在、プロファイル差、NAT/IPv6 など実務の落とし穴も合わせて確認する

Remote IP 制限は「開けたポートを最小権限に近づける」効果が高い一方で、置き換え操作の事故が起きやすい設定でもあります。show/export を習慣にし、ルール名・グループ名を整備してから運用すると、netsh でも安全に回せます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次