バックグラウンド通信を遮断してパケット代を節約する（Windowsユーザ向け）

## 誰のためのドキュメント
 - スマホでテザリングをよく利用する人
 - パケット制限を受けると発狂しそうになる人
 - パケット代金を抑えたい人
 - Windows使いの人

## 背景
遅すぎる＆屋内で電波弱すぎることを理由にWIMAXを解約してからは外出先ではiPhoneのテザリングを利用している。
移動中のちょっとした時間だけなので7GB制限に達することはまれだがここ最近外出が多く今月も10日残っているのに1GBを切ってしまった。
ということで少しでもパケットを節約するべくWindowsのファイアーウォールを使用して不要な通信を遮断することにする。


## Before & After 

### 変更前のファイアーウォール設定

|プロファイル  |ステータス  |設定値  |
|---|---|---|
|ドメインプロファイル  |無効  |既定値  |
|プライイベートプロファイル  |無効  |既定値  |
|パブリックプロファイル  |無効  |既定値  |

すべて無効っすｗ





### 変更後のファイアーウォール設定
Web通信系の通信とSSHのみ許可する

|プロファイル  |ステータス  |設定値  |
|---|---|---|
|ドメインプロファイル  |有効  |既定値  |
|プライイベートプロファイル  |有効  |既定値  |
|パブリックプロファイル  |有効  |icmp / http(s) / dns / dhcp / ssh の送信許可、それ以外の送信は拒否|


## 設定方法
[Ctrl+R] - [ファイル名を指定して実行] - [firewall.cpl]を実行してWindowsファイアーウォール画面を表示する。
<img width="285" alt="2017-05-02_15h46_11.png" src="https://qiita-image-store.s3.amazonaws.com/0/64854/6e698490-033b-6489-4fae-68bf69fa8984.png">


[詳細設定]をクリック
<img width="675" alt="2017-05-02_15h49_10.png" src="https://qiita-image-store.s3.amazonaws.com/0/64854/7ef5ff33-78fb-f2c6-af8a-18ca37a05c20.png">


[Windowsのファイアーウォールプロパティ]をクリック
<img width="785" alt="2017-05-02_15h57_56.png" src="https://qiita-image-store.s3.amazonaws.com/0/64854/8170215a-96a3-e6ba-3cc7-b253db0c98e6.png">


[パブリックプロファイルタブ] - [送信接続]を[ブロック]に変更する。
<img width="301" alt="2017-05-02_15h58_44.png" src="https://qiita-image-store.s3.amazonaws.com/0/64854/60b11651-9c66-d18c-83fc-86538e5c8ad3.png">


[送信の規則]画面に移動し、すべてのルールを無効化する。このタイミングですべての送信は遮断される。


次に許可する通信用のルールを作成していく。まずhttp(s)を許可するルールを作る。
[新しい規則]をクリック
<img width="785" alt="2017-05-02_16h00_15.png" src="https://qiita-image-store.s3.amazonaws.com/0/64854/c2994a93-a6bf-9d9f-07a5-13716a3ffded.png">


[規則の種類]で[ポート]を選択
<img width="535" alt="2017-05-02_16h00_45.png" src="https://qiita-image-store.s3.amazonaws.com/0/64854/1555e4f6-db9d-ca72-8f93-dabab57f7b5c.png">


[プロトコルおよびポート]でプロトコルは[TCP]、リモートポートには[80, 443]を入力
<img width="535" alt="2017-05-02_16h01_24.png" src="https://qiita-image-store.s3.amazonaws.com/0/64854/630b0ef9-8205-b7db-c800-7d55f1e3c452.png">



[操作]で[接続を許可する]を選択
<img width="535" alt="2017-05-02_16h02_06.png" src="https://qiita-image-store.s3.amazonaws.com/0/64854/831b774f-441c-a469-bb5d-762408d1ccab.png">


[プロファイル]では[パブリック]のみにチェックをつける。
<img width="535" alt="2017-05-02_16h02_34.png" src="https://qiita-image-store.s3.amazonaws.com/0/64854/5c283139-bdd6-cd59-f69c-7cd45f7eb03f.png">


[名前]に[allow http(s)]と入力
<img width="535" alt="2017-05-02_16h03_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/64854/6bec1bf0-127e-ac91-a427-e34a393b855e.png">


同様にして各プロトコル用のルールを追加していく。

|規則の種類  |プロトコル  |ポート  | 操作| プロファイル| 名前|   
|---|---|---|---|---|---|---|
|ポート  |tcp  |80,443  | 許可| パブリックプロファイル| allow http(s)|   
|ポート  |udp  |53  | 許可| パブリックプロファイル| allow dns|   
|ポート  |udp  |67, 68  | 許可| パブリックプロファイル| allow dhcp|   
|ポート  |tcp  |22  | 許可| パブリックプロファイル| allow ssh|   
|カスタム  |ICMPv4  |-  | 許可| パブリックプロファイル| allow ping|   

Webブラジングとssh接続できることを確認する。
これでWeb ssh以外の通信は遮断される設定になった。

## トラブルシュート
Q. ネットにつながらないよ
A. プロキシを通しているならプロキシに接続するためのポートも許可する。(tcp/8080とか)

Q. ネットにつながらないよ
A. `https://hoge.com:9443/login.php` みたいにアクセス先ポートが標準ポートでない場合、個別にそのポートも許可する。この例の場合(tcp/9443)

Q. sshがつながらないよ
A. サーバ側のsshポートを標準ポート(22)から変更している場合は変更したポートを許可する。

Q. ◯◯も使えるようにしたい
A. そのプログラムで使用しているポートとプロトコルを調べて許可してください。

Q. 使用ポートってどうやって調べる？
A. ググるかFirewallのログを見て調査。
[ファイアーウォールのプロパティ] - [ログ] - [カスタマイズ] - [破棄されたログを記録に残す]を[はい]にする。
<img width="301" alt="2017-05-02_16h04_02.png" src="https://qiita-image-store.s3.amazonaws.com/0/64854/94d3520a-0657-0c23-1b3a-21837f9e3abe.png">


すると`C:\Windows\system32\LogFiles\Firewall\pfirewall.log`にDropログも記録されるようになる。
あとはログを見ながら許可したいプログラムを起動し、ログからポートを特定していく。

ログの閲覧はpowershellを起動してtailfもどきを使うと簡単
具体的には

```
cat "C:\Windows\system32\LogFiles\Firewall\pfirewall.log" -wait -tail 10

2017-05-02 15:35:02 ALLOW UDP 10.4.30.187 103.5.140.18 54923 53 0 - - - - - - - SEND
2017-05-02 15:35:02 ALLOW UDP 10.4.30.187 103.5.140.19 54923 53 0 - - - - - - - SEND
2017-05-02 15:35:03 DROP TCP 10.4.30.187 46.137.159.220 55176 8443 0 - 0 0 0 - - - SEND
2017-05-02 15:35:03 DROP TCP 10.4.30.187 46.137.83.130 55177 8443 0 - 0 0 0 - - - SEND
2017-05-02 15:35:03 DROP TCP 10.4.30.187 176.34.117.191 55178 8443 0 - 0 0 0 - - - SEND
```

ログの意味は左カラムから
タイムスタンプ、許可/拒否、プロトコル(tcp/udp)、送信元IP、宛先IP、送信元ポート、宛先ポート

Q. 外出先から戻ってきたらどうするの
A. ファイアーウォール無効にするｗ

Q. 上手く動かなくなったからリセットしたい。
A. [セキュリティが強化されたWindowsファイアーウォール]の画面で[規定のポリシーを復元]でおｋ