Windowsファイヤウォールの定義をコマンド出力したい場合、よく知られているコマンドでは、加工しづらいデータが出力されます。
加工しやすいCSVファイルで出力するには、GUIでエクスポートするやり方が知られています。
1、2台や1回や2回であればGUIでも良いですが、複数台や複数回に渡りWindowsサーバにRDPしてGUI操作でデータを取得するのは手間がかかります。
遠隔コマンド(CUI)で、かつ加工しやすい形(CSV)で取得できるようにしたいと思い、Webを調べましたが、良い方法が出てきませんでした。
本記事では、筆者が試行錯誤して見つけ出した、Windowsファイヤウォール定義のCSV出力コマンドをご紹介します。
目次
Windowsファイヤウォールの定義を出力する一般的なコマンド
Windowsファイアウォールの定義を取得するためのよく知られているコマンドです。
コマンドプロンプトを開いて下記コマンドを実行します。下記コマンドでは受信の規則を取得します。
netsh advfirewall firewall show rule name=all dir=in > wf_in.txt
実行結果として、「wf_in.txt」が出力され、下記のようなデータが得られます。(一部を抜粋)
規則名: Google Chrome(mDNS インバウンド)
----------------------------------------------------------------------
有効: はい
方向: 入力
プロファイル: ドメイン,プライベート,パブリック
グループ: Google Chrome
ローカル IP: 任意
リモート IP: 任意
プロトコル: UDP
ローカル ポート: 5353
リモート ポート: 任意
エッジ トラバーサル: いいえ
操作: 許可
規則名: Spotify Music
----------------------------------------------------------------------
有効: はい
方向: 入力
プロファイル: ドメイン,プライベート,パブリック
グループ: {78E1CD88-49E3-476E-B926-580E596AD309}
ローカル IP: 任意
リモート IP: 任意
プロトコル: TCP
ローカル ポート: 57621-57631
リモート ポート: 任意
エッジ トラバーサル: いいえ
操作: 許可
規則名: Spotify Music
----------------------------------------------------------------------
(以下略)
このデータ自体は見やすいですが、エクセルに読み込むことはできないですね。
Windowsファイヤウォールの定義をCSV出力する方法(GUI)
続いて、Windowsファイアウォール定義をGUIでCSV出力してみます。
Windowsキーを押下して、「wf.msc」と入力しエンターキーを押下します。
今回は「受信の規則」をエクスポートするので、左メニューの「受信の規則」をクリックします。
利用しているサービスが丸見えなのでモザイクを入れてます。
メニューの「操作」-「一覧のエクスポート」をクリックします。
本操作によりカンマ区切り(CSV)の一覧データが得られます。
これならエクセルに読み込めますが、GUI操作を行わなければなりません。
Windowsファイヤウォールの定義をCSV出力する方法(PowerShell)
コマンドでWindowsファイヤウォールの受信規則定義をCSV出力する方法をご紹介します。
まず、PowerShellを管理者実行します。
Windowsキーを押下し、「powershell」と入力、表示される「Windows Power Shell」を右クリックし、「管理者として実行」をクリックします。
まずは、下記コマンドを実行し、カレントディレクトリをデスクトップに移動します。
cd $env:HOMEPATH/Desktop
下記コマンドを実行します。複数行ありますが、一つのコマンドです。すべてコピーし、PowerShellの画面に貼り付けます。
完了まで数分かかる場合があります。
Get-NetFirewallRule | Where-Object {$_.enabled -eq "true" -and $_.direction -eq "inbound"} |
ForEach-Object{
$Rule = $_
$Port = $_ | Get-NetFirewallPortFilter
$Addr = $_ | Get-NetFirewallAddressFilter
$App = $_ | Get-NetFirewallApplicationFilter
$Sec = $_ | Get-NetFirewallSecurityFilter
[pscustomobject]@{
Name = $Rule.DisplayName
Group = $Rule.Group
Profile = $Rule.Profile
Enabled = $Rule.Enabled
Action = $Rule.Action
Override = $Sec.OverrideBlockRules
Program = $App.Program
LocalAddress = $Addr.LocalAddress
RemoteAddress = $Addr.RemoteAddress
Protocol = $Port.Protocol
LocalPort = $Port.LocalPort
RemotePort = $Port.RemotePort
}
} | export-csv wf_in.csv -encoding default
得られた出力がこちらです。(一部抜粋)
出力したい下記項目がCSVで出力できました。
- ルール名
- アクション
- 有効無効
- ローカルアドレス
- リモートアドレス
- プロトコル
- ローカルポート
- リモートポート
筆者のつぶやき
PowerShellと僕は馬が合いません。
これだけのコマンドを書き上げるのに、3時間も要しました。。
さらに、上記出力の画面ショットではわかりませんが、上記コマンドで取得したローカルアドレスやリモートアドレスは、なんと以下のような表記になります。
192.168.1.10/255.255.254.0
こんな表記見たことがありません。笑
そこで英雄「Python」の力を借ります。
Pythonなら標準モジュールを使って、たった2行でCIDR表記にしてくれます。
> python
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from ipaddress import IPv4Interface
>>> str(IPv4Interface('192.168.1.10/255.255.254.0').with_prefixlen)
'192.168.1.10/23'
>>>
Pythonは人類の宝ですね。(大真面目)
コメント