Windows ファイアウォールのログ取得の設定方法やリアルタイム閲覧について
2018/06/06
本エントリーの目次
Windows ファイアウォールのログを取得したい!
Windows PCのファイル共有やプリンター共有、ネットワークの設定などを行っていて、機能が正常に動作しない。
または異常に動作が遅い、正常に通信できない、といった現象が起きている場合、Windowsの標準機能の一つとして搭載されているWindows ファイアウォールによって、目的の通信の一部、あるいは全部が遮断されている可能性があります。
もしWindows ファイアウォールが原因で問題が起きていることが疑われるのであれば、一時的にファイアーウォールを無効化。
これで正常に通信ができるようになれば、Windows ファイアウォールが原因であろう、という切り分けは可能です。
ですがより詳細な情報を取得したい場合には、Windows ファイアウォールのログを取得したいこともあるでしょう。
そこで今回は、Windows ファイアウォールのログ取得設定の方法やその見方(各項目の意味)、抽出(grep)閲覧、リアルタイム閲覧(tail -F)方法についてご紹介します!
Windows ファイアウォールのログ取得設定方法
Windows ファイアウォールは初期設定では、ログが出力されないように構成されています。
そのため以下手順で設定を変更し、Windows ファイアウォールのログ出力機能を有効にする必要があります。
まずはコントロールパネルを開き、表示方法で『小さいアイコン』を選択し、小さいアイコン表示を行ってください。
参考:Windows 10のコントロールパネルを表示する方法
次に『Windows Defender ファイアウォール』をクリック。
Windows Defender ファイアウォールの設定画面が表示されるので、画面左にある『詳細設定』をクリックします。
すると以下のような『セキュリティが強化されたWindows Defender ファイアウォール』の詳細設定画面が表示されるので、画面中央にある概要部を確認。
そして『アクティブです』と表記されているネットワーク プロファイル(下図ではパブリック プロファイル)がどれかを覚えておいてください。※
その後、画面左側のツリーペインにある『ローカル コンピューター のセキュリティが強化されたWindows Defender ファイアウォール』を右クリックし、『プロパティ』をクリックします。
※アクティブなネットワーク プロファイルは、多くの場合『プライベート』だと思います。
ただしActiveDirectory環境のメンバーコンピューターであれば『ドメイン』、公衆無線LAN(Wi-Fi)ネットワークに接続されていれば『パブリック』となっていることもあります。
また複数のNICを搭載しているPCなどでは、『アクティブです』と表記されているネットワーク プロファイルが複数存在する場合もあります。
『Windows Defender ファイアウォール』の『プロパティ』画面では、上部のタブで先ほど確認したアクティブなプロファイルのタブを選択し、画面下部の『カスタマイズ』ボタンをクリックしてください。
アクティブなプロファイルが複数存在した場合は、ログを取得したいプロファイルの『カスタマイズ』ボタンを押下します。
『ログ設定のカスタマイズ』画面が表示されるので、破棄(DROP)されたパケットを記録したい場合は『破棄されたパケットをログに記録する』を『はい』に、許可(ALLOW)されたパケットを記録したい場合は『正常な接続をログに記録する』を『はい』に設定してください。(初期設定ではどちらも『いいえ(規定)』が選択されています。)
ログの出力先は『名前』で指定されたパスとなり、初期設定では以下が指定されています。
1 | %systemroot%\system32\LogFiles\Firewall\pfirewall.log |
『サイズ制限(KB)』ではログの最大サイズ(KB)を指定してください。
初期設定では4,096KB(4MB)が指定されています。
ログはこの最大サイズを超えると、pfirewall.log.oldという名前にリネームされて履歴が保存されます。
そして新たな空のpfirewall.logにログが出力されるようになります。
pfirewall.logとpfirewall.log.oldはそれぞれ複数作られるわけではなく、常に1つずつです。(ログ出力先フォルダーには、pfirewall.logとpfirewall.log.oldのみが存在するようにログローテートされる。)
そのため『サイズ制限(KB)』が初期設定の4,096KB(4MB)であった場合、ログフォルダーのサイズは最大で8MB前後まで増えます。
また画面中の注意書きにも記載があるとおり、GPOなどでログファイル名を構成する場合、ログの出力先フォルダーへのアクセス許可をWindows Defender ファイアウォール サービスに与える必要があります。
各設定が完了したら、最後に『OK』ボタンをクリックして変更を確定すれば、設定完了です。
これらの設定により、Windows ファイアウォールのログが出力されるようになります。
Windows ファイアウォールのログ閲覧方法
Windows ファイアウォールのログ出力設定が完了すれば、『ログ設定のカスタマイズ』画面の『名前』で指定されたパスに、Windows ファイアウォールのログが出力されるようになります。
そこでさっそくログを見ようと、保存先にアクセス。(※初期設定では、%systemroot%\system32\LogFiles\Firewall\pfirewall.log)
メモ帳でログファイルを開こうとすると、『このファイルを開くためのアクセス許可がありません。』と表示されてしまい、ログファイルを開けないはずです。
これは以下の方法で閲覧可能です。
管理者権限で起動したメモ帳などで閲覧する方法
pfirewall.logやpfirewall.log.oldなどのログファイルを開くには、管理者権限が必要です。
そのためメモ帳でこれらファイルの内容を閲覧したい場合、管理者権限で起動したメモ帳でログファイルを開く必要があります。
参考:Windows アプリケーションを管理者権限で起動・実行する方法
管理者権限でメモ帳を起動したら、画面左上の『ファイル』メニュー → 『開く』から、ログファイルを選択して開いてください。
※管理者権限で起動したアプリに、非管理者権限で起動したエクスプローラーからファイルをドラッグ&ドロップすることはできません。したがってエクスプローラーから管理者権限で起動したメモ帳にドラッグ&ドロップしてログファイルを開くことはできないのです。
ログファイルをコピーして開く方法
pfirewall.logやpfirewall.log.oldなどのログファイルを開くには、さきにも書いたとおり管理者権限が必要です。
ところがデスクトップなど任意の場所に一度コピーしてからであれば、管理者権限は必要ありません。
したがってログファイルを簡単に開きたい場合には、一度デスクトップにログファイルをコピーし、それをメモ帳で開くと良いでしょう。(通常の方法で起動した非管理者権限のメモ帳にドラッグ&ドロップすれば開けます。)
管理者権限で起動したPowerShellで閲覧する方法
Windows ファイアウォールのログの内容は、管理者権限で起動したPowerShellで確認することも可能です。
この場合には、Get-Contentコマンドレットを使用します。
たとえば、C:\Windows\System32\LogFiles\Firewall\pfirewall.logというパスに保存されたログの内容を、Get-Contentコマンドレットを使って閲覧すると、以下のように結果を取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 | PS C:\WINDOWS\system32> Get-Content C:\Windows\System32\LogFiles\Firewall\pfirewall.log #Version: 1.5 #Software: Microsoft Windows Firewall #Time Format: Local #Fields: date time action protocol src-ip dst-ip src-port dst-port size tcpflags tcpsyn tcpack tcpwin icmptype icmpcode info path 2018-02-16 13:47:21 DROP ICMP 192.168.31.200 192.168.31.230 - - 60 - - - - 8 0 - RECEIVE 2018-02-16 13:47:26 DROP ICMP 192.168.31.200 192.168.31.230 - - 60 - - - - 8 0 - RECEIVE 2018-02-16 13:47:31 DROP ICMP 192.168.31.200 192.168.31.230 - - 60 - - - - 8 0 - RECEIVE 2018-02-16 13:47:36 DROP ICMP 192.168.31.200 192.168.31.230 - - 60 - - - - 8 0 - RECEIVE PS C:\WINDOWS\system32> |
grepコマンドのような条件に一致する行を取得する方法
Linux系のOSなどでは、膨大なログの中から目的のデータを探すために、特定の文字列を含む行を抽出することを目的とし、以下のようにgrepコマンドを使うことがあります。
1 | less ログのパス | grep "ICMP" |
このコマンドでは、ログの中からICMPという文字列を含む行だけを抜き出して表示せよ、と指示しています。
これと同じようなことをPowerShellで行いたい場合、Linux系のgrepコマンドと似たことができるSelect-Stringというコマンドレットを使用すれば可能です。
Select-Stringを使って先のコマンドと同じようなことを行う場合、こんな感じになります。
1 | Get-Content C:\Windows\System32\LogFiles\Firewall\pfirewall.log | Select-String "ICMP" |
これ以外にもSelect-Stringを使えば、さまざまな条件でログを抽出できるので、Get-Contentコマンドレットと併用して使用すると良いでしょう。
Windows ファイアウォールのログをリアルタイム閲覧(tail -F)する方法
通信不具合の原因を調べるために、ファイアウォールのログを監視し、リアルタイムで閲覧したいこともあるでしょう。
こういった場合Linux系のOSなどでは、tailコマンドを使って実現可能です。
1 | tail -F ログのパス |
PowerShellでこれと同じことを行う場合には、Get-Contentコマンドレットに-Tailと-Waitパラメーターを付けて使用します。
下記を実行すればtail -Fと同じようなことができています。
1 | Get-Content C:\Windows\System32\LogFiles\Firewall\pfirewall.log -Tail 0 -Wait |
ちなみにGet-Contentコマンドレットの-Tail及び-Waitパラメーターと、Select-Stringコマンドレットを組み合わせることも、もちろん可能です。
たとえば、ICMPという文字列を含むログだけを抜き出してリアルタイム表示したければ、以下のようなコマンドを実行します。
1 | Get-Content C:\Windows\System32\LogFiles\Firewall\pfirewall.log -Tail 0 -Wait | Select-String "ICMP" |
Windows ファイアウォールのログの見方や、各項目の意味について
Windows ファイアウォールのログファイルはメモ帳で見ると、ヘッダーと内容部がずれるため見づらいです。
そのためログファイルを細かく分析する場合には、Excelで開くことをおすすめします。
Excelを使ってログファイルを開くと、検索やフィルターをかけやすいため、分析がより効率的に進むでしょう。
これはログファイルをデスクトップなどの任意の場所にコピーしてから、あらかじめ起動しておいたExcelにドラッグ&ドロップを実行。
次にA列を選択状態にしてから、リボン部で『データ』タブ → 『区切り位置』とクリックして、区切り位置指定ウィザードを起動します。
そして『スペース』文字で区切るように設定し、区切りを実行してください。
以上の操作により、ログがフィールドごとに分けられて見やすくなるのはもちろんのこと、検索やフィルターがかけやすくなります。
尚、上記画像を見ていただくと分かるとおり、#Fields:の行(ヘッダー部)は1列ずれているので、#Fields:セルを選択して右クリック →『削除』→『左方向にシフト』とクリックし、ずれを調整してください。
Windows ファイアウォールのログの各出力項目の意味について
最後に、Windows ファイアウォールのログの各出力項目の意味について説明しましょう。
ログに出力される各フィールドの意味は、それぞれ以下のとおりです。
- date:ログの記録日
- time:ログの記録時間
- action:ファイアウォールが検出した通信の動作
OPEN → 通信開始
CLOSE → 通信終了
ALLOW → パケットの許可
DROP → パケットのブロック(拒否・破棄・ドロップ)
INFO-EVENTS-LOST → 発生したものの、ログには記録されなかったイベントの数 - protocol:通信に使用されたプロトコル
TCP、UDP、ICMPなどの文字列や番号が記録されます。 - src-ip:送信元 IP アドレス
- dst-ip:送信先 IP アドレス
- src-port:送信元コンピュータの送信元ポート番号(1 ~ 65,535)
ポート番号がない場合は-が出力される。 - dst-port:送信先コンピュータの送信先ポート番号(1 ~ 65,535)
ポート番号がない場合は-が出力される。 - size:パケットのサイズ(B=バイト単位)
- tcpflags:IP パケットの TCP ヘッダー内にある TCP 制御フラグ
A → Ack – 受信確認フィールドが有効
F → Fin – 送り手のデータ送信の終了
P → Psh – 強制送信
R → Rst – 接続の強制切断
S → Syn – シーケンス番号の同期
U → Urg – 緊急ポインタ フィールドが有効 - tcpsyn:パケットの TCP シーケンス番号
- tcpack:パケットの TCP 受信確認番号
- tcpwin:パケットの TCP ウィンドウ サイズ(B=バイト単位)
- icmptype:ICMP メッセージの Type フィールドを表す番号
- icmpcode:ICMP メッセージの Code フィールドを表す番号
- info:操作に応じたその他の情報
- path:送受信に関する情報
SENDやRECEIVEなどの文字列が記録される。
SEND → 送信
RECEIVE → 受信
※各フィールドは共通し、出力すべき情報がない場合は-が出力されます。
以上、参考になさってくださーい!