カバー画像

リモート時代のいま、外出先から自宅のPCに安全につなぐにはどうしたらいいんだろう?とふと気になり、調べて構築してみました。 最初は「VPNでいいかな」と思っていたのですが、調べてみるとVPNにもいろいろリスクがあるようで、最近よく聞く「Zero Trust」という考え方も気になってきました。両者の違いを整理しながら実際に試してみたので、ハンズオン形式でご紹介します!

📝 手順を一通り網羅したので、それなりに長めの記事になっています。最初から通して読まなくても大丈夫なので、気になるところは目次から拾い読みしてもらえればと思います!

目次

  1. なぜVPNを使わないのか?Zero Trustとは
  2. 今回構築する環境
  3. 必要なもの・コスト
  4. Phase 1: Raspberry Piの初期セットアップ
  5. Phase 2: セキュリティ設定
  6. Phase 3: Cloudflare Tunnelの構築
  7. Phase 4: Windows側の設定
  8. Phase 5: クライアント(Mac)の設定
  9. よくある質問
  10. まとめ

1. なぜVPNを使わないのか?Zero Trustとは

従来のVPNはどんな仕組み?

VPNは「ネットワークの境界」を守る仕組みです。一度VPNに接続すると、ネットワーク内の機器すべてにアクセスできるようになります。

これって便利な反面、よく考えるとちょっと怖い面もあるなと思いました。

  • 過剰な権限: 一度認証を通れば、ネットワーク内の何にでもアクセスできてしまう
  • 認証情報の漏洩リスク: VPNの認証情報が盗まれると、ネットワーク全体が危険にさらされる
  • ポート開放が必要: ルーターでVPN用のポートを開ける必要がある

Zero Trust(ゼロトラスト)ってなに?

Zero Trustは、その名のとおり「何も信頼しない」ことを前提とした考え方です。

  • すべてのアクセスを検証: ネットワーク内外問わず、すべての通信を認証する
  • 最小権限の原則: 必要なリソースにだけ、必要な期間だけアクセスを許可
  • アイデンティティベース: ネットワークの場所ではなく、「誰が」アクセスしているかで判断

調べてみると、両者にはこんな違いがありました。

VPN vs Zero Trust 比較

項目 VPN Zero Trust
認証 一度だけ(接続時) リクエストごと
アクセス範囲 ネットワーク全体 特定のリソースのみ
ポート開放 必要 不要
ログ・監査 限定的 詳細
セットアップ やや簡単 やや複雑

Zero Trustの方がよりきめ細かく制御できそう。ということで今回はCloudflare Zero Trustを使って試してみることにしました。

2. 今回構築する環境

全体構成

[外出先のパソコン]
        ↓
   インターネット
        ↓
[Cloudflare のエッジサーバー] ← 認証・アクセス制御
        ↓
   Cloudflare Tunnel
        ↓
[自宅のRaspberry Pi] (192.168.1.110)
        ↓
   ローカルネットワーク
        ↓
[Windows PC] (192.168.1.120)

仕組み

  1. Raspberry Piが自宅のゲートウェイになる
  2. Raspberry PiからCloudflareにアウトバウンド接続を確立(ポート開放不要
  3. 外出先からはCloudflare経由でRaspberry Piにアクセス
  4. Raspberry Piが自宅のWindows PCへ通信を中継

このアーキテクチャの良いところ

  • ポート開放不要: ルーターのポート開放が一切不要
  • 固定IP不要: 動的IPでもOK
  • 詳細な認証: メールアドレスやIP制限など細かく設定可能
  • 完全な監査ログ: いつ、誰が、どこからアクセスしたか全て記録される
  • 無料: 個人利用なら完全無料

なぜWindows PCに直接cloudflaredを入れなかったのか?

ここで気づいた方もいるかもしれません。

「Windows PCに直接cloudflaredをインストールすれば、Raspberry Pi要らなくない?」

その通りです。技術的にはWindows PCに直接cloudflaredをインストールして、Cloudflareから直接RDP接続することも可能です。

[外出先] → [Cloudflare] → [Windows PC] (cloudflared + RDP)

それでも私がRaspberry Pi経由の多段構成を選んだ理由は、セキュリティの多層化です。

多段構成にしてみたかった理由

  1. 侵害された場合の影響を局所化できそう

    • 仮にCloudflareの認証を突破されても、まずRaspberry Piでもう一段の防御がある
    • Raspberry Piは踏み台専用で最小限の機能しか動かさないので、攻撃される可能性が小さい
  2. Windows PCを直接インターネットに晒さなくて済む

    • WindowsはGUI込みで多くのサービスが動いていて、攻撃される可能性が大きい
    • 踏み台を挟むことで、Windows PCは「閉じたローカルネットワーク」の中だけで完結
  3. 常時稼働の番人を置ける

    • Windows PCは省電力のために普段はスリープ・電源OFFにしておきたい
    • 一方、踏み台は常時稼働して接続を待ち受けたい
    • Raspberry Piは消費電力が小さく(数ワット)、24時間つけっぱなしでも電気代が気にならない
  4. 拡張性

    • 将来的にNASや他のPC、IoTデバイスへのアクセスも統合できそう
    • Raspberry Piを「自宅のゲートウェイ」として活用できる
  5. OSの分離

    • Linux(Raspberry Pi)とWindowsで使う技術スタックを分離
    • Windowsの更新や障害がリモートアクセス機能に影響しない

要するに、「踏み台を挟むことでセキュリティを多層化したかった」という、まあ伝統的な発想ですね。

「個人利用にそこまで必要?」と思われるかもしれません。確かに過剰かもしれません。でも、学びとしての価値も含めれば十分におつりが来る投資かなと思っています。あと正直なところ、家にラズパイが1台余っていたから、というのも大きかったりしますw

3. 必要なもの・コスト

ハードウェア

項目 内容 価格目安
Raspberry Pi 4/5 メモリ2GB以上 約8,000円〜
microSDカード 32GB以上 約1,500円
電源アダプター 公式推奨 約1,500円
LANケーブル 有線接続用 約500円
合計   約11,500円

サービス

サービス プラン 月額
Cloudflare Zero Trust Free 0円(50ユーザーまで)
Cloudflare Registrar ドメイン購入 約100円/月(年間$8〜)

コスト比較

ちなみに、他のリモートアクセスサービスと比較するとこんな感じです。

サービス 月額コスト 特徴
本構成 0円(ドメイン代別) フル機能、無制限
AnyDesk Standard 約2,000円 1ユーザー
TeamViewer 約4,000円 ビジネス利用
Chrome Remote Desktop 0円 機能制限あり

初期投資のRaspberry Pi代だけで、ランニングコストはほぼゼロ。コスパはかなり良いほうではないでしょうか。

4. Phase 1: Raspberry Piの初期セットアップ

4-1. OSのインストール

Raspberry Pi Imagerを使って、Raspberry Pi OS(64bit)をmicroSDカードに書き込みます。

書き込み時の詳細設定で以下を設定しておくと便利です。

  • ホスト名: raspi
  • ユーザー名: security(任意)
  • パスワード: 強力なものを設定
  • SSH: 有効化
  • Wi-Fi: 設定(後で無効化します)

4-2. 言語設定

ロケール設定を行います。日本語環境ですが、ターミナル表示は英語の方が情報収集しやすいのでen_GB.UTF-8をデフォルトにします。

sudo dpkg-reconfigure locales

スペースキーで以下を選択します。

  • en_GB.UTF-8 UTF-8
  • ja_JP.UTF-8 UTF-8

デフォルトロケールは en_GB.UTF-8 を選択。

4-3. システムアップデート

sudo apt update
sudo apt upgrade -y
sudo reboot

4-4. 自動セキュリティ更新の設定

セキュリティパッチを自動適用するように設定します。

sudo apt install unattended-upgrades apt-listchanges -y
sudo dpkg-reconfigure -plow unattended-upgrades

ダイアログで「Yes」を選択。

4-5. ユーザー設定

デフォルトのpiユーザーは攻撃者のターゲットになりやすいので無効化します(既に別ユーザーを作成している前提)。

# 現在のユーザーがsudoグループに所属しているか確認
groups

# piユーザーを無効化
sudo passwd -l pi

5. Phase 2: セキュリティ設定

ここからが本記事のメインです。Raspberry Piを「踏み台サーバー」として使うので、セキュリティはしっかり固めておきたいところ。

5-1. SSHの厳格化

SSHのポートをデフォルトの22番から変更し、より厳格な設定に変更します。

sudo nano /etc/ssh/sshd_config

以下のように設定します。

# カスタムポート(デフォルトの22は使わない)
Port 3594

# rootログイン禁止
PermitRootLogin no

# 公開鍵認証のみ
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

# 試行回数制限
MaxAuthTries 3
MaxSessions 2
LoginGraceTime 30

# 不要な機能を無効化
X11Forwarding no
GatewayPorts no

# 特定ユーザーのみ許可
AllowUsers security

# ログレベルを詳細に
LogLevel VERBOSE

設定を反映します。

sudo systemctl restart ssh

5-2. UFW(ファイアウォール)の設定

シンプルなファイアウォールツールUFWをインストール・設定します。

# UFWをインストール
sudo apt install ufw -y

# デフォルトポリシー
sudo ufw default deny incoming
sudo ufw default allow outgoing

# ローカルネットワークからのSSHのみ許可
sudo ufw allow from 192.168.1.0/24 to any port 3594 proto tcp comment 'SSH from local network'

# UFWを有効化
sudo ufw enable

# 確認
sudo ufw status verbose

これで、ローカルネットワーク(192.168.1.0/24)からのSSHアクセスのみ許可される状態になります。

5-3. fail2banの設定

ブルートフォース攻撃対策としてfail2banを導入します。

sudo apt install fail2ban -y

# 設定ファイルをコピー
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# 編集
sudo nano /etc/fail2ban/jail.local

以下のように設定します。

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3

[sshd]
enabled = true
port = 3594
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 7200
sudo systemctl enable fail2ban
sudo systemctl restart fail2ban

# 状態確認
sudo fail2ban-client status sshd

3回ログイン失敗すると、そのIPが2時間ブロックされる設定です。

6. Phase 3: Cloudflare Tunnelの構築

ここからCloudflare側の設定です。

6-1. Cloudflareアカウントの準備

  1. https://www.cloudflare.com でアカウント作成(無料)
  2. ドメインを追加(既存のドメインがない場合はCloudflare Registrarで購入推奨)
  3. ネームサーバーをCloudflareに変更

私は新規に home-security.uk ドメインを取得しました。.ukドメインは比較的安価で取得できます。

6-2. Zero Trustの有効化

  1. Cloudflareダッシュボード → Zero Trust
  2. チーム名を設定(例: home-security
  3. プランは Free を選択

6-3. cloudflaredのインストール

Raspberry Piに接続して、Cloudflare Tunnelのクライアントcloudflaredをインストールします。

# ARM64版をダウンロード(Raspberry Pi 4/5の場合)
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64.deb

# インストール
sudo dpkg -i cloudflared-linux-arm64.deb

# バージョン確認
cloudflared --version

6-4. Cloudflareへの認証

cloudflared tunnel login

ブラウザでURLが表示されるので、それをコピーしてアクセスし、対象ドメインを選択して認証します。

6-5. トンネルの作成

# トンネル作成
cloudflared tunnel create raspi-home

# 作成されたトンネルを確認
cloudflared tunnel list

<TUNNEL-ID>が表示されるのでメモしておきます。

6-6. 設定ファイルの作成

mkdir -p ~/.cloudflared
nano ~/.cloudflared/config.yml

以下の内容を記述します。

tunnel: <TUNNEL-ID>
credentials-file: /home/security/.cloudflared/<TUNNEL-ID>.json

# HTTP/2プロトコルを使用(安定性重視)
protocol: http2

# 接続の安定化
grace-period: 30s
retries: 5
no-autoupdate: true

ingress:
  # SSH用エンドポイント
  - hostname: ssh.home-security.uk
    service: ssh://localhost:3594
    originRequest:
      connectTimeout: 30s
      keepAliveConnections: 10
      keepAliveTimeout: 90s

  # RDP用エンドポイント
  - hostname: rdp.home-security.uk
    service: tcp://192.168.1.120:3389
    originRequest:
      noTLSVerify: true
      connectTimeout: 30s
      tcpKeepAlive: 30s
      keepAliveTimeout: 90s
      keepAliveConnections: 10

  # 404を返すデフォルトルール(必須)
  - service: http_status:404

⚠️ つまずきポイント1: QUICプロトコルでの不安定な接続

最初、Cloudflareの推奨設定であるprotocol: quicで構築しました。しかし、頻繁にタイムアウトエラーが発生しました。

ERR failed to accept incoming stream requests error="failed to accept QUIC stream: timeout: no recent network activity"

原因と対策:

QUICはUDPベースのプロトコルで、家庭用ルーターやISPによってはUDPトラフィックを制限している場合があります。

私の環境では、UDPバッファサイズを増やしても解決せず、最終的にHTTP/2に変更することで安定しました。

# UDPバッファサイズを増やす設定(QUICの場合に必要)
sudo nano /etc/sysctl.d/99-cloudflared.conf
net.core.rmem_max = 7500000
net.core.wmem_max = 7500000

これでも改善しない場合は、潔くHTTP/2に切り替えるのが正解です。

6-7. DNSルーティングの設定

# SSH用
cloudflared tunnel route dns raspi-home ssh.home-security.uk

# RDP用
cloudflared tunnel route dns raspi-home rdp.home-security.uk

6-8. トンネルの起動テスト

cloudflared tunnel run raspi-home

以下のようなログが出れば成功です。

INF Initial protocol http2
INF Registered tunnel connection ... protocol=http2

Ctrl+Cで停止します。

6-9. systemdサービスとして登録

# サービスとしてインストール
sudo cloudflared service install

# 設定ファイルをコピー(重要)
sudo cp ~/.cloudflared/config.yml /etc/cloudflared/config.yml
sudo cp ~/.cloudflared/<TUNNEL-ID>.json /etc/cloudflared/

# サービス起動
sudo systemctl start cloudflared
sudo systemctl enable cloudflared

# 状態確認
sudo systemctl status cloudflared

⚠️ つまずきポイント2: cloudflaredがサービスとして起動しない

手動実行(cloudflared tunnel run)ではうまくいくのに、systemdサービスにすると起動しない…という状態にハマりました。

原因は設定ファイルの場所です。手動実行は~/.cloudflared/config.ymlを読みますが、サービスは/etc/cloudflared/config.ymlを見にいきます。上の「設定ファイルをコピー(重要)」の手順を飛ばすと、サービスが設定を見つけられずに起動に失敗します。

# 設定ファイルと認証情報のコピーを忘れずに
sudo cp ~/.cloudflared/config.yml /etc/cloudflared/config.yml
sudo cp ~/.cloudflared/*.json /etc/cloudflared/

6-10. Cloudflare Zero Trust Applicationの作成

ここがZero Trustの肝です。アクセス制御ポリシーを設定します。

Cloudflare Zero Trustダッシュボードで設定

  1. AccessApplicationsAdd an application
  2. Self-hosted を選択

SSH用Application:

Application name: Raspberry Pi SSH
Session Duration: 24 hours
Application domain:
  - Subdomain: ssh
  - Domain: home-security.uk

Add a policy:

Policy name: Allow My Email
Action: Allow

Configure rules:
  Rule type: Include
  Selector: Emails
  Value: your-email@gmail.com

同様にRDP用Applicationも作成します。

Zero Trustっていいなと思ったところ

Cloudflare Zero Trustでは、こんな細かい制御ができます。

  • 特定のメールアドレスのみ許可
  • 特定の国からのみアクセス許可(地域制限)
  • 特定の時間帯のみアクセス許可(営業時間など)
  • 特定のIPアドレスからのみ許可
  • デバイスの状態チェック(有料プラン)

これがVPNとの大きな違いだなと感じました。「いつ・どこから・誰が・どのリソースに」を細かく制御できるのがZero Trustのいいところですね。

7. Phase 4: Windows側の設定

7-1. リモートデスクトップを有効化

  1. 設定システムリモートデスクトップ
  2. リモートデスクトップを有効にする をオン
  3. このPCに接続できるユーザー にユーザーを追加

7-2. ファイアウォール設定

Windows Defenderファイアウォールでローカルネットワークからのアクセスを許可します。

  1. Windows Defenderファイアウォール詳細設定
  2. 受信の規則リモートデスクトップ - ユーザーモード(TCP受信)
  3. スコープローカルIPアドレス192.168.1.0/24 を許可

7-3. IPアドレスの確認

コマンドプロンプトで以下を実行します。

ipconfig

192.168.1.120が割り当てられていることを確認。固定IPを設定するか、ルーターでDHCP予約しておくと安心です。

8. Phase 5: クライアント(Mac)の設定

8-1. cloudflaredのインストール

Macで以下を実行します。

brew install cloudflared

8-2. SSH config設定

nano ~/.ssh/config
# Cloudflare経由でRaspberry Piに接続
Host raspi-cloudflare
    HostName ssh.home-security.uk
    User security
    ProxyCommand cloudflared access ssh --hostname %h

# ローカルネットワークから直接接続
Host raspi-local
    HostName 192.168.1.110
    User security
    Port 3594

8-3. SSH接続テスト

# Cloudflare経由
ssh raspi-cloudflare

初回はブラウザが開いてCloudflare認証を求められます。認証後、SSHでログインできます。

8-4. RDP接続スクリプト

nano ~/rdp-connect.sh
#!/bin/bash

echo "Starting Cloudflare Tunnel to Windows RDP..."

# バックグラウンドでトンネル起動
cloudflared access tcp --hostname rdp.home-security.uk --url localhost:13389 &

TUNNEL_PID=$!

sleep 3

echo "✅ Tunnel established!"
echo "📍 Connect to: localhost:13389"
echo "🪟 Use Microsoft Remote Desktop"
echo ""
echo "Press Enter to stop tunnel..."

read

kill $TUNNEL_PID 2>/dev/null
echo "❌ Tunnel stopped."
chmod +x ~/rdp-connect.sh

8-5. RDP接続

  1. ./rdp-connect.sh を実行
  2. Microsoft Remote Desktoplocalhost:13389 に接続
  3. Windowsのユーザー名・パスワードでログイン

これで、外出先のMacから自宅のWindows PCにリモートデスクトップ接続できます!

9. よくある質問

構築後、自分でも気になって調べたり試したりしたことを、Q&A形式でまとめておきます。

Q1: 複数のWindows PCを追加したい場合は、どうすればいい?

A: 自宅に複数のPC(デスクトップとノートPCなど)がある場合は、Cloudflare Tunnelの設定ファイル(config.yml)にエンドポイントを追加するだけで対応できます。

例えば、Windows PC(RDP)が2台ある場合はこんな感じです。

ingress:
  # SSH用エンドポイント
  - hostname: ssh.home-security.uk
    service: ssh://localhost:3594
    originRequest:
      connectTimeout: 30s
      keepAliveConnections: 10
      keepAliveTimeout: 90s

  # RDP用エンドポイント(PC1)
  - hostname: rdp1.home-security.uk
    service: tcp://192.168.1.120:3389
    originRequest:
      noTLSVerify: true
      connectTimeout: 30s
      tcpKeepAlive: 30s
      keepAliveTimeout: 90s
      keepAliveConnections: 10

  # RDP用エンドポイント(PC2) ← ここを追加
  - hostname: rdp2.home-security.uk
    service: tcp://192.168.1.121:3389 # ← IPアドレスを変更
    originRequest:
      noTLSVerify: true
      connectTimeout: 30s
      tcpKeepAlive: 30s
      keepAliveTimeout: 90s
      keepAliveConnections: 10

  - service: http_status:404

あとはDNS設定を追加して、

cloudflared tunnel route dns raspi-home rdp2.home-security.uk

Cloudflare Zero Trust Applicationを同様に追加し、認証ポリシーを設定すれば完成です。

ポイント:

  • Raspberry Piを踏み台として使うので、追加するPCのIPアドレスを指定するだけでOK
  • ホスト名(rdp1rdp2)を変えるだけで複数PCに対応できる
  • セキュリティ設定(SSH、ファイアウォール、fail2ban)は一度設定すればすべてのPCに効く

Q2: Raspberry Piのスペックは、どの程度必要?

A: 踏み台サーバーとしての用途なら、思ったより高いスペックは要りませんでした

私の環境の実測値

実際に稼働しているRaspberry Piのスペックはこんな感じです。

項目 評価
モデル Raspberry Pi 3 Model B(1GB RAM)  
OS Raspberry Pi OS 64-bit  
CPU 4コア  
メモリ使用率 20%(使用183MB / 906MB) ✅ 十分な余裕
CPU使用率 7.2% ✅ アイドル93%
ディスク使用率 6%(2.9GB / 57GB) ✅ ほぼ余裕あり

なぜスペックが低くて済むのか?

Cloudflare Tunnelの仕組みを理解すると納得できます。

[外出先のPC]
  ↓ (HTTPS暗号化)
[Cloudflareのエッジサーバー]
  ↓ (データ転送)
[Raspberry Pi] ← ここは「接続を確立するだけ」
  ↓ (ローカルLAN)
[自宅のWindows PC]

Raspberry Piの役割は、実は以下の3つだけです。

  1. Cloudflareへのアウトバウンド接続を確立(cloudflaredプロセス)
  2. Cloudflareからの接続を自宅のPCに中継(トラフィック転送)
  3. ログ記録・監視(fail2ban、sshdなど)

実際のデータ転送(RDPの画面データなど)の大部分はCloudflareのエッジで処理されるので、Raspberry Piは「スイッチ役」に過ぎないんですね。

結論

  • Raspberry Pi 1GB版でも十分(むしろ過剰なくらい)
  • 複数PC対応も問題なし
  • メモリ2GB以上推奨としたのは「安心マージン」程度
  • CPU温度上昇の心配も不要(ほぼ常にアイドル状態)

補足:なぜメモリ2GB以上を推奨と書いたのか?

本記事では「Raspberry Pi 4/5でメモリ2GB以上」を推奨値として書いていますが、実際にやってみた感覚としては、

  • 1GB版でも実運用で問題ない(実測値のとおり)
  • 2GB版だと「セキュリティツールを追加するときの余裕」がある
  • 「予算に余裕があれば2GB以上を」くらいの話

という温度感です。すでに1GB版で稼働しているなら、わざわざ買い換える必要はありません。

Q3: 複数PC + 複数ユーザーでアクセスすると、性能は落ちない?

A: 落ちません(むしろ落ちる余地がないくらいです)。

先ほどの実測値のとおり、

  • メモリ: 20%利用で約720MB空き
  • CPU: 7%利用でアイドル93%

という状態なので、複数PCからのアクセスが同時に来ても、まだ大きな余裕があります。

実感ベースでは:

  • 同一トンネル内で複数エンドポイントを処理する負荷は軽い
  • RDPの画面描画はWindows PC側で行われるため、Raspberry Piへの負荷は最小限
  • SSH接続が同時に複数あっても問題ないレベル

Q4: セキュリティ面で、1GB版Raspberry Piでも大丈夫?

A: セキュリティレベルはメモリ容量に依存しません

本記事で実装した対策は以下のとおりです。

  • SSH認証(公開鍵のみ、パスワード禁止)
  • UFWファイアウォール
  • fail2ban(ブルートフォース攻撃対策)
  • Cloudflare Zero Trust(エッジでの認証)

これらはすべて、メモリ1GBで十分にまかなえます。

むしろ有利な面もあります。

  • 機能を最小化しているので、攻撃面(アタックサーフェス)が小さい
  • 不要なサービスが動いていないので、脆弱性リスクも低い

よくある質問の早見表

質問 答え
複数PCに対応できる? ✅ できる(設定ファイルの編集だけ)
低スペックでも大丈夫? ✅ 1GBでも大丈夫(過剰なほど)
複数アクセスで遅くならない? ✅ 大丈夫、余裕がある
セキュリティは保たれる? ✅ スペックと無関係で保たれる

「拡張性」「安定性」「セキュリティ」のバランスが良い、というのが実装を通じての実感です。

補足:さらにセキュリティを高めたい方へ

本記事ではCloudflare Zero Trust + SSH厳格化 + UFW + fail2banまで紹介しましたが、踏み台サーバーとして運用するなら、こんなことも考えてみてもいいかもしれません。

不要なサービスの停止

Raspberry Pi OSには、デスクトップ用途を想定した多くのサービスがデフォルトで有効になっています。踏み台サーバーとして使うなら不要なものも多いので、停止を検討してください。

たとえば、有線LAN接続なら bluetoothwpa_supplicantavahi-daemonModemManagerなどは止めても問題ないことが多いです。動いているサービスは以下で確認できます。

sudo systemctl list-unit-files --state=enabled

ただし、停止していい/ダメは環境によるので、よく調べてから止めましょう。

マルウェア・rootkitスキャンツール

定期的にスキャンしたい場合は、以下のようなツールがあります。

  • chkrootkit: rootkit検出
  • ClamAV: マルウェア検出
  • Lynis: システム全体のセキュリティ監査

ちなみに私は最初rkhunterを試したのですが、データベース更新サーバーが機能していないようで使い物にならず、別のツールへの乗り換えを検討中です。

ハードウェア機能の無効化

Wi-FiやBluetoothを物理的に無効化したい場合は、Raspberry Piの/boot/firmware/config.txtにDevice Tree Overlayを追加することで、ハードウェアレベルで無効化できます。

dtoverlay=disable-wifi
dtoverlay=disable-bt

10. まとめ

できたこと

  • VPN不要で外出先から自宅PCにアクセス可能
  • ポート開放不要(ルーターの設定変更不要)
  • 固定IP不要(動的IPでもOK)
  • 詳細なアクセス制御(メール・地域・時間帯など)
  • 完全な監査ログ
  • 個人利用なら完全無料(ドメイン代除く)

やってみての気づき

今回の構築を通じて、こんなことを感じました。

  1. Zero Trustって便利: VPNと比べて、かなりきめ細かく制御できるんだなと実感
  2. セキュリティは多層で考える: SSH、ファイアウォール、fail2ban、Zero Trustを組み合わせると安心感がある
  3. 公式ドキュメント通りにいかないことも: トラブルシューティングのスキルって大事だなと再認識
  4. シンプルが一番: 複雑な設定(QUIC等)より、シンプルで安定する設定(HTTP/2)を選んだ方が良いことも

こんな場面で使えそう

  • 自宅PCへのリモートアクセス
  • 開発環境への外部からのアクセス
  • IoTデバイスの遠隔管理
  • 小規模オフィスのリモートワーク基盤(業務利用の場合は要検討)

注意点

  • 個人利用前提の構成です
  • 業務利用の場合は、より厳格な認証(YubiKey等)の導入を検討した方がよさそう
  • ログの長期保管が必要な場合は有料プランへの移行を検討してください

おわりに

「リモートアクセスといえばVPN」という思い込みがありましたが、Zero Trustという選択肢を知って、実際に試してみると、思っていた以上に快適でした。

特に自宅環境なら、Cloudflare Zero Trust + Raspberry Piの組み合わせは、コスパもセキュリティもバランスが良くて気に入っています。初期投資1万円ちょっと、ランニングコストほぼゼロで、わりと本格的なアクセス制御が手に入るのは嬉しいですね。

VPN以外の選択肢を検討している方の参考になれば幸いです!

なお、本記事の内容についての質問や、アットウェアについて気になることがありましたら、お問い合わせページからお気軽にご連絡ください。

この記事が役に立ったら、シェアしていただけると嬉しいです。質問やご指摘もお待ちしています!