netshコマンドでファイアウォールのルールを重複せずに作るには

Windows 10やWindows 11 PCにサービスを構築して。

スマートフォンや他のPCからサービスにアクセスするため、netshコマンドでファイアウォールのルールを作ったのですが。

これって、名前が重複しても、同じ名前で同じルールをいくらでも追加できてしまうのですね。

今後、そのような事が無いように、判定文付きのnetshコマンドを作ろうと思います。


重複した規則の削除

「セキュリティが強化されたWindows Defenderファイアウォール」を起動してみました。

wf.msc

たとえばこちらの記事で作成しました

WSL2版Podman.exeのWebアプリにスマートフォンや他のPCからアクセスするには
Windows 10 PCへ、WSL2に対応したPodman.exeをインストールして。 Nextcloudを動かしてみました。 ...

WSL2のNextcloudサーバ用に作成したルールが、このような感じで重複して作られていました。あとで改めて、ファイアウォールのルールを作成することにして。

受信の規則・送信の規則どちらとも、重複しているすべてのルールを削除しました。


同じ名前のルールが存在するかの判定処理付きルール作成コマンド

こちらの記事のポッドを対象にしてみたいと思います。

Windows版podmanでvaultwardenをSSL化してみました
先日、Windows版のPodmanでVaultwardenを起動してみましたが。 スマートフォンアプリでアクセスしようとする...

podmanでvwd-podというポッドを起動し。

TCPポート番号10443をポートフォワード。

そしてファイアウォールのルールとして、「TCP 10443」という名称の受信ルール・送信ルールを作成して、通信を許可する内容です。

管理者権限で実行する必要があります。ご注意下さい。

rem podmanマシンのIPアドレス取得
FOR /F %%i in ('podman.exe machine ssh "cat /proc/net/fib_trie | sed -e 's/^[ \-\|\+]*[ \-]*//' | grep '[\d]*\.' |grep -v -e '0.0.0.0' -e '^127\.[\d]*' -e '\/' -e '\.0$' -e '\.255$'"') DO set IPADR=%%i

rem ポッド起動
podman pod start vwd-pod

rem ポートフォワード
set PTNB=10443
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=%PTNB% connectaddress=%IPADR% connectport=%PTNB%

rem 受信ルール
netsh advfirewall firewall show rule name= "TCP %PTNB%" dir=in
IF %ERRORLEVEL% GEQ 1 (
netsh advfirewall firewall add rule name= "TCP %PTNB%" dir=in action=allow protocol=TCP localport=%PTNB%
)

rem 送信ルールつ
netsh advfirewall firewall show rule name= "TCP %PTNB%" dir=out
IF %ERRORLEVEL% GEQ 1 (
netsh advfirewall firewall add rule name= "TCP %PTNB%" dir=out action=allow protocol=TCP localport=%PTNB%
)

ルールの作成(add)の前に、ルールの表示(show)を行っています。

ルールが存在すれば、環境変数ERRORLEVELに0が入ります。

ルールがない場合、1が入るため、IF文で1以上かどうかを判定しました。

これで、既に同じ名称のルールが存在する場合は、作成されなくなります。


Windows 10やWindows 11をサーバとして使用する場合、ファイアウォールのルールの作成は、避けては通れない問題だと思います。

お手軽にファイアウォール全体を無効にしてしまうのは、リスクがある感じがします。

コマンドで作ると重複するという罠は、なんとか抜け出せましたので。

同じような状況の場合、よろしければお試し下さい。

スポンサーリンク

フォローする

スポンサーリンク