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 | 大量同期・クラウドストレージ移行ツール |
| cyberduck | FTP / WebDAV クライアント(Mac/Win) |
| davfs2 | Linux WebDAV マウント |
| cadaver | CLI WebDAV クライアント |
| BitKinex | WebDAV クライアント |
| NetDrive | WebDAV ドライブマウント |
設定内容
対象ファイル
/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 ポータル連携実装が必要。
