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 | 大量同期・クラウドストレージ移行ツール |
| cyberduck | FTP / WebDAV クライアント (Mac / Win) |
| davfs2 | Linux WebDAV マウント |
| cadaver | CLI WebDAV クライアント |
| BitKinex | WebDAV クライアント |
| NetDrive | WebDAV ドライブマウント |
設定内容
// 対象ファイル
/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 鍵管理 + アカウントごとの権限制御で対応する。