【Docker】Nextcloud の警告を潰すメモ【Nextcloud】

もくじ

はじめに

オンラインストレージは DropBox から始まり iCloud GoogleDrive OndDrive など各社サービスを展開してますが、自分はファイルが散らばり収集がつかなくなっていました。

自宅サーバーで出来るフォルダ同期する仕組みはないものかと探した結果、Nextcloud と OwnCloud に行き着き、導入が楽だった Nextcloud を導入したあとの警告対策のメモです。

サービスはすべて Docker コンテナで動いており、Docker Network で接続しています。

導入より警告のメンテナンスが大変だった

Nextcloud の Docker コンテナの導入紹介は web上で沢山あるので割愛します。

セキュリティ&セットアップ警告 の初回の警告群はこちら

はい、目まいがしますね。これをひとつつずつ潰していくのが気持ちいいんです。

リバースプロキシヘッダーの構成が正しくないか、信頼できるプロキシからNextcloudにアクセスしています。そうでない場合、これはセキュリティに問題があり、攻撃者がNextcloudを表示できるようにIPアドレスを偽装することができます。詳細については、ドキュメント↗をご覧ください。

これは警告文を読んでも意味不明でした。nginx-proxy の設定がまずいのかと思いますが。
こちら 様を参考にさせていただきました。

Nextcloud のコンテナに入ります。

# docker exec -it nextcloudのコンテナ名 bash

vi が見つからなかったのでインストールします。

# apt update
# apt install vim

config.php に追加します。

# vi config/config.php

適当な箇所に trusted_proxies を追加します。自分は trusted_domains 設定の下辺りに追加しました。
IP は こちら で確認してます。999はダミーです。

'trusted_proxies' =>
    array (
        0 => '999.999.999.999',
    ),

自分は固定IPなのでこれで問題ないですが、動的IPだとどうするんですかね?

SQLiteがデータベースとして使用されています。大規模な運用では別のデータベースに切り替えることをお勧めします。 これは、ファイル同期にデスクトップクライアントを使用する場合に特に推奨されます。 別のデータベースに移行するには、コマンドラインツールを使います。”occ db:convert-type” または ドキュメント を参照してください。

初期設定でポチポチしていたので SQLite の設定でインストールしていました。

mariadb(MySQL互換) は別コンテナで稼働中なのでこちらに移行します。

こちら 様を参考にさせていただきました。
公式は こちら

データベース名は nextcloud とします。
MySQL のコンテナに入り データベース nextcloud を追加する。

# docker exec -it SQLのコンテナ bash
# mysql -u ユーザー名 -p
MariaDB > create database nextcloud;
MariaDB > exit; 

nextcloud コンテナに入り occ 実行

Try adding 'sudo -u #33' to the beginning of the command (without the single quotes)
If running with 'docker exec' try adding the option '-u 33' to the docker command (without the single quotes)

怒られたので -u 出直す。

# docker exec -u 33 -it nextcloud bash

メンテナンスモードにする

# php occ maintenance:mode --on

コンバートする

# php occ db:convert-type mysql SQLのユーザ名 データベースコンテナ名 nextcloud

コンバートが完了すると新たな警告が増えるのでこちらも対応します。

データベース内のいくつかの列で、big intへの変換が行われていません。 大きなテーブルでカラムタイプを変更すると時間がかかることがあるため、自動的には変更されませんでした。 ‘occ db:convert-filecache-bigint’を実行することによって、それらの保留中の変更は手動で適用できます。 この操作は、インスタンスがオフラインの間に行う必要があります。

データ型が小さいから 4バイト に変換しろということですかね?

MySQL のコンテナに入り データベース nextcloud を変更

# docker exec -it SQLのコンテナ bash
# mysql -u ユーザー名 -p
MariaDB > ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
MariaDB > exit;

nextcloudコンテナ に -u で入る

# docker exec -u 33 -it nextcloud bash

リペアする

# php occ maintenance:repair
# php occ db:convert-type mysql SQLのユーザ名 データベースコンテナ名 nextcloud --clear-schema --password=SQLのパスワード

メンテナンスモード解除

# php occ maintenance:mode --off

これで MySQL に移行できたと思います。

Strict-Transport-Security “HTTP ヘッダーの秒数が少なくとも”15552000” に設定されていません。セキュリティを強化するには、セキュリティのヒント↗で説明されているようにHSTSを有効にすることをお勧めします。

またまた こちら 様を参考にさせていただきました。

nextcloudコンテナ に入る

# docker exec -it nextcloud bash

.htaccess を編集

# vi /var/www/html/.htaccess

適当な場所に以下を追加

Header set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"

ご使用のシステムには、デフォルトの電話地域が設定されていません。これは、国コードなしでプロファイル設定の電話番号を検証するために必要です。国コードなしで番号を許可するには、地域のそれぞれの ISO3166-1コード↗とともに “default_phone_region” を設定ファイルに追加してください。

こちら 様を参考にさせていただきました。

nextcloudコンテナ に入る

# docker exec -it nextcloud bash

config.php にデフォルトの電話地域を設定する。

# vi /var/www/html/config/config.php

適当な箇所に以下を追加

'default_phone_region' ⇒ 'JP',

PHP OPcacheモジュールが正しく設定されていません。詳細は ドキュメント を参照してください。
OPcacheバッファーがまもなく一杯になります。全てのスクリプトをキャッシュに保管できるようにするには、opcache.memory_consumptionの値を128より多い値で、PHP設定に適用することを推奨します。

nextcroud を数時間いじっていると新たな不具合が出ました。

nextcloudコンテナ に入る

# docker exec -it nextcloud bash

php が見当たらなかったので検索

# find / -type d -name php

opcache-recommended.ini を編集

# vi /usr/local/etc/php/conf.d/opcache-recommended.ini

opcache.memory_consumption を 128 から 512 に変更

opcache.memory_consumption=512

正直 数字の感覚がわからなかったので、4倍ほど増やしました。
環境に合わせて調整してください。

安全な接続でインスタンスにアクセスしていますが、インスタンスは安全でないURLを生成しています。これは、リバースプロキシの背後にあり、構成設定変数が正しく上書きされていない可能性があります。これについては、ドキュメントページ↗をお読みください。

これが取り切れないです。 
nginx-proxy の設定を見直す必要がありそうですが、今回は力尽きたので諦めました。

取れました。追信に追記。

セキュリテースキャンも合格のようです。

あとがき

Nextcloud の多機能ぶりに驚いてます。
Mac Windows iOS のフォルダ同期だけのつもりで導入しましたが、市販グループウェアを凌駕する出来でびっくりです。一人で使うのがもったいないくらいです。

あ、あとメールの設定でハマったのですが、これはログインしまくって Fail2Ban に不審者扱いにされたものでした。ホワイトリストに入れて解決しました。


追信 2023/05/05

安全な接続でインスタンスにアクセスしていますが、インスタンスは安全でないURLを生成しています。これは、リバースプロキシの背後にあり、構成設定変数が正しく上書きされていない可能性があります。これについては、ドキュメントページ↗をお読みください。

こちらの問題を解決したことで、
セキュリティ&セットアップ警告 はすべて解決しました。

メールが受信できなかったのが問題なのかなぁ?

超すっきり!

2 Comments