Skip to main content

Qwen Code — Squidプロキシで見えた「隠れたアクセス」

Author
blackratel

はじめに
#

Alibaba が開発した AI コーディングエージェント Qwen Code は、OpenAI 互換 API を持つ任意のエンドポイントを向け先として指定できる。今回は さくらのAI Engineapi.ai.sakura.ad.jp)を API バックエンドとして設定し、KVM 上の Ubuntu 26.04 VM で動作させた。

通信制御に Squid 明示プロキシ(FQDN ホワイトリスト方式) を導入した。プロキシのアクセスログを確認したところ、さくらの API 以外にも Alibaba Cloud の外部サービスへのアクセスが発生していることが判明した。


環境構成
#

iptables(ファイアウォール)
#

外向き通信は デフォルト DROP とし、Squid 実行ユーザのプロセスのみ 443/80 への通信を許可する構成にした。

一般ユーザ  → port 443 直接  → [iptables DROP]
一般ユーザ  → Squid :3128    → [iptables ACCEPT(Squid実行ユーザ)] → インターネット

これにより、プロキシを経由しない通信は物理的に不可能になる。

Squid 明示プロキシ(SSL Bump)
#

Squid を SSL Bump モードで動作させ、HTTPS 通信の FQDN を検査したうえでホワイトリスト判定する。証明書の内容は復号するが、外部に転送するのはホワイトリストに一致したものだけ。

FQDN ホワイトリスト

FQDN 用途
.ubuntu.com apt(全サブドメイン)
.canonical.com Canonical CDN
api.ai.sakura.ad.jp さくらのAI Engine API
deb.nodesource.com Node.js apt リポジトリ
registry.npmjs.org npm パッケージレジストリ

Squid の設定(抜粋):

http_port 3128 ssl-bump \
  cert=/etc/squid/ssl_cert/squid-ca.crt \
  key=/etc/squid/ssl_cert/squid-ca.key \
  generate-host-certificates=on

acl whitelist dstdomain "/etc/squid/whitelist.txt"
ssl_bump peek step1
ssl_bump bump all

http_access allow CONNECT
http_access allow whitelist
http_access deny all

Qwen Code の設定(settings.json
#

さくらのAI Engine を OpenAI 互換プロバイダとして登録し、プロキシ設定も settings.json に埋め込む。

{
  "modelProviders": {
    "openai": [{
      "id": "Qwen3-Coder-480B-A35B-Instruct-FP8",
      "name": "さくらのAI Engine",
      "baseUrl": "https://api.ai.sakura.ad.jp/v1/chat/completions"
    }]
  },
  "env": {
    "HTTPS_PROXY": "http://127.0.0.1:3128",
    "NODE_EXTRA_CA_CERTS": "/etc/squid/ssl_cert/squid-ca.crt"
  },
  "proxy": "http://127.0.0.1:3128"
}

Qwen Code の実行結果
#

以下は Qwen Code を実行した際のセッション終了サマリー。

╭──────────────────────────────────────────────────────────────────────╮
│                                                                      │
│  エージェントを終了します。さようなら!                               │
│                                                                      │
│  インタラクション概要                                                │
│  セッションID:       6a4e7ba5-566a-4159-a106-d7747a488ace            │
│  ツール呼び出し:     10 ( ✓ 10 x 0 )                                 │
│  成功率:             100.0%                                          │
│  ユーザー同意:       100.0% (2 レビュー済み)                         │
│  コード変更:         +50 -0                                          │
│                                                                      │
│  パフォーマンス                                                      │
│  経過時間:           2m 18s                                          │
│  エージェント稼働時間: 1m 26s                                        │
│    » API時間:        37.5s (43.1%)                                   │
│    » ツール時間:     49.5s (56.9%)                                   │
│                                                                      │
│  モデル使用量        リクエスト  入力トークン  出力トークン          │
│  ─────────────────────────────────────────────────────────           │
│  Qwen3-Coder-480B-A35B-Instruct-FP8  12  232,846  1,018             │
│                                                                      │
╰──────────────────────────────────────────────────────────────────────╯

ツール呼び出し 10 回すべて成功し、2分18秒のセッションで 50 行のコードを生成した。API へのリクエストは 12 回、入力トークンは 23 万超となった。


プロキシで発見した「想定外のアクセス」
#

Squid のアクセスログを確認すると、さくらのAI Engine 以外に 2 種類の接続先が確認できた。

# npmjs.org(パッケージインストール時)
TCP_MISS/200  GET https://registry.npmjs.org/@qwen-code%2Fqwen-code

# さくらのAI Engine(意図したアクセス)
TCP_MISS/200  POST https://api.ai.sakura.ad.jp/v1/chat/completions

# ← 問題のアクセス(11回試行、全件 403 でブロック)
TCP_DENIED/403  POST https://gb4w8c3ygj-default-sea.rum.aliyuncs.com/

gb4w8c3ygj-default-sea.rum.aliyuncs.com とは何か
#

ドメインを分解すると正体が分かる。

部分 意味
aliyuncs.com Alibaba Cloud(アリクラウド)の公式ドメイン
rum Real User Monitoring — ユーザー行動・エラーを収集するサービス
sea Southeast Asia リージョン
gb4w8c3ygj Alibaba Cloud ARMS 上の qwen-code 固有プロジェクト ID

これは Alibaba Cloud ARMS(Application Real-Time Monitoring Service)の RUM エンドポイントだ。Qwen Code は起動・使用のたびにこのエンドポイントへ POST を送信し、以下のようなテレメトリーデータを収集しようとする。

  • 操作イベント(どの機能・コマンドを使ったか)
  • エラー・例外情報
  • パフォーマンス指標(起動時間、レスポンス時間)
  • OS・ランタイム環境情報
  • セッションの開始・終了タイミング

Qwen Code は Alibaba グループが開発したツールであり、使用データが同グループのクラウド監視基盤(中国企業のサーバー)に送信される設計になっている。

ソースコードでの確認
#

このアクセスは qwen-code のソースコード(packages/core/src/telemetry/qwen-logger/qwen-logger.ts)にハードコードされている。

// Usage statistics collection endpoint
const USAGE_STATS_HOSTNAME = 'gb4w8c3ygj-default-sea.rum.aliyuncs.com';
const USAGE_STATS_PATH = '/';

const RUN_APP_ID = 'gb4w8c3ygj@851d5d500f08f92';

コメントに // Usage statistics collection endpoint と明記されており、意図的に組み込まれた使用統計収集機構であることが確認できる。

公式ドキュメントへの記載
#

公式の Terms of Service / Privacy Notice には「匿名の使用統計とテレメトリーデータを収集することがある」と記載されているが、aliyuncs.com への接続や RUM サービスの利用についての記載、並びに、ユーザーが設定しなくても自動的に接続試行されることへの言及も、私には見つけられなかった。

テレメトリー除去フォークの存在
#

同様の問題を認識した開発者が qwen-code-no-telemetry というフォークを公開している。このフォークは以下の対応を行っている。

対象 対応内容
packages/core/src/telemetry/ すべて no-op 実装に置き換え
@opentelemetry/* パッケージ 全削除
インストールID生成 常に 00000000-0000-0000-0000-000000000000 を返す固定値に変更

今回 Squid がブロックした gb4w8c3ygj-default-sea.rum.aliyuncs.com への接続は、まさにこのフォークが封じようとしているものと完全に一致している。

Squid がブロックしていることの確認
#

今回の接続では、11 回の試行があった。

特に通信制限がなければ、何らかのデータが Alibaba に送信されるようだ。


まとめ
#

確認事項 結果
さくらのAI Engine を API として使用 成功
Qwen Code の動作(ツール呼び出し・コード生成) 正常
Squid による通信の可視化 FQDN→URI 単位で全アクセスを記録
aliyuncs.com へのテレメトリー送信 Squid が全件ブロック(403)

Qwen Code は、さくらのAI Engine への API アクセスとは別に、Alibaba Cloud のテレメトリーサービス(RUM)への接続がソースコードに含まれており、意図せず通信が試みられる可能性があるようだ。

新しいソフトウェアを実行する際は、今回のように通信先をプロキシで可視化し、不要・不明な通信は DENY する構成を取ることが大切だと感じた。テレメトリーを許容しない場合の選択肢として、qwen-code-no-telemetry フォークの存在も参考になるかもしれない。