環境

  • Matomo 5.7.0
  • PHP-FPM8.3
  • Ubuntu 24.04

を利用中、Matomoの管理画面で

安全な SSL 接続のみで Matomo を使用することをお勧めします。 Http で安全でないアクセスを防ぐには、Matomo config / config.ini.php ファイルの General セクションに force_ssl = 1 を追加します。

と警告があったので、これに対処したときのメモです。

そもそもの問題として:SSL化することの意義

通信の盗聴と改ざんの防止(中間者攻撃対策)

HTTP(暗号化されていない接続)を利用している場合、ブラウザとサーバー間の通信内容はすべてプレーンテキスト(平文)で流れます。

  • ログイン情報の保護:
  • 管理画面にログインする際のユーザー名やパスワードがネットワーク上で丸見えになります。
  • 解析データの保護:
  • 収集しているアクセスログやレポートデータが第三者に盗み見られるリスクがあります。
  • 改竄防止:
  • 通信の途中でJavaScriptを注入されるなどの改竄を防ぎ、Matomoの正確な動作を保証します。

Cookie(セッション情報)の安全な送信

Matomoは管理者のログイン状態を保持するためにCookieを使用します。

  • セッションハイジャックの防止:
    • HTTPSを強制しない場合、ログイン状態を証明する「セッションID」が暗号化されずに送信される可能性があります。これが攻撃者に盗まれると、パスワードを知らなくても管理者としてログイン(なりすまし)されてしまいます。
  • Secure属性の有効化:
    • SSLを強制することで、ブラウザに対して「このCookieはHTTPS通信の時のみ送信する」という指示(Secure属性)が正しく機能するようになります。

ブラウザのセキュリティ仕様への対応

近年のWebブラウザ(Chrome, Firefox, Safariなど)は、セキュリティを重視しており、HTTP接続に対して厳格な制限を設けています。

  • SameSite属性の制限: 多くのブラウザでは、Cookieの SameSite=None 属性を利用する場合、Secure 属性(=HTTPS)が必須となっています。SSLを強制しないと、Matomoのトラッキングコードが正しく動作しなかったり、ログインが維持できなかったりする不具合の原因になります。
    -「保護されていない通信」の警告: HTTPでアクセスするとブラウザのアドレスバーに警告が表示され、ユーザーや管理者に不安を与えます。

リファラ(参照元)情報の保持

Webサイトの計測において重要な「どこから来たか」という情報(リファラ)は、「HTTPSのページからHTTPのページへ移動する際」にはセキュリティ上の理由でブラウザによって削除されることが一般的です。

もしMatomoのサーバーがHTTPで動作していると、HTTPS化されたサイトからの流入元データが取得できず、解析精度が著しく低下します。

筆者のサイトでは既に、apacheのバーチャルホスト設定で

<VirtualHost _default_:80>
ServerName hoge.example.com
 RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>

としていますが、念には念を入れます。

大前提

「ドメインに即した証明書を取得していること」

が必要です。(設定メモ

さっくりとした手順

  1. matomoの.confファイルのバックアップを取ります。
  2. matomoの.confファイルの編集を行います。
  3. 設定を反映します。

matomoの.confファイルのバックアップ

  • バックアップディレクトリへコピー
sudo cp -pi /path/to/matomo/config/config.ini.php /path/to/backup/directory/conf_backup/config.ini.php.$(date +%Y%m%d)

`

.confの格納場所は自分の環境に合わせます。(筆者環境/home/www-data/matomo)

  • バックアップ確認
diff -u /path/to/backup/directory/conf_backup/config.ini.php.$(date +%Y%m%d) /path/to/matomo/config/config.ini.php

差分が無ければバックアップ成功です。

  • 再掲:なぜこの方法をとるのか?

「バックアップとオリジナルの両方があることが一発で分かるから」です。

cp -pi として、 ls -lを行うよりも確実です。

そして、この時点で差分があった場合は「これから修正するファイルを間違えた」というまたとない確認手段になります。(もしくはリアルタイムで改竄を受けているか、不思議なことが起こっているか)

matomoの.confファイルの編集

/path/to/matomo/config/config.ini.phpを、任意の方法で(教義・信仰に沿ったエディタで)編集します。

 [General]

セクションの下、trusted hostsあたりの直下に

force_ssl = 1

を追記して保存します。

  • 編集確認
diff -u /path/to/backup/directory/conf_backup/config.ini.php.$(date +%Y%m%d) /path/to/matomo/config/config.ini.php

以下のような結果が得られれば成功です。

 [General]
 salt = "UUID"
 trusted_hosts[] = "Your Domain"
+force_ssl = 1

このように、diffの元と先をcpの逆にすることは、編集したところが+で表示される視覚的な安心感を生みます。

設定反映

  • apache構文確認
sudo apache2ctl configtest

SyntaxOKを確認します。それ以外のエラーが起きていたら、編集時に誤りがあるので確認しましょう。

  • apache再開前確認
systemctl status apache2.service

active(running)を確認します

  • apache再開
sudo systemctl restart apache2.service
  • apache再開確認
systemctl status apache2.service

active(runnning)を確認します

  • php-fpm再開前確認
systemctl status php8.3-fpm.service 

active(running)を確認します

  • php-fpm再開
sudo systemctl restart php8.3-fpm.service 
  • php-fpm再開確認
systemctl status php8.3-fpm.service 

active(runnning)を確認します

設定反映確認

  1. 設定を行ったmatomoサイトに管理者権限でログインします。
  2. 設定 > システムの確認 > 完全なシステムチェックレポートを表示する をクリックします。
  3. 強制 SSL 接続にチェックが入っていれば設定完了です。