Windows 10やWindows 11 PCにサービスを構築して。
スマートフォンや他のPCからサービスにアクセスするため、netshコマンドでファイアウォールのルールを作ったのですが。
これって、名前が重複しても、同じ名前で同じルールをいくらでも追加できてしまうのですね。
今後、そのような事が無いように、判定文付きのnetshコマンドを作ろうと思います。
重複した規則の削除
「セキュリティが強化されたWindows Defenderファイアウォール」を起動してみました。
wf.msc
たとえばこちらの記事で作成しました
WSL2のNextcloudサーバ用に作成したルールが、このような感じで重複して作られていました。あとで改めて、ファイアウォールのルールを作成することにして。
受信の規則・送信の規則どちらとも、重複しているすべてのルールを削除しました。
同じ名前のルールが存在するかの判定処理付きルール作成コマンド
こちらの記事のポッドを対象にしてみたいと思います。
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をサーバとして使用する場合、ファイアウォールのルールの作成は、避けては通れない問題だと思います。
お手軽にファイアウォール全体を無効にしてしまうのは、リスクがある感じがします。
コマンドで作ると重複するという罠は、なんとか抜け出せましたので。
同じような状況の場合、よろしければお試し下さい。