◉CLAUDE LABEN
●2.1.302 — fork サブエージェントが claude -p・Agent SDK・デスクトップで既定オンになりました。無効化は CLAUDE_CODE_FORK_SUBAGENT=0(10/16)●2.1.307 — スリープやキーチェーンロックのあとに MCP が再接続されない問題を修正しました(10/21)。2.1.306 では claude -p の誤表示も解消●SONNET 4.5 — Claude API での提供終了は 11/30、残り38日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.302 — fork サブエージェントが claude -p・Agent SDK・デスクトップで既定オンになりました。無効化は CLAUDE_CODE_FORK_SUBAGENT=0(10/16)●2.1.307 — スリープやキーチェーンロックのあとに MCP が再接続されない問題を修正しました(10/21)。2.1.306 では claude -p の誤表示も解消●SONNET 4.5 — Claude API での提供終了は 11/30、残り38日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude Code
⟐ Claude Code/2026-07-25上級

strictAllowlist で Claude Code サンドボックスの外向き通信を締める

Claude Code v2.1.219 の sandbox.network.strictAllowlist で自動化の外向き通信を締めた実践メモ。接続先を洗い出すスクリプト、失敗までの時間で拒否とDNSと回線を切り分ける実測、そして観測スクリプト自身が壊れていた三つの欠陥と修正版まで。

Claude Code274サンドボックス8セキュリティ21自動化87ネットワーク

✦ プレミアム記事

深夜に回している定型処理のパイプラインが、理由も告げずに途中で止まっていました。

ログには接続タイムアウトらしき痕跡だけ。回線を疑い、再実行すると通ることもありました。よくある「たまに失敗するネットワーク」に見えたのです。けれど原因は回線ではありませんでした。許可リストに載せ忘れた一つのホストへの通信が、静かに拒否されていただけでした。

Claude Code v2.1.219(2026-07-24)で追加された sandbox.network.strictAllowlist を入れた直後のことです。この記事は、その設定を個人開発の自動化に組み込んだときの実務メモをお伝えします。設定を有効にする手順そのものよりも、有効にしたあとで何が壊れ、どう洗い出したかに紙幅を割きます。

そして記事の後半では、私が最初に書いた観測スクリプトそのものが壊れていたことを、実行結果とともに書き残します。締める側の仕掛けが先に壊れているという構図に気づいたのは、記事を一度公開したあとでした。

「拒否」は障害の顔をしてやってくる

strictAllowlist の考え方はごく単純です。サンドボックス内で実行するコマンドに対して、許可リストにないホストへの外向き通信を拒みます。自動化を安全側の既定で回すための、ちょうどよい締め方です。

ただ運用してみて分かったのは、拒否そのものより「拒否の見え方」が厄介だということでした。

許可リストから漏れたホストへの接続は、アプリケーションから見れば単なる接続失敗です。多くのツールはそこで「ネットワークが不調」と解釈し、リトライやタイムアウトのメッセージを出します。つまりポリシーによる意図的な遮断が、偶発的な回線障害と区別できない顔で現れます。ここが最初の落とし穴でした。この罠を抜けるには、原因を推測する前に事実を観測することです。

そこで私が最初にやったのは、許可リストを書くことではなく、パイプラインが実際にどのホストへ出ていくのかを一度残らず観測することでした。

実際に触るホストを洗い出す

頭の中の「たぶんこのホストに繋ぐはず」は当てになりません。connect(2) をトレースして、宛先を事実として集めます。次のスクリプトは、任意のコマンドをラップして接続先ホスト名を吐き出します。

#!/usr/bin/env bash
# egress-recon.sh — コマンドが実際に接続するホストを洗い出す
# 使い方: ./egress-recon.sh <実行したいコマンド...>
#   例: ./egress-recon.sh bash deploy-pipeline.sh
# ※ このスクリプトには後述する三つの欠陥があります。修正版は「観測の仕掛けが、
#    いちばん先に壊れていました」の節にあります
set -euo pipefail
 
TRACE="$(mktemp)"
trap 'rm -f "$TRACE"' EXIT
 
# connect(2) だけを追い、宛先アドレスを記録する
# -f: 子プロセスも追跡(git や npm はサブプロセスを大量に生む)
strace -f -qq -e trace=connect -o "$TRACE" "$@" || true
 
# IPv4 の宛先を抽出(sin_addr=inet_addr("x.x.x.x"))
grep -oE 'inet_addr\("[0-9.]+"\)' "$TRACE" \
  | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' \
  | sort -u > "$TRACE.ip"
 
echo "# 接続先ホスト(逆引き済み・重複排除)"
while read -r ip; do
  # ローカル/リンクローカルは除外
  case "$ip" in 127.*|0.0.0.0|169.254.*) continue;; esac
  host="$(getent hosts "$ip" | awk '{print $2}')"
  printf '%-24s %s\n' "${host:-"(逆引き不可)"}" "$ip"
done < "$TRACE.ip" | sort -u

ポイントは -f です。git push も npm install も、実処理は子プロセスに委ねます。親プロセスだけ見ていると、肝心の接続を丸ごと取りこぼします。

私の環境でこれを一度回したところ、接続先は11ホストありました。事前に想定していたのは4つでした。想定のおよそ2.7倍です。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦パイプラインが実際に触るホストを connect(2) トレースで洗い出す実行可能なスクリプト
✦失敗までの時間(0.02ms/1.22ms/3秒ちょうど)で拒否・DNS・回線を切り分ける実測データ
✦観測スクリプトが逆引き不可のIPで無言のまま空を返していた三つの欠陥と、実行して確かめた修正版
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ Claude Code2026-08-05
秘密を渡さず、リクエストだけ通す — サンドボックス資格情報マスキングの差し替えが効く境界
Claude Code のサンドボックス資格情報マスキングは、センチネル値を読ませて送信時に実値へ差し替える設計です。差し替えが効く認証方式と効かない方式、ボディに載せたときの長さのずれ、そしてチャンク分割転送で置換そのものが空振りする境界を、最小プロキシを自作して実測しました。
⟐ Claude Code2026-08-04
ファイルシステムの分離をネットワークと別に締める — 触ったパスを採り、書き込み面から絞る
Claude Code v2.1.216 でファイルシステムの分離をネットワークと切り離して指定できるようになりました。締める前にジョブが触ったパスを strace で採取し、読み取り面と書き込み面を分けて測った実務メモ。同じジョブを3回走らせたときのパス集合の安定率と、接頭辞に畳んだときの安定率の差まで実測しています。
⟐ Claude Code2026-10-14
onFailure を block にしても、jq が無い環境では公式例の rm -rf ブロックは素通りしました
PreToolUse の門番フックは、落ちたときに通すのか止めるのか。公式例を jq の無い環境で走らせると exit 0 で素通りしました。終了コード10通りの実測、直し方、settings.json を走査して素通りを洗い出すスクリプトをまとめます。