【Windows 10】Windowsファイアウォールで特定のWebサイト以外のアクセスを禁止する方法

# はじめに
本来はプロキシサーバ立てて、そちらで制御する方が良いのは承知してますが、どうしてもWindows標準のFirewallで制御せざるを得ない場合に参考になればと思い書きました。
ちなみにFirewallなので、ドメインやFQDN単位での制御はできず、IPアドレス単位での制御になります。
また、ここで紹介する手順はWindows10 Homeでやってみたものです。ProやEnterpriseでは少し異なる可能性があるので注意してください。
# 手順概要
大まかな手順は以下のとおり。

1. 端末から外部への通信の制御を「基本すべて許可」から「基本すべて禁止」に変更
2. 個別に通信の許可が設定されているもの（特にWebブラウザ）の許可ルールを無効化
3. Webアクセス通信で使う80と443ポートへのアクセスを接続先のIPアドレス単位で個別に許可するルールを作る

# 詳しい手順
## 端末から外部への通信の制御を「基本すべて許可」から「基本すべて禁止」に変更
「セキュリティが強化されたWindows Defenderファイアウォール」を開く。
　※開き方が分からない方は以下サイトの1〜4の手順を参考にしてください。
　https://solutions.vaio.com/1501

![1.png](https://qiita-image-store.s3.amazonaws.com/0/364751/a46fc384-048d-9f01-f44b-260c33f85160.png)

Windows Defenderファイアウォールのプロパティを開く。
![2.png](https://qiita-image-store.s3.amazonaws.com/0/364751/a1d656ca-b7b8-aad4-ff7b-b2420e48fa42.png)

ドメインプロファイル、プライベートプロファイル、パブリックプロファイルのすべてで、「送信接続」を「ブロック」に変更し、「OK」をクリックする。
![4.png](https://qiita-image-store.s3.amazonaws.com/0/364751/df622ca5-e8cc-dd75-8a23-bbed958635cf.png)
## 個別に通信の許可が設定されているもの（特にWebブラウザ）の許可ルールを無効化
「送信の規則」をクリックする。
![6.png](https://qiita-image-store.s3.amazonaws.com/0/364751/dccb68b0-775d-6e6d-a7f4-ff877d714227.png)

送信の規則の中で、Webブラウザ（デフォルトで入っているものは恐らく「Microsoft Edge」）を右クリックして、「規則の無効化」をクリック。
![7.png](https://qiita-image-store.s3.amazonaws.com/0/364751/69c78b4a-bf9e-ccd2-eb67-136aa5840017.png)
他に不要なルールは全部ここで無効化。
できるなら一度すべて無効化してから必要最低限のもの（DNSとか）だけ有効化すると良い。

ここで一応、適当なWebサイトにアクセスして、表示できなくなっていることを確認。
![8.png](https://qiita-image-store.s3.amazonaws.com/0/364751/36cd204a-d3d7-da7b-b026-6a3cf3734fc8.png)
## Webアクセス通信で使う80と443ポートへのアクセスを接続先のIPアドレス単位で個別に許可するルールを作る
「新しい規則」をクリック。
![8.5.png](https://qiita-image-store.s3.amazonaws.com/0/364751/d259dfd2-8a26-789c-88a8-298cce0b2855.png)

「ポート」を選択して次へ。
![10.png](https://qiita-image-store.s3.amazonaws.com/0/364751/f32bb68c-5bde-0077-2a88-14c90765de8d.png)

「TCP」を選択して、「特定のリモートポート」に「80,443」と入力して次へ。
![12.png](https://qiita-image-store.s3.amazonaws.com/0/364751/3a98120d-2d8f-936b-109a-4a6d1e84ee3d.png)

「接続を許可する」を選択して次へ。
![14.png](https://qiita-image-store.s3.amazonaws.com/0/364751/d19ba815-ef5d-bd52-866a-b38c965ac55f.png)

すべてにチェックが入っている状態のまま次へ。
![15.png](https://qiita-image-store.s3.amazonaws.com/0/364751/7e5dd028-5094-f39b-14ad-f773accc64a5.png)

適当な名前（例：Webサイトホワイトリスト）を入力して「完了」をクリック。
![16.png](https://qiita-image-store.s3.amazonaws.com/0/364751/226088ef-d8f2-725e-2322-4fab88e9b02a.png)

一覧から上記で作った規則を探し（たぶん一番上にできている）、右クリックして「プロパティ」を選択。
![17.png](https://qiita-image-store.s3.amazonaws.com/0/364751/1b1cbc9d-1d6e-52e5-2394-23380bc2014a.png)


「スコープ」タブを選択し、「リモートIPアドレス」の「これらのIPアドレス」を選択し「追加」をクリック。
![19.png](https://qiita-image-store.s3.amazonaws.com/0/364751/9a33bf5d-6f7a-547c-ee64-7ab9a54c7b89.png)

アクセスを許可する特定のWebサイトのIPアドレスを調べ（※）、「このIPアドレスまたはサブネット」か「このIPアドレスの範囲」に入力し「OK」をクリックする。
![20.png](https://qiita-image-store.s3.amazonaws.com/0/364751/29aaa983-7f5e-419f-5aae-3ebbf0a503d6.png)

（※）WebサイトのIPアドレスの調べ方が分からない方は以下を参考にしてください
https://www.google.com/amp/s/ischool.co.jp/2018-09-10/%3famp=1
#注意事項
##一つのIPアドレスを許可しても正常に表示されないサイトがある
Webサイトを正しく表示するために必須の（サイトに埋め込まれている）パーツが、許可していないIPアドレス（別ドメイン）にある場合、そのIPアドレスも許可登録しないと正常に表示できません（表示が正常でもボタン等が正しく動作しない場合もあります）。
静的サイトならほぼ問題なく表示されると思いますが、動的サイトの場合、1つのIPアドレスを許可しただけでは正常に動かない等の問題が起きる可能性が高いです。
結構大変ですが、当該WebサイトのHTMLソースを見て他のドメインの利用を調べるか、Wiresharkで当該Webサイトにアクセスした際の接続先IPアドレスを洗い出すなどして、ホワイトリストに登録しましょう。ブラウザの開発ツールを使って調べる手もあります。
##明示的に許可しないとOSやアプリケーションの更新ができなくなる
Windows Updateやインターネット経由で更新が必要なソフト（ウイルス対策ソフト等）の更新用のサイトのIPアドレスもホワイトリストに登録しておかないと、更新ができなくなってしまうので要注意です。
IPアドレス単位での許可が大変であれば、プログラム単位で許可（ウイルス対策ソフトはどこへでもアクセス可とする等）してしまう手もあります。