sync_prohibited 実装メモ(nginx User-Agent ブロック)
概要

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

実装日:2026-03-31 対象ファイル:/etc/nginx/sites-enabled/cloud.k2-o.net

ブロック対象 User-Agent
クライアント名用途
rclone大量同期・クラウドストレージ移行ツール
cyberduckFTP / WebDAV クライアント(Mac/Win)
davfs2Linux WebDAV マウント
cadaverCLI WebDAV クライアント
BitKinexWebDAV クライアント
NetDriveWebDAV ドライブマウント
設定内容
対象ファイル

/etc/nginx/sites-enabled/cloud.k2-o.net

追加箇所(location / ブロック先頭)
location / {
    if ($http_user_agent ~* "(rclone|cyberduck|davfs2|cadaver|BitKinex|NetDrive)") {
        return 403;
    }
    allow 192.168.20.0/24;
    allow 192.168.10.0/24;
    ...(以下既存設定)
}
動作確認結果

✅ HTTP/2 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
適用コマンド(再適用用)
nginx -t && systemctl reload nginx
ブロック対象追加方法

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

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

追記後は必ず nginx -t && systemctl reload nginx で反映すること。

設計上の注意

⚠️ User-Agent はクライアント側で偽装可能なため、完全な防御ではない。悪意ある利用者が UA を変更した場合は通過する。補完的な対策(レート制限等)と組み合わせることを推奨。

⚠️ 現在は全ユーザー一律ブロック。ユーザーごとの制御が必要な場合は FastAPI ポータル連携実装が必要。