Сегодня настроим фильтрацию fail2ban для NextCloud на операционной системы Ubuntu/Debian/Linux
Установка Fail2Ban
Для установки в терминале набираем:
sudo apt-get install fail2ban
После установки Fail2Ban имеет рабочий фильтр для ssh. Читать
Сегодня настроим фильтрацию fail2ban для NextCloud на операционной системы Ubuntu/Debian/Linux
Для установки в терминале набираем:
sudo apt-get install fail2ban
После установки Fail2Ban имеет рабочий фильтр для ssh. Читать
Если Вы получаете предупреждение в админ панели NextCloud вида: “Последнее задание было выполнено X дней назад. Похоже, что-то не в порядке.“
Соглавно документации и настроек, есть три варианта решения задачи:
AJAX – Выполнять одно задание с каждой загруженной страницей
По умолчанию Nextcloud использует метод планирования AJAX. Это самый простой, но не очень надёжный вариант. При каждом посещении пользователем web-страницы Nextcloud выполняется фоновое задание. Преимущество этого варианта в том, что он не требует ни каких дополнительных настроек. Недостатком этого механизма, что для его запуска требуется регулярное посещение страницы.
Webcron – cron.php зарегистрирован в службе webcron и будет вызываться каждые 5 минут по HTTP.
в этом варианте мы регистрируем адрес скрипта cron.php, который будет запускаться внешней веб-службой cron. Адрес скрипта если вы устанавливали без поддиректорий:
http[s]://ваш_сайт.ру/cron.php
(FQDN от англ. Fully Qualified Domain Name – полностью определённое имя домена)
Для настройки вы можете воспользоваться сервисом easycron.com или аналогичным. Чтобы использовать этот вариант автоматического выполнения фоновых задач на сервере, необходимо чтобы nextcloud сервер имел доступ к серверу через Интернет.
Cron – Использовать системный cron для вызова файла cron.php каждые 5 минут. cron.php должен исполняться из под пользователя “www”.
Наиболее предпочитаемый вариант – это использование функции cron в операционной системе. Этот метод позволяет выполнять запланированные задания без ограничений. Тут достаточно наличие выделенного сервера (VDS, VPS и т.д ) или доступ к системному Cron.
Чтобы запустить задание cron в Linux, нам необходимо узнать от какого пользователя работает веб-сервер. Проверяем с помощью sockstat какой сервис слушает порты 80 и 443. Необходимо установить программу:
sudo apt install sockstat
sockstat -l | grep -E "80|443"
root nginx 2448 tcp4 *:80 *:*
root nginx 2449 tcp4 *:80 *:*
или при помощи netstat
netstat -tulpn | grep -E ":80|:443"
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2448/nginx: master
Итак, настраивать будем cron от пользователя www-data (актуально для Debian/Ubuntu), на запуск вызова сценария cron.php каждый 5 минут:
sudo crontab -u www-data -e
добавляем строку в конце
*/5 * * * * php -f /var/www/nextcloud/cron.php
После данных изменений предупреждение из админ-панели пропадет.
[endtxt]
Сегодня поговорим о некоторых хитростях и секретах в настройках NextCloud, которые помогут вам в использовании вашего домашнего облака.
Нужно добавить в конфигурационный файл config.php
sudo nano /var/www/nextcloud/config/config.php
следующие строки:
'lost_password_link' => 'disabled',
В ответ на предупреждение: Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ. Необходимо внести изменения в php.ini
. Вот пример для php-fpm
sudo nano /etc/php/7.4/fpm/php.ini
Изменим следующие строки
upload_max_filesize = 4G
memory_limit = 512M
Перезагрузим php
sudo /etc/init.d/php8.0-fpm restart
При попытках скачать из облака файлы объемом более 1гб скачивание прерывается при достижении 1гб. Такое происходит при условии использования Nginx как реверс-прокси. Решается очень просто, нужно добавить в конфиг сайта опцию «proxy_buffering off». Открываем конфиг Nginx, находим секцию в которой конфиг нашего Nextcloud и добавляем эту опцию:
server {
…
proxy_buffering off;
…
}
Если при работе с OCC вы получаете вот такую ошибку “PHP Fatal error: Cannot use OCPConstants as Constants because the name is already in use in /var/www/nextcloud/apps/groupfolders/lib/Command/ACL.php on line 35“. Например при включении режима обслуживания:
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
PHP Fatal error: Cannot use OCPConstants as Constants because the name is already in use in /var/www/nextcloud/apps/groupfolders/lib/Command/ACL.php on line 35
Для исправления ошибки откроем файлACL.php
:
sudo nano /var/www/nextcloud/apps/groupfolders/lib/Command/ACL.php
и закомментируем 35 строчку:
//use OCPConstants;
Дополнительные настройки, добавим или изменим в файле:
nano /var/www/nextcloud/config/config.php
'session_lifetime' => 60 * 60 * 24,
'session_keepalive' => true,
Также изменим в php основные конфигурации:
nano /etc/php/8.0/fpm/php.ini
данный пример справедлив для nginx + php-fpm
php_value upload_max_filesize 10G
php_value post_max_size 10G
php_value max_input_time 3600
php_value max_execution_time 3600
[endtxt]
В предыдущей статье я писал как можно установить и настроить nextcloud на операционной системе Ubuntu Server 20.04 с web-сервером nginx+php-fpm и базой данных postgresql. Почитать можно тут.
После успешного запуска nextcloud в панели администратора Вы можете в пункте общие сведения, увидеть следующие предупреждения:
Для устранения запустим команды для ускорения индексирования файлов. В терминале набираем:
cd /var/www/nextcloud/
Включаем режим обслуживания:
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
И вводим данные строки:
sudo -u www-data php occ db:add-missing-indices
sudo -u www-data php occ db:convert-filecache-bigint
Выключаем режим обслуживания
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
После данной манипуляции ошибка должна исчезнуть.
Чтобы исправить данные предупреждения в конфигурационный файл nginx вашего облака внесем следующую location:
location /.well-known {
location = /.well-known/carddav { return 301 https://$host/remote.php/dav/; }
location = /.well-known/caldav { return 301 https://$host/remote.php/dav/; }
location ~ /.well-known/acme-challenge { allow all; }
rewrite ^/.well-known/webfinger /public.php?service=webfinger last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
location ^~ /.well-known { return 301 https://host/index.php$uri; }
try_files $uri $uri/ =404;
}
Адрес https://mynextcloud.ru измените на свой.
Также внесём следующие строки в файл .htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} DavClnt
RewriteRule ^$ https://%{SERVER_NAME}/remote.php/webdav/ [L,R=302]
RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule ^.well-known/host-meta https://%{SERVER_NAME}/public.php?service=host-meta [QSA,L]
RewriteRule ^.well-known/host-meta.json https://%{SERVER_NAME}/public.php?service=host-meta-json [QSA,L]
RewriteRule ^.well-known/webfinger https://%{SERVER_NAME}/public.php?service=webfinger [QSA,L]
RewriteRule ^.well-known/carddav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]
RewriteRule ^.well-known/caldav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]
RewriteRule ^remote/(.*) https://%{SERVER_NAME}/remote.php [QSA,L]
RewriteRule ^(?:build|tests|config|lib|3rdparty|templates)/.* - [R=404,L]
RewriteCond %{REQUEST_URI} !^/.well-known/(acme-challenge|pki-validation)/.*
RewriteRule ^(?:.|autotest|occ|issue|indie|db_|console).* - [R=404,L]
</IfModule>
Включил https на web сервере для nextclou и появился неприятный глюк: в google chrome, opera и яндекс браузере, а также в firefox, IE и edge при входе в аккаунт и выходе из него браузер “зависает” на странице входа, но при этом авторизуется. Если нажать F5, то окажемся в своем аккаунте.
Как же победить данную проблему?
Лечится добавлением в конфигурационный файл NexCloud:
sudo nano /var/www/nextcloud/config/config.php
следующего содержимого:
'overwriteprotocol' => 'https',
Не настроена система кэширования. Для увеличения производительности сервера, по возможности, настройте memcache.
Хочу использовать Memcached. Для этого надо установите модуль для PHP и сам memcached.
Как оказалось есть два похожих пакета:
Нужен с буквой d в конце.
Установливаем:
sudo apt install memcached php8.0-memcached
настройки в /etc/php/8.0/mods-available/memcached.ini
оставляю все без изменений.
В выводе phpinfo(); появился блок с описанием memcached.
Настройки запуска сервиса в /etc/systemd/system/multi-user.target.wants/memcached.service
и конфигурационный файл /etc/memcached.conf
тоже не менял.
Запускаем memcached:
sudo systemctl start memcached
Проверяем запустился ли сервис
sudo ps ax | grep memcached
Должно выдать что-то вроде этого
725 ? Ssl 0:11 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1 -P /var/run/memcached/memcached.pid
Теперь в конфиге NextCloud добавим строки:
sudo nano /var/www/nextcloud/config/config.php
'memcache.local' => 'OCMemcacheMemcached',
'memcache.distributed' => 'OCMemcacheMemcached',
'memcached_servers' => [
[ '127.0.0.1', 11211 ],
],
Для устранения данного предупреждения необходимо установить модуль imagick:
sudo apt install imagemagick
Не указан регион размещения этого сервера Nextcloud, что требуется для возможности проверки номеров телефонов без указания кода страны.
Чтобы разрешить пользователям сервера указывать номера телефонов без указания кода страны, добавьте параметр «default_phone_region» с соответствующим кодом страны в соответствии с ISO 3166-1↗.
Для устранения данного предупреждения откроем конфигурационный файл NextCloud :
sudo nano /var/www/nextcloud/config/config.php
и добавим следующие строки:
'default_phone_region' => 'RU',
Для устранения данных ошибок в терминале набираем следующее:
sudo nano /etc/nginx/conf.d/headers.conf
И заполняем данным текстом:
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Cache-Control "public, max-age=7200";
# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;
Сохраняем файл (ctrl+o, ctrl+x). И перезагружаем nginx
sudo service nginx restart
Для устранения данного предупреждения отредактируем файл Nginx headers.conf:
sudo nano /etc/nginx/conf.d/headers.conf
Добавим следующие строки:
add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
Перезапустим nginx:
sudo service nginx restart
PHP не настроен правильно для получения переменных системного окружения.
Запрос getenv(«PATH») возвращает пустые результаты.
Обратитесь к разделу о конфигурации PHP и примечаниям к конфигурации PHP из руководства по установке. Обратите внимание на настройку параметров PHP, особенно при использовании механизма php-fpm.
Когда вы используете php-fpm, системные переменные среды, такие как PATH, TMP или другие, не заполняются автоматически так же, как при использовании php-cli. Вызов функции PHP, такой как getenv(‘PATH’); может возвращать пустой результат. Поэтому вам может потребоваться вручную настроить переменные среды в файле конфигурации php-fpm.
Редактируем файл:
sudo nano /etc/php/8.0/fpm/pool.d/www.conf
Находим строки:
;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp
И сними с них комментарий (;).
Далее перезапустим php8.0-fpm
sudo service php8.0-fpm restart
Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ.
В терминале набираем:
sudo nano /etc/php/8.0/fpm/php.ini
Находим и редактируем следующие строки:
max_execution_time = 300
max_input_time = 600
memory_limit = 512M
post_max_size = 20M
upload_max_filesize = 40M
При попытках скачать из облака файлы объемом более 1гб скачивание прерывается при достижении 1гб. Такое происходит при условии использования Nginx как реверс-прокси. Решается очень просто, нужно добавить в конфигурационный файл сайта опцию «proxy_buffering off». Открываем и добавляем эту опцию:
server {
…
proxy_buffering off;
…
}
[endtxt]
Сегодня в статье рассмотрим пример по установке и настройке домашнего облака NextCloud в среде Linux, также установим базу данных PostgreSQL и Web-сервер Nginx с PHP-FPM. Установка будет производиться на чистую Ubuntu Server 22.04 LTS.
Разобьем установку на части. Установим базу данных PostgreSQL, интерпретатор PHP, далее web-сервер Nginx, ну и последним пунктом наше облако NextCloud:
Для установки базы данных в терминале набираем:
sudo apt install postgresql
Для установки PHP для начала добавим более новый репозиторий:
sudo add-apt-repository ppa:ondrej/php
После этого устанавливаем PHP и необходимые зависимости для NextCloud.
Предупреждение: в данный момент NextCloud поддерживает PHP версии не выше 8.2
sudo apt install php8.2 php8.2-bcmath php8.2-bz2 php8.2-common php8.2-curl php8.2-fpm php8.2-gd php8.2-gmp php8.2-intl php8.2-mbstring php8.2-opcache php8.2-pgsql php8.2-imagick php8.2-xml php8.2-xmlrpc php8.2-zip php8.2-memcached memcached php-memcached
Для установки nginx для начала добавим, как и с PHP, более новый репозиторий:
sudo add-apt-repository ppa:ondrej/nginx
Теперь можно установить наш web-сервер. Устанавливать будем сборку в которую включен модуль для проигрывания потокового видео с нашего сервера (поддержка модуля mp4). Открываем терминал и набираем:
sudo apt install nginx-extras
После всех пунктов выше приступим к установки нашего домашнего облака NextCloud. Для этого переходим в директорию /var/www
:
cd /var/www/
Скачиваем последнюю версию NextCloud (на данный момент это версия NextCloud 27.0.1), а также сразу распакуем и изменим права на директорию NextCloud:
sudo wget https://download.nextcloud.com/server/releases/nextcloud-27.0.1.zip
sudo unzip nextcloud-27.0.1.zip
sudo chown -R www-data:www-data /var/www/
Как и в пункте с установкой, настройка также будет разбита по пунктам. Давайте приступим.
Приступим к настройке web-сервера nginx. Создадим файл конфигурации для NextCloud, работать наш сервер будет на порту 80. И так начнем:
sudo nano /etc/nginx/sites-available/nextcloud.conf
Заполняем в соответствии с моим листингом:
server {
listen 80;
root /var/www/nextcloud;
index index.php index.html;
server_name mynextcloud.ru; # меняем на свой домен
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
rewrite ^(/core/doc/[^/]+/)$ $1/index.html;
rewrite ^ /index.php;
try_files $uri $uri/ index.php;
}
# Устанавливаем максимальный размер загрузки
client_max_body_size 2048M;
fastcgi_buffers 64 4K;
# Указываем расположение страниц 40X.php
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location /.well-known {
location = /.well-known/carddav { return 301 $scheme://mynextcloud.ru/remote.php/dav/; }
location = /.well-known/caldav { return 301 $scheme://mynextcloud.ru/remote.php/dav/; }
# Все остальное динамически обрабатывается Nextcloud
location ^~ /.well-known { return 301 $scheme://mynextcloud.ru/index.php$uri; }
try_files $uri $uri/ =404;
}
# Настройка безопасности
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/(?:.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+).php(?:$|/) {
include fastcgi_params;
fastcgi_split_path_info ^(.+.php)(/.*)$;
try_files $fastcgi_script_name =404;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
# Избегать отправки заголовков безопасности дважды
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri/ =404;
index index.php;
}
# Добавление заголовка управления кэшем для файлов js и css
# Убедитесь, что он находится НИЖЕ блока PHP
location ~* .(?:css|js)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=7200";
# Добавляем заголовки связанные с безопасностью.
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;
# Optional: Don't log access to assets
access_log off;
}
# Настройка обработки для файлов данного типа
location ~* .(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
expires 6M; # Управление кэшем
access_log off; # Отключение логирования
}
# Настройки для обработки потокового видео
location ~ .(?:flv|mp4|mov|m4a)$ {
mp4;
mp4_buffer_size 20m;
mp4_max_buffer_size 40m;
fastcgi_split_path_info ^(.+.php)(/.)$;
try_files $fastcgi_script_name =404;
include fastcgi_params;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
expires max;
directio 10m;
limit_rate 1024m;
limit_rate_after 10m;
}
}
Адрес mynextcloud.ru измените на свой.
Далее создании ссылку на наш файл:
ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/
удаляем дефолтный файл конфигурации:
rm /etc/nginx/sites-enabled/default
Проверяем все ли мы правильно сделали:
nginx -t
Если ошибку нет, то перезапускаем nginx
service nginx restart
Настроим PHP для работы с NextCloud. В терминале набираем:
sudo nano /etc/php/8.2/fpm/php.ini
Находим и редактируем следующие строки:
max_execution_time = 300
max_input_time = 600
memory_limit = 512M
post_max_size = 20M
upload_max_filesize = 40M
# Настройка кэширования
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1
Сперва настроим наш PostgreSQL для прослушивания всех внутренних адресов сервера. Для этого открываем следующий файл:
sudo nano /etc/postgresql/14/main/postgresql.conf
Находим и приводим данную строчку к такому виду:
listen_addresses = '*'
Теперь можно создать нашу БД для NextCloud, а также создадим пользователя БД и пароль для него. Подключаемся к postgresql:
sudo -u postgres psql
Создаем базу данных и пользователя для nextcloud
CREATE DATABASE nextcloud; # создаем БД
CREATE USER usernxt WITH PASSWORD 'mypasswords'; # создаем пользователя и вводим пароль для него
ALTER DATABASE nextcloud OWNER TO usernxt;
GRANT ALL PRIVILEGES ON DATABASE nextcloud to usernxt;
exit
Далее переходим по адресу нашего сервера (локальному или внешнему например: http://mynextcloud.ru
) и видим первоначальную установку NextCloud
Из скриншота видим, что на самом верху нам предлагается придумать учетную запись и пароль администратора nextcloud.
Далее идет поле для выбора каталога с данными. Данное поле отвечает за размещение всех данных пользователей в директории на сервере. Я оставляю без изменений.
Последняя группа полей ответственна за подключение к базе данных. Чуть выше мы создавали и настраивали БД PostgreSQL, вот эти данные и вводим сюда. И нажимаем кнопку продолжить.
Если все сделали правильно, то после обновления окна нам будет предложено войти в свою учетную запись.
Замечание: В панели администратора в пункте общие сведения Вы можете наблюдать различные ошибки и предупреждения от системы. Как их устранить я писал тут.
На этом наша настройка домашнего облака NextCloud завершается. Всем удачи!!!
[endtxt]