Установка Nextcloud 18. Centos 8. Apache

  1. Установка ОС, первичная настройка.
  2. Установка Web сервера Apache, PHP, Mariadb.
  3. Создаем базу данных для Nextcloud, скачиваем Nextcloud
  4. Создаем виртуальный хост, завершаем установку.
  5. Устранение предупреждений безопасности. Настройка Nextcloud, SSL от let's encrypt.
  6. Fail2ban, Postfix для отправки уведомлений.
  7. Включение двухфакторной аутентификации. Дополнительный софт.

Скачать образ можно с официального сайта https://www.centos.org/download/ Там же можно выбрать зеркало для загрузки или скачать торрент. Загружаемся с нашего образа, записать на флешку можно с помощью rufus.ie. Далее выбираем первый пункт - установку.

После загрузки - первое окно -выбор языка - Русский- Россия.

Далее заходим в раздел сети

Переключаем ползунок на "вкл" - получим адрес по dhcp, далее пропишем статику.

Размечаем диск как вам удобно, у меня основной раздел стандартный, с файловой системой Ext4

Выбор программ - минимальная установка.

Начать установку, создаем пароль пользователя root и нового пользователя с паролем. Перезагружаемся.

Логинимся и проверяем какой Ip присвоился сетевому интерфейсу командой "Ip a"

terminal
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:08:33:6a brd ff:ff:ff:ff:ff:ff
inet 192.168.0.87/24 brd 192.168.0.255 scope global dynamic noprefixroute ens192
valid_lft 84657sec preferred_lft 84657sec
inet6 fe80::3c scope link noprefixroute
valid_lft forever preferred_lft forever
[root@localhost ~]#

И подключимся сразу по ssh под пользователем root, для этого под Windows я пользуюсь клиентом ssh Xshell6 есть бесплатная лицензия. Все пользователи группы wheel имеют права sudo, добавим нашего пользователя в группу wheel и переподключимся по ssh уже под нашим пользователем:

terminal
[root@localhost ~]# usermod -aG wheel user1
[root@localhost ~]#

Пропишем статический Ip адрес для удобства, пакетный менеджер теперь dnf, устанавливаю редактор nano, net-tools и отредактирую конфиг сетевого интерфейса, это рекомендуется сделать утилитой nmcli или nmtui (редактировать network-scripts теперь считается устаревшим).
Устанавливаем редактор nano:

terminal
[root@localhost ~]# dnf install nano
nano x86_64 2.9.8-1.el8 BaseOS 581 k

Устанавливаем net-tools и прописываем статический ip адрес.

terminal
[root@localhost ~]# dnf install net-tools
[root@localhost network-scripts]# nano /etc/sysconfig/network-scripts/ifcfg-ens192
GNU nano 2.9.8 /etc/sysconfig/network-scripts/ifcfg-ens192

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens192"
UUID="d276c649-6c1d-48f8-a725-43edf1c52484"
DEVICE="ens192"
ONBOOT="yes"
IPADDR="192.168.0.87"
PREFIX="24"
GATEWAY="192.168.0.1"
DNS1="192.168.0.1"

Сохраняем командой ctrl+o, enter. ctrl+x — выход

Сменим имя сервера:

terminal
[root@localhost user1]# hostnamectl set-hostname enk2x
[root@localhost user1]# exit

Отредактируем конфиг ssh сервера, сменим порт по умолчанию и отключим вход под root пользователем:

terminal
[root@enk2x user1]# nano /etc/ssh/sshd_config
Port 2223
Protocol 2
PermitRootLogin no

terminal
Проверяем firewall, удалим лишние правила:
[root@enk2x user1]# firewall-cmd --permanent --zone=public --add-port 2223/tcp
[root@enk2x user1]# firewall-cmd --reload
success
[root@enk2x user1]# firewall-cmd --permanent --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client ssh
ports: 2223/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@enk2x user1]#

Удаляем лишние порты - services: cockpit dhcpv6-client ssh

terminal
[root@enk2x user1]# firewall-cmd --permanent --zone=public --remove-service=cockpit
success
[root@enk2x user1]# firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
success
[root@enk2x user1]# firewall-cmd --permanent --zone=public --remove-service=ssh
success
[root@enk2x user1]#
[root@enk2x user1]# systemctl restart sshd
[root@enk2x user1]# firewall-cmd --reload
success
[root@enk2x user1]#

Для удобства отключу ввод пароля для sudo

terminal
[root@enk2x user1]# nano /etc/sudoers
## Same thing without a password(раскоментируйте строку ниже)
%wheel ALL=(ALL) NOPASSWD: ALL

selinux — на данном этапе отключаем (после отключения требуется перезагрузка ОС).  Позже разобравшись в настройке selinux можно включить и настроить для Nextcloud.

terminal
[root@enk2x user1]# nano /etc/selinux/config
SELINUX=disabled
[root@enk2x user1]#

Установим верный часовой пояс

terminal
[root@enk2x user1]# timedatectl set-timezone Europe/Moscow
[root@enk2x user1]# date
Пн апр 6 18:42:16 MSK 2020
[root@enk2x user1]# timedatectl
Local time: Пн 2020-04-06 18:42:23 MSK
Universal time: Пн 2020-04-06 15:42:23 UTC
RTC time: Пн 2020-04-06 15:42:23
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
[root@enk2x user1]#

Устанавливаем веб сервер Аpache, применение PHP-FPM и Nginx по сравнению со связкой Apahe и ModPHP может дать повышение производительности облачного хранилища до 20-25%. Для домашней установки с небольшим числом пользователей, подойдет и Apache.

terminal
[root@enk2x user1]# dnf install httpd
[root@enk2x user1]# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@enk2x user1]# systemctl start httpd
[root@enk2x user1]#

Добавим правила в firewall для 80 и 443 порта:

terminal
[root@enk2x user1]# firewall-cmd --permanent --zone=public --add-service=http
success
[root@enk2x user1]# firewall-cmd --permanent --zone=public --add-service=https
success
[root@enk2x user1]# firewall-cmd --reload
success
[root@enk2x user1]#

Проверяем работу перейдя по адресу сервера

Установим репозитории epel и remi:

terminal
[root@enk2x user1]# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
[root@enk2x user1]# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Проверим доступные версии PHP

terminal
[root@enk2x user1]# dnf module list php
Последняя проверка окончания срока действия метаданных: 0:03:34 назад, Пн 06 апр 2020 20:49:32.
CentOS-8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common, devel, minimal PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name Stream Profiles Summary
php remi-7.2 common [d], devel, minimal PHP scripting language
php remi-7.3 common [d], devel, minimal PHP scripting language
php remi-7.4 common [d], devel, minimal PHP scripting language

Подсказка: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[root@enk2x user1]#

Подключим модуль php:remi-7.4, после чего установим необходимые нам модули php

terminal
[root@enk2x user1]# dnf module enable php:remi-7.4
***
Включение потоков модулей:
php remi-7.4
Выполнено!
[root@enk2x user1]#

Смотрим список необходимых модулей на официальном сайте с документацией и можем просто скопировать все модули которые нужны для установки:

terminal
[root@enk2x user1]# dnf install php php-ctype php-curl php-dom php-gd php-iconv php-json php-libxml php-mbstring php-openssl php-posix php-session php-simplexml php-xmlreader php-xmlwriter php-zip php-zlib php-pdo_mysql php-fileinfo php-bz2 php-intl php-exif php-imagick php-apcu php-memcached

Полный вывод установки php

Проверим установленную версию PHP

terminal
[root@enk2x user1]# php -v
PHP 7.4.4 (cli) (built: Mar 17 2020 10:40:21) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.4, Copyright (c), by Zend Technologies
[root@enk2x user1]#

Список модулей можно проверить командой php -m

Устанавливаем MariaDB. Что бы установить актуальную версию (на данный момент 10.4), по ссылке идем на официальный сайт и выбираем свой дистрибутив и выполняем инструкцию:

terminal
[root@enk2x user1]# nano /etc/yum.repos.d/MariaDB.repo
# MariaDB 10.4 CentOS repository list - created 2020-04-06 18:55 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos8-amd64
module_hotfixes=1
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Или устанавливаем ту, что есть в официальном репозитории, но с версией 10.2 и ниже - вы получите предупреждение после установки о том, что  не поддерживаются 4-байтовые символы.

terminal
[root@enk2x user1]# dnf install MariaDB-server
Полный вывод установки MariaDB

[root@enk2x user1]# systemctl enable mariadb
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
[root@enk2x user1]# systemctl start mariadb
[root@enk2x user1]#

Запуск сценария безопасности:

terminal
[root@enk2x user1]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
[root@enk2x user1]#

Создаем базу данных для Nextcloud, для ее создания логинимся под root пользователем и вводим следующую информацию, вместо "password" — указываем новый пароль для пользователя этой БД:

terminal
[root@enk2x user1]# mysql -u root -p
Enter password:

CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON nextcloud.* TO 'nextclouduser'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

Запоминаем данные БД, они нам понадобятся
Скачиваем Nextcloud (C новой версией изменится  адрес ссылки для загрузки, ищем тогда на оф.сайте https://nextcloud.com)

terminal
[root@enk2x user1]# dnf install wget
[root@enk2x user1]# wget https://download.nextcloud.com/server/releases/nextcloud-18.0.3.zip

Устанавливаем архиватор и распаковываем архив

terminal
[root@enk2x user1]# dnf install zip
[root@enk2x user1]# unzip nextcloud-18.0.3.zip
[root@enk2x user1]# ls
nextcloud nextcloud-18.0.3.zip
[root@enk2x user1]#

Копируем в корень сайта

terminal
[root@enk2x user1]# cp -R nextcloud/ /var/www/html/
[root@enk2x user1]#

Сменим владельца  директории:

terminal
[root@enk2x ~]# cd /var/www/html/
[root@enk2x html]# ls -l
итого 4
drwxr-xr-x 13 root root 4096 апр 7 12:34 nextcloud
[root@enk2x html]# chown -R apache:apache nextcloud/
[root@enk2x html]# ls -l
итого 4
drwxr-xr-x 13 apache apache 4096 апр 7 12:34 nextcloud
[root@enk2x html]#

Создадим директорию для данных, изменим владельца (Директорию с данными лучше вынести за пределы директории с сайтом):

terminal
[root@enk2x /]# cd /home
[root@enk2x home]# mkdir nc
[root@enk2x home]#chown -R apache:apache nc

Далее потребуется зарегистрировать домен, если у вас еще нет домена - регистрация и управление dns рассматривалось в предыдущей инструкции

Создаем виртуальный хост.
Создадим директории для более удобного включения виртульных хостов:

terminal
[root@enk2x home]# mkdir /etc/httpd/sites-available
[root@enk2x home]# mkdir /etc/httpd/sites-enabled
[root@enk2x home]# nano /etc/httpd/conf/httpd.conf
#Вконец добавляем строку
IncludeOptional sites-enabled/*.conf

Создаем конфиг виртуального хоста:

terminal
[root@enk2x home]# nano /etc/httpd/sites-available/nextcloud.conf
<VirtualHost *:80>
DocumentRoot /var/www/html/nextcloud/
ServerName enk2x.site

<Directory "/var/www/html/nextcloud">
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
</Directory>
</VirtualHost>

Для включения нужно создать символьную ссылку для хоста в каталоге sites-enabled:

terminal
[root@enk2x home]# ln -s /etc/httpd/sites-available/nextcloud.conf /etc/httpd/sites-enabled/nextcloud.conf
[root@enk2x home]#

Перезагружаем конфигурацию веб сервера

terminal
[root@enk2x home]# systemctl reload httpd
[root@enk2x home]#

В браузере переходим по адресу нашего сервера http://192.168.0.87/ И заполняем поля, жмем "Завершить установку"

Далее произойдет доустановка рекомендуемых приложений и откроется главное меню.

Перейдем в настройки - личная информация - заполнить адрес электронной почты и выбрать региональные стандарты, остальные поля по желанию.

Переходим в пункт «Основные параметры» заполняем поля Почтовый сервер.
Способ отправки SMTP, шифрование SSL/TLS
Адрес отправителя хххх@domain.ru (Выберите адрес с которого будут приходить уведомления)
Метод проверки подлинности Логин -ставим галочку «Требуется аутентификация»
Адрес сервера smtp.yandex.ru: 465
Учетные данные login (полностью с доменом после @ ) password(Ваш пароль) — жмем сохранить учетные данные. (Учетные данные для входа в Яндекс).
Отправить сообщение. Проверяем письмо на почте.

В этом же разделе меняем метод выполнения фоновых задач на Cron

terminal
[root@enk2x ~]# sudo crontab -u apache -e
*/15 * * * * php -f /var/www/html/nextcloud/cron.php

[root@enk2x ~]# sudo crontab -u apache -l
*/15 * * * * php -f /var/www/html/nextcloud/cron.php
[root@enk2x ~]#

Далее переходим в пункт меню "Общие сведения". Видим несколько предупреждений безопасности:
Предупреждения о текущей конфигурации.

  • Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ.
  • Используется небезопасное соединение по протоколу HTTP. Настоятельно рекомендуется настроить сервер на использование HTTPS согласно нашим подсказкам по безопасности ↗.
  • Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробная информация доступна в документации.
  • В базе данных отсутствуют некоторые индексы. Так как создание таких индексов может занять достаточно продолжительное время, оно должно быть запущено вручную. Для создания индексов необходимо запустить команду «occ db:add-missing-indices» во время работы сервера Nextcloud. При созданных индексах, как правило, запросы к базе данных выполняются значительно быстрее.
    • В таблице «oc_calendarobjects_props» отсутствует индекс «calendarobject_calid_index».
    • В таблице «oc_schedulingobjects» отсутствует индекс «schedulobj_principuri_index».
  • Некоторые индексы базы данных не были преобразованы в тип big int. Так как преобразование таких индексов может занять продолжительное время, оно должно быть запущенно вручную. Чтобы выполнить преобразование, необходимо включить режим обслуживания и запустить в терминале команду «occ db:convert-filecache-bigint». Дополнительные сведения приведены на соответствующей странице документации.
    • mounts.storage_id
    • mounts.root_id
    • mounts.mount_id

Ещё раз внимательно прочитайте руководство по установке ↗ и проверьте журнал на наличие ошибок и предупреждений.Проверить безопасность Nextcloud нашим сканером ↗.

1. Разрешённое максимальное значение использования памяти PHP ниже рекомендуемого значения в 512 МБ.

Добавить нужно последние 3 строки в файл user.ini в директории nextcloud, будет выглядеть так:

terminal
[root@enk2x user1]# nano /var/www/html/nextcloud/.user.ini
mbstring.func_overload=0
always_populate_raw_post_data=-1
default_charset='UTF-8'
output_buffering=0
memory_limit = 1024M
upload_max_filesize = 16000M
max_file_uploads = 1000

2. Используется небезопасное соединение по протоколу HTTP. Настоятельно рекомендуется настроить сервер на использование HTTPS.

Здесь нам потребуется ssl сертификат для вашего домена, если сертификата нет, то рассмотрим как получить его от Let’s Encrypt:
Установим mod_ssl

terminal
[root@enk2x private]# dnf install mod_ssl

Отредактируем наш конфиг виртуального хоста.

terminal
[root@enk2x user1]# nano /etc/httpd/sites-available/nextcloud.conf

<Directory "/var/www/html/nextcloud">
AllowOverride All
Options +FollowSymlinks
<IfModule mod_dav.c>
Dav off
</IfModule>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header set Feature-Policy "geolocation 'none'; midi 'none'; microphone 'none'; camera 'none';
</IfModule>
SetEnv HOME /var/www/html/nextcloud
SetEnv HTTP_HOME /var/www/html/nextcloud
</Directory>

<VirtualHost *:443>
ServerName enk2x.site
ServerAdmin admin@enk2x.ru

DocumentRoot /var/www/html/nextcloud
#ErrorLog /var/log/httpd/nextcloud-error.log
#CustomLog /var/log/httpd/nextcloud-access.log combined
</VirtualHost>

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/html/nextcloud
ServerName enk2x.site
ServerAdmin admin@enk2x.ru

Redirect permanent / https://enk2x.site
</VirtualHost>

Установим certbot(certbot.eff.org - инструкция по установке certbot в репозиториях centos 8 его к сожалению пока нет.):

terminal
[root@enk2x user1]# wget https://dl.eff.org/certbot-auto
[root@enk2x user1]# mv certbot-auto /usr/local/bin/certbot-auto
[root@enk2x user1]# chown root /usr/local/bin/certbot-auto
[root@enk2x user1]# chmod 0755 /usr/local/bin/certbot-auto
[root@enk2x user1]# sudo /usr/local/bin/certbot-auto --apache

Если посмотреть полный вывод команды (certbot-auto --apache), то в конце certbot не может установить сертификат так как нет дефолтных ssl сертификатов. Подкинем самоподписной:

terminal
[root@enk2x private]# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/private/localhost.key -out /etc/ssl/certs/localhost.crtGenerating a RSA private key
++
writing new private key to '/etc/pki/tls/private/localhost.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
[root@enk2x private]#
[root@enk2x httpd]# systemctl restart httpd

Пробуем повторно:

terminal
[root@enk2x private]# sudo /usr/local/bin/certbot-auto --apache

Полный вывод получения сертификата

Сертификат мы получили, скрипт прописал путь в конфиг нашего виртуального хоста, зайдем и проверим:

terminal
[root@enk2x httpd]# nano /etc/httpd/sites-available/nextcloud.conf
***
SSLCertificateFile /etc/letsencrypt/live/enk2x.site/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/enk2x.site/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
***
Добавились 3 строчки с путями до сертификатов и дефолтный конфиг с опциями для SSL

Для настройки автоматического продления сертификата (выдаются на 3 месяца) необходимо добавить строку в crontab

terminal
[root@enk2x ~]# crontab -e
30 15 * * 1 /usr/local/bin/certbot-auto renew >> /home/user1/le-renew.log

Каждый понедельник в 15 30 будет производится запрос на проверку сертификата, лог запросов посмотреть можно в файле /home/user1/le-renew.log

Далее необходимо наш домен добавить в доверенные для входа в наше облако, или получим такую ошибку при попытке зайти по домену enk2x.site:
Доступ через недоверенный домен
Обратитесь к администратору. Если вы являетесь администратором этого сервера, отредактируйте параметр «trusted_domains» в файле «config/config.php». Пример настройки можно найти в файле «config/config.sample.php».

terminal
[root@enk2x httpd]# cd
[root@enk2x ~]# nano /var/www/html/nextcloud/config/config.php
***
'trusted_domains' =>
array (
0 => '192.168.141.88',
1 => 'enk2x.site',
),
***

3. Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache.

terminal
[root@enk2x ~]# nano /var/www/html/nextcloud/config/config.php
***
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.local' => '\OC\Memcache\APCu',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),
***
);
Устанавливаем Redis:
terminal
[root@enk2x user1]# dnf install php-redis
[root@enk2x user1]# dnf install redis
[root@enk2x user1]# systemctl enable redis
[root@enk2x user1]# systemctl start redis
[root@enk2x user1]# systemctl restart httpd
В официальной документации есть информация по кэшированию памяти- ссылка

4. В базе данных отсутствуют некоторые индексы. Так как создание таких индексов может занять достаточно продолжительное время, оно должно быть запущено вручную. Для создания индексов необходимо запустить команду «occ db:add-missing-indices» во время работы сервера Nextcloud. При созданных индексах, как правило, запросы к базе данных выполняются значительно быстрее.

  • В таблице «oc_calendarobjects_props» отсутствует индекс «calendarobject_calid_index».
  • В таблице «oc_schedulingobjects» отсутствует индекс «schedulobj_principuri_index».
terminal
[root@enk2x user1]# sudo -u apache php /var/www/html/nextcloud/occ db:add-missing-indices
Check indices of the share table.
Check indices of the filecache table.
Check indices of the twofactor_providers table.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Check indices of the cards table.
Check indices of the cards_properties table.
Check indices of the calendarobjects_props table.
Adding calendarobject_calid_index index to the calendarobjects_props table, this can take some time...
calendarobjects_props table updated successfully.
Check indices of the schedulingobjects table.
Adding schedulobj_principuri_index index to the schedulingobjects table, this can take some time...
schedulingobjects table updated successfully.
[root@enk2x user1]#

5. Некоторые индексы базы данных не были преобразованы в тип big int. Так как преобразование таких индексов может занять продолжительное время, оно должно быть запущенно вручную. Чтобы выполнить преобразование, необходимо включить режим обслуживания и запустить в терминале команду «occ db:convert-filecache-bigint». Дополнительные сведения приведены на соответствующей странице документации.

  • mounts.storage_id
  • mounts.root_id
  • mounts.mount_id
terminal
[root@enk2x user1]# sudo -u apache php /var/www/html/nextcloud/occ maintenance:mode --on
Maintenance mode enabled
[root@enk2x user1]# sudo -u apache php /var/www/html/nextcloud/occ db:convert-filecache-bigint
Nextcloud is in maintenance mode - no apps have been loaded
Following columns will be updated:
* mounts.storage_id
* mounts.root_id
* mounts.mount_id
This can take up to hours, depending on the number of files in your instance!
Continue with the conversion (y/n)? [n] y
[root@enk2x user1]#
[root@enk2x user1]# sudo -u apache php /var/www/html/nextcloud/occ maintenance:mode --off
Maintenance mode disabled
[root@enk2x user1]#

Установим Fail2ban

Описывать подробно как работает fail2ban не буду, есть множество статей в интернете, остановимся на основной настройке:
fail2ban.conf - пример выполнения основных настроек программы;
jail.conf - пример настройки запрещающих правил;
jail.d - папка с конфигурационными файлами пользователя, для настройки правил запрета;
action.d - файлы, в которых описываются действия, выполняемые при блокировке;
filter.d - в этих файлах описываются способы разбора журналов программ для поиска неудачных попыток входа.

Устанавливаем и запускаем Fail2ban:

terminal
[root@enk2x user1]# dnf install fail2ban
[root@enk2x user1]# systemctl enable fail2ban
Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /usr/lib/systemd/system/fail2ban.service.
[root@enk2x user1]# systemctl start fail2ban
[root@enk2x user1]#

Создадим свой файл конфигурации настройки правил:
ignoreip = 192.168.0.1 190.11.25.27 192.168.2.0/24 - адреса или подсети которые будет игнорировать fail2ban, через пробел
bantime = 100m - Время бана по умолчанию в минутах
findtime = 30m – время между попытками
maxretry = 3 – число попыток
destemail = admin@domain.ml - адрес для отправки уведомлений
sender = admin@domain.ml – адрес с которого отправляются уведомления
action = %(action_mw)s - Какое из действий выполнить, (в данном случае забанить и отправить email)

terminal
[root@enk2x user1]# nano /etc/fail2ban/jail.local

[INCLUDES]
before = paths-fedora.conf
[DEFAULT]
ignoreip = 192.168.0.1 192.168.0.101 192.168.1.0/24
ignorecommand =
bantime = 3360000
findtime = 3600
maxretry = 2
maxmatches = %(maxretry)s
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(__name__)s[mode=%(mode)s]
destemail = admin@enk2x.ru
sender = fail2ban@enk2x.ru
mta = sendmail
protocol = tcp
chain = INPUT
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports

%(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]

action_xarf = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath="%(logpath)s", port="%(port)s"]

action_cf_mwl = cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"]
%(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]

action_blocklist_de = blocklist_de[email="%(sender)s", service=%(filter)s, apikey="%(blocklist_de_apikey)s", agent="%(fail2ban_agent)s"]

action_badips = badips.py[category="%(__name__)s", banaction="%(banaction)s", agent="%(fail2ban_agent)s"]

action_badips_report = badips[category="%(__name__)s", agent="%(fail2ban_agent)s"]

action_abuseipdb = abuseipdb
action = %(action_mwl)s

[sshd]

enabled = true
findtime = 4800
maxretry = 2
bantime = 2592000
port = 44888
backend = %(sshd_backend)s

[nextcloud]
enabled = true
filter = nextcloud
protocol = tcp
port = http,https
logpath = %(nextcloud_log)s
bantime = 2592000
findtime = 3800
maxretry = 2

[apache-auth]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 2

[apache-badbots]
enabled = true
port = http,https
logpath = %(apache_access_log)s
bantime = 2592000
maxretry = 1

[apache-noscript]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 5

[apache-overflows]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 2

[apache-nohome]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 2

[apache-botsearch]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 2

[apache-fakegooglebot]
enabled = true
port = http,https
logpath = %(apache_access_log)s
maxretry = 1
ignorecommand = %(ignorecommands_dir)s/apache-fakegooglebot <ip>

[apache-modsecurity]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 2

Настроим фильтр для nextcloud:

terminal
[root@enk2x user1]# nano /etc/fail2ban/filter.d/nextcloud.conf

[Definition]
failregex = ^{"reqId":".*","remoteAddr":".*","app":"core","message":"Login failed: '.*' \(Remote IP: '&amp;amp;amp;amp;amp;amp;lt;HOST&amp;amp;amp;amp;amp;amp;gt;'\)","level":2,"time":".*"}$
            ^{"reqId":".*","level":2,"time":".*","remoteAddr":".*","app":"core".*","message":"Login failed: '.*' \(Remote IP: '&amp;amp;amp;amp;amp;amp;lt;HOST&amp;amp;amp;amp;amp;amp;gt;'\)".*}$
            ^{"reqId":".*","level":2,"time":".*","remoteAddr":".*","user":".*","app":".*","method":".*","url":".*","message":"Login failed: .* \(Remote IP: &amp;amp;amp;amp;amp;amp;lt;HOST&amp;amp;amp;amp;amp;amp;gt;\).*}$
ignoreregex =

Укажем путь до файла логов Nextcloud(добавляем в конец файла, строки):

terminal
[root@enk2x user1]# nano /etc/fail2ban/paths-common.conf
***
#Nextcloud
nextcloud_log = /home/nc/data/nextcloud.log
[root@enk2x user1]#

Проверить можно командой(предварительно введя несколько раз неудачно пароль):

terminal
[root@enk2x user1]# fail2ban-regex /home/nc/data/nextcloud.log /etc/fail2ban/filter.d/nextcloud.conf
Running tests
***
Lines: 1508 lines, 0 ignored, 8 matched, 1500 missed
[processed in 0.11 sec]
[root@enk2x user1]#

При попытке перейти в браузере:

Проверяем список заблокированных адресов правилом "nextcloud" и включенные правила:

terminal
[root@enk2x user1]# fail2ban-client status nextcloud
Status for the jail: nextcloud
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /home/nc/data/nextcloud.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 192.168.0.11
[root@enk2x user1]#

Список активных джейлов:

terminal
[root@enk2x user1]# fail2ban-client status
Status
|- Number of jail: 10
`- Jail list: apache-auth, apache-badbots, apache-botsearch, apache-fakegooglebot, apache-modsecurity, apache-nohome, apache-noscript, apache-overflows, nextcloud, sshd
[root@enk2x user1]#

Разбаним наш Ip адрес:

terminal
[root@enk2x user1]# fail2ban-client set nextcloud unbanip 192.168.0.11
1
[root@enk2x user1]#


Настройка Postfix для отправки уведомлений о блокировке fail2ban через smtp серверы яндекса - здесь

Включим двухфакторную аутентификацию.
Переходим в раздел "Приложения" > "Безопасность" > "Two-Factor TOTP Provider" устанавливаем. Переходим в раздел Настройки > Администрирование > Безопасность>Двухфакторная аутентификация > Требовать двухфакторную аутентификацию > Сохранить. Переходим в Личное > Безопасность > Включить TOTP. Далее на смартфон скачиваем Google Authenticator из него сканируем штрих-код. Теперь при входе необходима ввести дополнительный код из Google Authenticator.

Утилиты которые могут пригодиться в процессе обслуживания:
htop — диспетчер процессов.
iftop — показывает активные сетевые соединения
lm_sensors — температура процессора
lsof — выводит информацию о файлах которые ипользуются процессами.
Traceroute (tracepath)— маршрут до узла.
Nmap — сканер портов
wget — менеджер закачки
bzip2 — архиватор
whois — сервис предоставляющий информацию о доменах, ip адресах
mc — файловый менеджер

На этом основная настройка выполнена.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *