Bugfix – Umzug Plesk zu CloudPanel: Matomo Verzeichnisse/Dateien öffentlich

CloudPanelWeb

Problem

Einige Verzeichnisse von Matomo sind öffentlich zugänglich.

Verzeichnisse, welche privat sein müssenhttps://piwik.linkemarco.de/config/config.ini.php https://piwik.linkemarco.de/tmp/cache/tracker/matomocache_general.php Wir haben festgestellt, dass auf die oben aufgelisteten URLs über den Browser zugegriffen werden kann, was aber NICHT so sein sollte. Der Zugriff kann ein mögliches Sicherheitsrisiko darstellen, weil der Inhalt Informationen über Ihren Server und potenziell über Ihre Benutzer enthält. Bitte beschränken Sie den Zugriff auf diese URLs. Wir haben auch herausgefunden, dass Matomos Konfigurationsverzeichnis öffentlich zugänglich ist. Zwar können Angreifer die Konfigurationsdatei nicht lesen, jedoch sind Ihre MySQL Anmeldeinformationen und andere Informationen für jeden zugänglich, wenn Ihr Webserver aus irgend einem Grund aufhört, PHP Dateien auszuführen. Bitte prüfen Sie Ihre Webserverkonfiguration und verwehren Sie den Zugriff zu diesem Verzeichnis. __[Erfahren Sie hier mehr darüber.](https://matomo.org/faq/troubleshooting/how-do-i-fix-the-error-private-directories-are-accessible/?mtm_campaign=Matomo_App&mtm_source=Matomo_App_OnPremise&mtm_medium=App.Installation.systemCheckPage)__Empfohlene private Verzeichnissehttps://piwik.linkemarco.de/tmp/ https://piwik.linkemarco.de/tmp/empty https://piwik.linkemarco.de/lang/en.json Wir haben die obenstehenden URLs gefunden, welche über den Browser erreichbar sind, aber wir empfehlen das zu unterbinden. Wenn möglich, schränken Sie bitte den Zugriff auf sie ein. __[Erfahren Sie hier mehr darüber.](https://matomo.org/faq/troubleshooting/how-do-i-fix-the-error-private-directories-are-accessible/?mtm_campaign=Matomo_App&mtm_source=Matomo_App_OnPremise&mtm_medium=App.Installation.systemCheckPage)__

Lösung

CloudPanel nutzt Nginx statt Apache und kann die .htaccess-Datei nicht korrekt verarbeiten.

Zur Behebung des Problem, die vHost-Datei über CloudPanel anpassen, mit folgenden Code ersetzen.

Alt

server {
  listen 80;
  listen [::]:80;
  listen 443 quic;
  listen 443 ssl;
  listen [::]:443 quic;
  listen [::]:443 ssl;
  http2 on;
  http3 off;
  {{ssl_certificate_key}}
  {{ssl_certificate}}
  server_name piwik.linkemarco.de;
  {{root}}

  {{nginx_access_log}}
  {{nginx_error_log}}

  if ($scheme != "https") {
    rewrite ^ https://$host$request_uri permanent;
  }

  location ~ /.well-known {
    auth_basic off;
    allow all;
  }

  {{settings}}

  location / {
    {{varnish_proxy_pass}}
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_hide_header X-Varnish;
    proxy_redirect off;
    proxy_max_temp_file_size 0;
    proxy_connect_timeout      720;
    proxy_send_timeout         720;
    proxy_read_timeout         720;
    proxy_buffer_size          128k;
    proxy_buffers              4 256k;
    proxy_busy_buffers_size    256k;
    proxy_temp_file_write_size 256k;
  }

  location ~* ^.+\.(css|js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|woff2|eot|mp4|ogg|ogv|webm|webp|zip|swf|map|mjs)$ {
    add_header Access-Control-Allow-Origin "*";
    add_header alt-svc 'h3=":443"; ma=86400';
    expires max;
    access_log off;
  }

  location ~ /\.(ht|svn|git) {
    deny all;
  }

  if (-f $request_filename) {
    break;
  }
}

server {
  listen 8080;
  listen [::]:8080;
  server_name piwik.linkemarco.de;
  {{root}}

  include /etc/nginx/global_settings;

  try_files $uri $uri/ /index.php?$args;
  index index.php index.html;

  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_intercept_errors on;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    try_files $uri =404;
    fastcgi_read_timeout 3600;
    fastcgi_send_timeout 3600;
    fastcgi_param HTTPS "on";
    fastcgi_param SERVER_PORT 443;
    fastcgi_pass 127.0.0.1:{{php_fpm_port}};
    fastcgi_param PHP_VALUE "{{php_settings}}";
  }

  if (-f $request_filename) {
    break;
  }
}

Neu

server {
  listen 80;
  listen [::]:80;
  listen 443 quic;
  listen 443 ssl;
  listen [::]:443 quic;
  listen [::]:443 ssl;
  http2 on;
  http3 off;
  {{ssl_certificate_key}}
  {{ssl_certificate}}
  server_name piwik.linkemarco.de;
  {{root}}
  {{nginx_access_log}}
  {{nginx_error_log}}
  if ($scheme != "https") {
    rewrite ^ https://$host$request_uri permanent;
  }
  location ~ /.well-known {
    auth_basic off;
    allow all;
  }
  {{settings}}
  location / {
    {{varnish_proxy_pass}}
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_hide_header X-Varnish;
    proxy_redirect off;
    proxy_max_temp_file_size 0;
    proxy_connect_timeout      720;
    proxy_send_timeout         720;
    proxy_read_timeout         720;
    proxy_buffer_size          128k;
    proxy_buffers              4 256k;
    proxy_busy_buffers_size    256k;
    proxy_temp_file_write_size 256k;
  }
  location ~* ^.+\.(css|js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|woff2|eot|mp4|ogg|ogv|webm|webp|zip|swf|map|mjs)$ {
    add_header Access-Control-Allow-Origin "*";
    add_header alt-svc 'h3=":443"; ma=86400';
    expires max;
    access_log off;
  }
  location ~ /\.(ht|svn|git) {
    deny all;
  }
  if (-f $request_filename) {
    break;
  }
}
server {
  listen 8080;
  listen [::]:8080;
  server_name piwik.linkemarco.de;
  {{root}}
  include /etc/nginx/global_settings;
  try_files $uri $uri/ /index.php?$args;
  index index.php index.html;

  # Matomo – Private Verzeichnisse sperren
  location ~ ^/(config|tmp|core|lang)(/|$) {
    deny all;
    return 403;
  }
  location ~* \.(log|tpl|twig|ini|phps|fla|psd|sh|sql)$ {
    deny all;
    return 403;
  }
  location ~ ^/lang/.*\.json$ {
    deny all;
    return 403;
  }

  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_intercept_errors on;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    try_files $uri =404;
    fastcgi_read_timeout 3600;
    fastcgi_send_timeout 3600;
    fastcgi_param HTTPS "on";
    fastcgi_param SERVER_PORT 443;
    fastcgi_pass 127.0.0.1:{{php_fpm_port}};
    fastcgi_param PHP_VALUE "{{php_settings}}";
  }
  if (-f $request_filename) {
    break;
  }
}