rclone 等 大量同期クライアント禁止 — nginx UA ブロック

// SYNC_PROHIBITED — 最終更新: 2026-05-14 / maguro nginx 設定済

運用中 WebDAV エンドポイントを User-Agent でブロック

概要

rclone 等の大量同期クライアントを nginx レベル でブロックする機能。 Nextcloud の WebDAV エンドポイントへのアクセスを User-Agent で識別し、 403 Forbidden を返す。

項目内容
実装日2026-03-31 (R640時代) → 2026-05-14 maguro へ移植
対象ファイルmaguro /etc/nginx/sites-enabled/cloud.k2-o.net
適用範囲cloud.k2-o.net 全体 (含む /remote.php/dav/)
歴史的経緯: 旧 R640 で導入していた設定。 2026-05-14 の Phase 2 で Nextcloud を maguro に移植する際、 nginx vhost も丸ごと持って行ったため、 UAブロック設定も継続。 R640 の SNI router は WireGuard も通さない L4 passthrough なので、 UA判定は最終終端の maguro nginx で行う。
ブロック対象 User-Agent
クライアント名用途
rclone大量同期・クラウドストレージ移行ツール
cyberduckFTP / WebDAV クライアント (Mac / Win)
davfs2Linux WebDAV マウント
cadaverCLI WebDAV クライアント
BitKinexWebDAV クライアント
NetDriveWebDAV ドライブマウント
設定内容
// 対象ファイル

/etc/nginx/sites-enabled/cloud.k2-o.net (maguro)

// 追加箇所 (location / の先頭)
location / {
    if ($http_user_agent ~* "(rclone|cyberduck|davfs2|cadaver|BitKinex|NetDrive)") {
        return 403;
    }

    # 既存の allow 設定 (内部のみ)
    allow 192.168.20.0/24;      # DATA
    allow 192.168.30.0/24;      # STG
    allow 10.200.0.0/16;        # wg-clients
    allow 173.0.0.4/30;         # fabric (Collabora WOPI)
    allow 173.0.0.8/30;
    allow 119.26.175.225;       # 業務固定IP
    deny  all;

    proxy_pass http://127.0.0.1:9080;
    # ... 残り NC 用 proxy ヘッダ
}
動作確認
# UA 偽装で 403 が返ることを確認
curl -v -A "rclone/v1.65.0" \
  --resolve cloud.k2-o.net:443:127.0.0.1 \
  https://cloud.k2-o.net/remote.php/dav/
# → HTTP/2 403

✓ HTTP/2 403 確認済

適用コマンド
nginx -t && systemctl reload nginx
ブロック対象追加方法

新たなクライアントを追加する場合、 正規表現の | で追記:

if ($http_user_agent ~* "(rclone|cyberduck|davfs2|cadaver|BitKinex|NetDrive|追加クライアント)") {
    return 403;
}

追記後は必ず:

nginx -t && systemctl reload nginx
設計上の注意
UAは偽装可能: User-Agent はクライアント側で偽装可能なため、 これは「完全な防御」ではなく「事故防止」レベル。 悪意ある利用者が UA を変更した場合は通過する。 補完的な対策と組み合わせることが必須。
// 補完対策の現状
  • ✓ nginx allow による IP制限 — 外部からの直接アクセスは元々遮断 (cloud.k2-o.net は R640 SNI → maguro passthrough、 maguro 側で内部VLAN / WG のみ許可)
  • ✓ WireGuard 経路必須 — 一般顧客は VPN 経由でしかアクセスできない
  • ! レート制限 (limit_req) — 未実装。 将来追加検討
  • ! NCアプリ制限 (User-Agent allowlist) — 公式iOS/Android/desktop以外を弾く設定は未実装
  • ! ユーザー単位の制御 — 必要なら FastAPI ポータル側で実装 (現状一律ブロック)
2026-05-14 時点で十分機能: 内部 LAN + WG 経由でしかアクセスできない設計のため、 UAブロックは「正規ユーザーが誤って rclone を使ってインフラ負荷を上げる」事故の予防策として機能している。 完全な悪意ある攻撃者を想定する場合は、 WG 鍵管理 + アカウントごとの権限制御で対応する。