Nextcloud

【techblog】Nextcloud へ ownCloud クライアントアプリからのアクセスをさせない方法

はじめに

Nextcloud では無料で使える機能が ownCloud では使えないとか、Nextcloud の開発スピードが早いとか、さまざまな理由で ownCloud から Nextcloud に運用をシフトするケースがあるかと思います。
そうなると運用で気になるのが、クライアント(利用者)の利用状況です。
Nextcloud に移行することにあわせて、これまでの ownCloud のデスクトップクライアントアプリやスマートデバイス向けアプリを使わせないように制限したい・・・そんなケースを想定して、各クライアントのアプリのアクセスを制限する方法をまとめてみました。

どうやるのか?

各アプリからアクセスされる際の User-Agent で、アクセス許可/拒否を行うことができます。
※除: Android アプリ

各アプリの User-Agent

※User-Agent は 2019年4月5日現在で確認しているものです。

OS 区分 User-Agent
Windows Nextcloud Mozilla/5.0 (Windows) mirall/<バージョン> (build <ビルドバージョン>) (Nextcloud)
Windows ownCloud Mozilla/5.0 (Windows) mirall/<バージョン> (build <ビルドバージョン>)
macOS Nextcloud Mozilla/5.0 (Macintosh) mirall/<バージョン> (build <ビルドバージョン>) (Nextcloud)
macOS ownCloud Mozilla/5.0 (Macintosh) mirall/<バージョン> (build <ビルドバージョン>)
Linux Nextcloud Mozilla/5.0 (Linux) mirall/<バージョン> (build <ビルドバージョン>) (Nextcloud)
Linux ownCloud Mozilla/5.0 (Linux) mirall/<バージョン> (build <ビルドバージョン>)
iOS Nextcloud Mozilla/5.0 (iOS) Nextcloud-iOS/<バージョン>
iOS ownCloud Mozilla/5.0 (iOS) ownCloud-iOS/<バージョン>
Android Nextcloud 【初回接続時】
Mozilla/5.0 (Android) ownCloud-android/<バージョン>
【ログイン後】
Mozilla/5.0 (Android) Nextcloud-android/<バージョン>
Android ownCloud Mozilla/5.0 (Android) ownCloud-android/<バージョン>
  • <バージョン> には アプリのバージョンが入ります。
    • 例1: 3.5.1
    • 例2: 2.5.1final
  • <ビルドバージョン> には アプリのビルドバージョンが入ります。
    • 例1: 20181204
    • 例2: 11456
  • Androidアプリでは初回接続時において Nextcloud アプリと ownCloud アプリの区別ができないため User-Agent でのアクセス制限はできません。しかし、ownCloud アプリから Nextcloud に接続すると Precondition failed メッセージが出て接続できないため、これに任せます。

Nginx での制限設定例

以下の設定を Nginx 設定ファイルに追加し、Nginx を再起動します。

# ownCloud Desktop Client(Windows/Mac/Linux Common)
if ($http_user_agent ~ "^Mozilla/5\.0 \([A-Za-z]+\) mirall/.+ \(build [0-9]+\)$") {
    return 403;
}
# ownCloud App (iOS)
if ($http_user_agent ~ "^Mozilla/5\.0 \(iOS\) ownCloud-iOS+/.+$") {
    return 403;
}