VPN接続のセキュリティ周りについて

VPN接続をするためにレンタルサーバーを借りたら真っ先にすべき事はセキュリティ対策だ。借りた瞬間から脅威は潜んでいるのですぐにセキュリティを掛ける必要がある。
今回はVPNに関するセキュリティの知見と、そんな時困らないようにセキュリティ対策の手順を記載していく。

:::note info
- 使用プロトコル：WireGuard
- 使用サーバー：ConoHa VPS
- OSテンプレート：Ubuntu
- アプリケーションテンプレート：Docker
- ファイル共有ソフトウェア：Nextcloud
:::

# 0.VPNのセキュリティについて
VPN接続のセキュリティ対策が重要な理由を説明する

### 1.VPN接続はインターネット通信を暗号化するが完全に安全ではない
VPNはデータを暗号化して安全に送受信するための技術だが適切なセキュリティ対策を怠るとVPN自体が攻撃対象になったり情報が漏洩するリスクがある。
- 通信の暗号化：第三者による盗聴の防止
- IPアドレスのマスキング：IPアドレスの匿名性を確保
- データの整合性保護：データを改ざんされないようにする

### 2.DNSリークによる情報漏洩
VPNを使っていてもDNSリークが発生すると接続先のWebサイトやサービスに自分本来のIPアドレスや位置情報が漏れる可能性がある
対策としてVPN設定で`DNS=`の値をVPNのDNSサーバーやGoole Public DNS（8.8.8.8）に変更。DNSリークテストを行うのもあり（調べたら出てくる）

:::note info
**DNSリーク**
通常はVPN経由で接続しVPN側のDNSサーバーを利用するが、DNSリーク時の通信はVPN接続をしているのにISP（プロバイダ）のDNSサーバーを使ってしまい本来のIPアドレスが外部に漏れること
:::

### 3.VPNの切断時に通信が保護されていない（Kill Switch）の必要性
VPN接続が突然切断されると通常のインターネット接続に戻るため知らないうちに非暗号化の通信が発生することがある

:::note info
**Kill Switch**
VPN接続が切れた瞬間に、全ての通信を遮断し情報漏洩を防ぐ機能。一部のVPNクライアント(WireGuardやOpenVPN）ではKill Switchの設定が可能）
※PowerShell、Linuxそれぞれコマンドあり
:::

### 4.VPNプロトコルの選択ミスによる脆弱性
VPNにはいくつかのプロトコルがあり脆弱なプロトコルを選択するとセキュリティリスクが発生する。なので安全なプロトコルを使用する必要がある
- WireGuard
最新のVPNプロトコルで安全かつ高速
- OpenVPN
歴史が長くセキュリティが強固


### 5.VPNサーバー自体が攻撃対象になる
VPNサーバーが適切に管理されてないと以下の攻撃を受けるリスクがある
- ブルートフォース攻撃
VPNのログインID/パスワードを総当たりで破られる
- 中間者攻撃（MITM）
VPNのトンネルを狙った盗聴
- DoS/DDoS攻撃
VPNサーバーへの過剰なリクエストによるサービス停止
- ゼロディ脆弱性
VPNソフトウェアの未知の脆弱性を悪用

このような攻撃を受けない為セキュリティ対策として
- 強力なパスワード＆2段階認証（MFA）の導入
- サーバーの最新パッチ適用（WireGuardやOpenVPNの定期更新）
- ファイアウォール設定（51820/UDP以外のポートを閉じる）
- VPNログの監視（不審なアクセスがないかチェック）

### 6.公共Wi-FiでのVPN利用の重要性
公共Wi-Fi（カフェ、空港、ホテルなど）ではハッカーが通信を盗み見やすい環境の為VPNの利用が特に重要
- 盗聴（スニッフィング）
通信が暗号化されていないとログイン情報やクレジットカード情報が盗まれる
- 偽Wi-Fi(Evil Twin攻撃）
悪意のあるWi-Fiに接続させデータを抜き取る
- セッションハイジャック
ログイン状態のクッキーを乗っ取る

公共Wi-Fiで安全にVPNを利用する為に
- 必ずVPNを有効化して通信を暗号化
- 自動接続設定（Wi-Fiに接続したら即VPNを有効化）
- HTTPSサイトのみアクセス（HTTPは使わない）

:::note warn
VPN接続は機密性のある情報を取り扱う事が多い為、セキュリティリスクや通常のインターネットになると「危険」と言われている。また通信は暗号化するがウイルスを防ぐ機能はないため、マルウェア・フィッシング対策としてウイルス対策ソフト併用は必要！
:::

# ⭐︎VPNが乗っ取られるとは
良くVPNの脆弱性を突かれ「VPNが乗っ取られる危険がある」と聞く。上記と被る点もあるが「乗っ取られるとは」に焦点を当てて具体化していく

:::note info
「乗っ取られる」とはVPN自体が攻撃者に制御される、またはVPN経由の通信が盗聴・改ざんされることを指す。
VPNは通常安全な通信を確保するためのツールだが設定ミスや攻撃者の手口によってセキュリティが破られる可能性がある
:::

### 1.VPNの認証情報（ID・パスワード）が漏洩する
VPN接続には通常「ユーザー名+パスワード」や「認証キー」が必要だが、これが漏洩すると攻撃者がVPNに不正アクセスができる
- パスワードリスト攻撃
他のサイトで流出したパスワードをVPNのログインに使ってみる
- フィッシング攻撃
偽のVPNログインページに誘導しパスワードを盗む
- キーロガー攻撃
PCやスマホにマルウェアを仕込み、入力されたVPN認証情報を盗む

**対策**
- 強力なパスワード（12文字以上、英数字+記号）を設定する
- 2段階認証（MFA）を有効化する
- 不審なVPNログイン試行がないかログを監視する


### 2.VPNサーバーの脆弱性を悪用
VPNサーバー自体にセキュリティホール（脆弱性）があると攻撃者がリモートから侵入できる
- 未修正の脆弱性を突く（ゼロディ攻撃）
VPNサーバーの古いバージョンを狙い、権限を奪取
- 既知の脆弱性を狙う
（例）Palo Alto NetworksのVPNにあった「CVE-2019-1579」などの脆弱性

**対策**
- VPNソフトウェアを最新バージョンに更新する
- 不要なVPNプロトコル（古いPPTPなど）を無効化する
- VPNサーバーのログを定期的にチェックする


### 3.Man-in-the-Middle(MITM)攻撃
VPNの通信が途中で盗聴・改ざんされる可能性がある
- 偽VPNサーバーを設置し、ユーザーを騙す
- DNSハイジャックでVPNサーバーのアドレスを偽装
- SSLストリッピングで暗号化を無効化しデータを盗む

**対策**
- VPNの証明書（TLS/SSL）を適切に管理
- DNSリークを防ぐ設定を有効化
- HTTPSサイトのみ利用し証明書の警告が出たらアクセスしない


### 4.VPNプロトコルが脆弱
VPNにはいくつかのプロトコルがあるが古いものは脆弱で攻撃者に簡単に解析される可能性がある

**対策**
- PPTPは絶対に使わない
- WireGuardかOpenVPNを使う
- IPsecを使う場合は強力な事前共有鍵（PSK）を設定する

### 5.VPNがマルウェアに感染
VPNソフトウェア自体がマルウェアに感染すると、全ての通信が攻撃者に送られる可能性がある
- 無料VPNのアプリにマルウェアが仕込まれている（怪しい無料VPNプロバイダーは危険）
- VPNクライアントのアップデートを偽装しマルウェアを配布
- PCやスマホが既に感染していてVPN通信を盗まれる

**対策**
- 信頼できるVPNプロバイダーを使う（ConoHaVPN、NordVPN、ExpressVPNなど）
- 公式サイトからVPNソフトをダウンロードする
- 定期的にウイルススキャンを実施する


### 6.VPNのログを収集される
VPNを使っていてもVPNプロバイダーがユーザーのログを記録していればプライバシーは確保されない
- 政府の監視対象になることがある（一部の国ではVPNログが政府に提供される）
- 無料VPNはデータを売ってる可能性がある（広告目的で利用される）

**対策**
- 「ノーログポリシー」のVPNサービスを選ぶ
- 無料VPNは基本的に使わない
- ログが残るVPNはリスクがあると理解する


### 7.VPNがDDoS攻撃を受ける
VPNサーバーがDDoS攻撃（大量のアクセスで負荷をかける攻撃）を受けるとVPNが使えなくなることがある
- 大量のトラフィックをVPNサーバーに送信してサービスをダウンさせる
- 攻撃者がVPNを利用できないように妨害する

**対策**
- DDoS対策が施されたVPNを選ぶ
- VPNサーバー負荷分散を行う
- VPNプロバイダーがDDoS保護を提供しているか確認


:::note info
**まとめ**
- 安全なVPNプロバイダーを選ぶ（無料VPNは避ける）
- 強力な認証情報を設定しMFAを行う
- PPTPは使わずWireGuardまたはOpenVPNを利用
- VPNの証明書を適切に管理しMITM攻撃を防ぐ
- VPNソフトウェアは最新バージョンに更新
- Kill Switchを有効にしてVPNが切れたら通信を遮断
:::




# 1.WireGuardのセットアップ
ここからは実際にやるべき事、手順を記載していく。今回私はWireGuardというプロトコルを使用するため、まず初めにWireGuardの導入から始めていく

### 1.WireGuardのクライアントソフトをインストール
公式サイトからWireGuardクライアントをDL＆インストール。LinuxコマンドやiOS、Androidのアプリもある

### 2.ConoHaVPNのWireGuard設定情報を取得
ConoHaの管理画面にログインしVPN管理からWireGuardの設定情報を取得する
- サーバーのアドレス
- 秘密鍵（Private Key）
- 公開鍵（Public Key）
- Allowed IPs（許可されたIP範囲）

### 3.クライアントの設定
WireGuardのクライアントを開いて新しいトンネル（VPN接続設定）を作成する

- 以下のような設定を`.conf`ファイルに保存しWireGuardで読み込ませる。WireGuardクライアントでこの設定を追加し接続を有効化すればVPNが動作する
```powershell
[Interface]
PrivateKey = <取得した秘密鍵>
Address = <VPN側のIPアドレス（例: 10.0.0.2/24）>
DNS = 1.1.1.1  # DNSサーバー（必要なら変更）

[Peer]
PublicKey = <サーバーの公開鍵>
Endpoint = <VPNサーバーのIP>:51820
AllowedIPs = 0.0.0.0/0, ::/0  # すべての通信をVPN経由にする場合
PersistentKeepalive = 25  # 接続が途切れないようにする
```

# 2.セキュリティ設定
VPN接続後はセキュリティ面でも設定を確認

### 1.ファイアウォール設定
VPNの通信を適切に通すようOSのファイアウォール設定を調整

**Windowsn場合**
①Windows Defenderファイアウォールの設定を開く
②WireGuardの通信を許可（wireguard.exeを許可）
③必要ならVPN経由のトラフィックのみを許可するよう設定

**Linuxの場合**
UFWを利用している場合WireGuardのポートを開放
```sh
sudo ufw allow 51820/udp
```

### 2.VPN接続時のDNSリーク対策
VPNを利用してもDNS設定が適切でないと情報がリークする可能性がある
- WireGuard設定内の`DNS=`でVPNのDNSサーバーを指定（例：1.1.1.1や8.8.8.8）
- Windowsの場合：`ipconfig/all`でDNS設定を確認
- Linuxの場合：`resolvectl status`でDNS設定を確認

### 3.自動再接続の設定
WireGuardは接続が切れると手動で再接続が必要だが自動化することができる

**Windowsの場合**
タスクスケジューラでWireGuardを再起動するよう設定

**Linuxの場合**
systemdを使ってWireGuardを自動起動
```sh
sudo systemctl enable --now wg-quick@wg0
```

# 3.VPNの動作確認
### 1.IPアドレスの確認
VPN経由になっているか確認するためVPN接続後にIPアドレスをチェックする。確認サイトは下記。
https://whatismyipaddress.com/
VPN経由のIPアドレスになっていればOK

### 2.速度テスト
VPNの通信速度を確認するためにスピードテストを実施する。確認サイトは下記。
https://www.speedtest.net/

### 3.DNSリークテスト
DNSリークしていないか調べる。確認サイトは下記。
https://www.dnsleaktest.com/

### 4.特定のサービスへの接続テスト
VPN経由でアクセスしたいサーバーやWebサービスに接続できるかチェック


# 4.高度な設定（必要に応じて）
### 1.Kill Switch（VPN切断時の通信切断）
VPNが切れた時にインターネットが直接繋がらないように設定する（WireGuardが切れるとインターネットが遮断される）

**Windowsの場合（PowerShellで設定）**
```powershell
New-NetIPAddress -IPAddress 10.0.0.2 -PrefixLength 24 -InterfaceAlias "WireGuard"
New-NetRoute -DestinationPrefix 0.0.0.0/0 -InterfaceAlias "WireGuard"
```

**Linux（UFWで設定）**
```
sudo ufw deny out on eth0
sudo ufw allow out on wg0
```

### 2.ルーターでWireGuardを設定
家庭内ネットワーク全体でVPNを利用したい場合、ルーターにWireGuardを設定できる（※OpenWRTやMikroTikなどのVPN対応ルーターが必要）


# 5.定期的なメンテナンス
VPNを安定して使うために以下の作業を定期的に行う

### 1.VPNクライアントのアップデート
WireGuardのクライアントソフトは定期的に更新する

### 2.ログの確認
VPNが切断されたり不正なアクセスがないか確認する

**Windowsの場合**
イベントビューアでWireGuardのログを確認

**Linuxの場合**
```
sudo journalctl -u wg-quick@wg0
```

:::note info
これらの設定を行えばWireGuardを利用したConoHaVPNを安全・快適に使用できる
:::