nextcloud 17 + debian 10 (buster)

Ebből a leírásból megtudhatod, hogy hogyan telepítsd a NextClud 17 szolgáltatást Debian 10 alapokra. Vágjunk bele, készítsünk saját Clud Servert. A telepítést egy teljesen alap Debian 10 rendszeren kezdjük, amin csak az alapok lettek beállítva, mint például a hostnév.

MariaDB telepítése

Először is a MariaDB tárolóját fogjuk felvenni a rendszerünkbe. A download.mariadb.org weboldalon találjuk meg, hogy a különböző Distribúciók esetén, milyen módon tudjuk ezt megtenni. A mi esetünkben ez a következő

apt-get install software-properties-common dirmngr
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64] http://mirror2.hs-esslingen.de/mariadb/repo/10.4/debian buster main'

Ezzel meg is vagyunk, most telepítsük fel a szerverünkre az adatbázis kezelő rendszert:

apt update
apt install mariadb-server

Konfiguráljuk újra a beállításokat és növeljük a biztonságot:

mysql_secure_installation

A kérdésekre adandó válaszok:

Enter current password for root (enter for none):
Switch to unix_socket authentication [Y/n] y
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

Konfiguráljuk újra a szerver működését, optimalizáljuk a NextCloud használatára, azonban előtte mentsük el az eredeti konfigurációs állományt:

service mysql stop
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak && nano /etc/mysql/my.cnf

Az új my.cnf tartalma legyen a következő:

[client]
default-character-set = utf8mb4
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld_safe]
log_error = /var/log/mysql/mysql_error.log
nice = 0
socket = /var/run/mysqld/mysqld.sock

[mysqld]
basedir = /usr
bind-address = 127.0.0.1
binlog_format = ROW
bulk_insert_buffer_size = 16M
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
concurrent_insert = 2
connect_timeout = 5
datadir = /var/lib/mysql
default_storage_engine = InnoDB
expire_logs_days = 7
general_log_file = /var/log/mysql/mysql.log
general_log = 0
innodb_buffer_pool_size = 1024M
innodb_buffer_pool_instances = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 32M
innodb_max_dirty_pages_pct = 90
innodb_file_per_table = 1
innodb_open_files = 400
innodb_io_capacity = 4000
innodb_flush_method = O_DIRECT
key_buffer_size = 128M
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
log_error=/var/log/mysql/mysql_error.log
log_slow_verbosity = query_plan
log_warnings = 2
long_query_time = 1
max_allowed_packet = 16M
max_binlog_size = 100M
max_connections = 200
max_heap_table_size = 64M
myisam_recover_options = BACKUP
myisam_sort_buffer_size = 512M
port = 3306
pid-file = /var/run/mysqld/mysqld.pid
query_cache_limit = 2M
query_cache_size = 64M
query_cache_type = 1
query_cache_min_res_unit = 2k
read_buffer_size = 2M
read_rnd_buffer_size = 1M
skip-external-locking
skip-name-resolve
slow_query_log_file = /var/log/mysql/mariadb-slow.log
slow-query-log = 1
socket = /var/run/mysqld/mysqld.sock
sort_buffer_size = 4M
table_open_cache = 400
thread_cache_size = 128
tmp_table_size = 64M
tmpdir = /tmp
transaction_isolation = READ-COMMITTED
user = mysql
wait_timeout = 600

[mysqldump]
max_allowed_packet = 16M
quick
quote-names

[isamchk]
!include /etc/mysql/mariadb.cnf
!includedir /etc/mysql/conf.d/
key_buffer = 16M

Indítsuk újra a szolgáltatást:

service mysql restart

Hozzuk létre a nextcloud adatbázist, természetesen az adatbázis felhasználó jelszavát változtassuk meg tetszés szerint:

mysql -uroot -p -e "CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER nextcloud@localhost identified by 'nextcloud'; GRANT ALL PRIVILEGES on nextcloud.* to nextcloud@localhost; FLUSH privileges;"

Nagyon fontos, hogy az adatbázis támogassa az utf8mb4 karaktereket. A nextcloud már jó ideje megkívánja ezt a beállítást, ellenőrizzük le, hogy helyes-e a beállításunk:

mysql -h localhost -uroot -p -e "SELECT @@TX_ISOLATION; SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='nextcloud'"

Akkor dolgoztunk jól, ha az alábbi kimenetet kapjuk:

+----------------+
| @@TX_ISOLATION |
+----------------+
| READ-COMMITTED |
+----------------+
+-----------+---------+--------------------+
| database  | charset | collation          |
+-----------+---------+--------------------+
| nextcloud | utf8mb4 | utf8mb4_general_ci |
+-----------+---------+--------------------+

Apache2, PHP és Redis-Server

Telepítsük az alábbi csomagokat:

apt install libapache2-mod-php7.3 php7.3-cli php7.3-common php7.3-mbstring php7.3-gd php7.3-intl php7.3-xml php7.3-mysql php7.3-zip php7.3-dev php7.3-curl php7.3-fpm php7.3-json php7.3-bz2 php7.3-ldap php-dompdf php-apcu imagemagick php-imagick php-smbclient redis-server php-redis unzip sudo curl -y

A PHP aktuális verzóját php-fpm szolgáltatással akarjuk használni, így a modulként való futtatást tiltani-, míg a php-fpm futtatásához szükséges modulokat engedélyezni kell, majd az Apache webszervert újraindítjuk a módosítások érvényesítéséhez:

a2dismod php7.3 && a2dismod mpm_prefork && a2enmod proxy_fcgi setenvif mpm_event && service apache2 restart
a2enconf php7.3-fpm && service apache2 restart

Abban az esetben, ha a Redis szervert csak lokálisan akarjuk használni, érdemes unix socket módban használni, mivel a rendszer így közvetlen használhatja a szolgáltatást és nem terheljük a csomagszűrő mechanizmust. Ezért adjuk ki a következő utasításokat:

cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
sed -i "s/port 6379/port 0/" /etc/redis/redis.conf
sed -i s/\#\ unixsocket/\unixsocket/g /etc/redis/redis.conf
sed -i "s/unixsocketperm 700/unixsocketperm 770/" /etc/redis/redis.conf 
sed -i "s/# maxclients 10000/maxclients 512/" /etc/redis/redis.conf
usermod -aG redis www-data
cp /etc/sysctl.conf /etc/sysctl.conf.bak && sed -i '$avm.overcommit_memory = 1' /etc/sysctl.conf

Modulok engedélyezése:

a2enmod rewrite headers env dir mime && service apache2 restart

PHP finomhangolása

A Nextcloud igényel a php szolgáltatás részéről némi finomhangolást, mentsük-, majd nyissuk meg a konfigurációs állományokat és végezzük el a szükséges beállításokat:

cp /etc/php/7.3/fpm/pool.d/www.conf /etc/php/7.3/fpm/pool.d/www.conf.bak
cp /etc/php/7.3/cli/php.ini /etc/php/7.3/cli/php.ini.bak
cp /etc/php/7.3/fpm/php.ini /etc/php/7.3/fpm/php.ini.bak
cp /etc/php/7.3/fpm/php-fpm.conf /etc/php/7.3/fpm/php-fpm.conf.bak
sed -i "s/;env\[HOSTNAME\] = /env[HOSTNAME] = /" /etc/php/7.3/fpm/pool.d/www.conf
sed -i "s/;env\[TMP\] = /env[TMP] = /" /etc/php/7.3/fpm/pool.d/www.conf
sed -i "s/;env\[TMPDIR\] = /env[TMPDIR] = /" /etc/php/7.3/fpm/pool.d/www.conf
sed -i "s/;env\[TEMP\] = /env[TEMP] = /" /etc/php/7.3/fpm/pool.d/www.conf
sed -i "s/;env\[PATH\] = /env[PATH] = /" /etc/php/7.3/fpm/pool.d/www.conf
sed -i "s/pm.max_children = .*/pm.max_children = 240/" /etc/php/7.3/fpm/pool.d/www.conf
sed -i "s/pm.start_servers = .*/pm.start_servers = 20/" /etc/php/7.3/fpm/pool.d/www.conf
sed -i "s/pm.min_spare_servers = .*/pm.min_spare_servers = 10/" /etc/php/7.3/fpm/pool.d/www.conf
sed -i "s/pm.max_spare_servers = .*/pm.max_spare_servers = 20/" /etc/php/7.3/fpm/pool.d/www.conf
sed -i "s/;pm.max_requests = 500/pm.max_requests = 500/" /etc/php/7.3/fpm/pool.d/www.conf
sed -i "s/output_buffering =.*/output_buffering = 'Off'/" /etc/php/7.3/cli/php.ini
sed -i "s/max_execution_time =.*/max_execution_time = 1800/" /etc/php/7.3/cli/php.ini
sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/7.3/cli/php.ini
sed -i "s/post_max_size =.*/post_max_size = 10240M/" /etc/php/7.3/cli/php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/7.3/cli/php.ini
sed -i "s/max_file_uploads =.*/max_file_uploads = 100/" /etc/php/7.3/cli/php.ini
sed -i "s/;date.timezone.*/date.timezone = Europe\/\Berlin/" /etc/php/7.3/cli/php.ini
sed -i "s/;session.cookie_secure.*/session.cookie_secure = True/" /etc/php/7.3/cli/php.ini
sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php/7.3/fpm/php.ini
sed -i "s/output_buffering =.*/output_buffering = 'Off'/" /etc/php/7.3/fpm/php.ini
sed -i "s/max_execution_time =.*/max_execution_time = 1800/" /etc/php/7.3/fpm/php.ini
sed -i "s/max_input_time =.*/max_input_time = 3600/" /etc/php/7.3/fpm/php.ini
sed -i "s/post_max_size =.*/post_max_size = 10240M/" /etc/php/7.3/fpm/php.ini
sed -i "s/upload_max_filesize =.*/upload_max_filesize = 10240M/" /etc/php/7.3/fpm/php.ini
sed -i "s/max_file_uploads =.*/max_file_uploads = 100/" /etc/php/7.3/fpm/php.ini
sed -i "s/;date.timezone.*/date.timezone = Europe\/\Budapest/" /etc/php/7.3/fpm/php.ini

# Csak SSL mellett
#sed -i "s/;session.cookie_secure.*/session.cookie_secure = True/" /etc/php/7.3/fpm/php.ini

sed -i "s/;opcache.enable=.*/opcache.enable=1/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.enable_cli=.*/opcache.enable_cli=1/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.memory_consumption=.*/opcache.memory_consumption=128/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.interned_strings_buffer=.*/opcache.interned_strings_buffer=8/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.max_accelerated_files=.*/opcache.max_accelerated_files=10000/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.revalidate_freq=.*/opcache.revalidate_freq=1/" /etc/php/7.3/fpm/php.ini
sed -i "s/;opcache.save_comments=.*/opcache.save_comments=1/" /etc/php/7.3/fpm/php.ini
sed -i '$aapc.enable_cli=1' /etc/php/7.3/mods-available/apcu.ini
sed -i "s/;emergency_restart_threshold =.*/emergency_restart_threshold = 10/" /etc/php/7.3/fpm/php-fpm.conf
sed -i "s/;emergency_restart_interval =.*/emergency_restart_interval = 1m/" /etc/php/7.3/fpm/php-fpm.conf
sed -i "s/;process_control_timeout =.*/process_control_timeout = 10s/" /etc/php/7.3/fpm/php-fpm.conf
sed -i "s/09,39.*/# &/" /etc/cron.d/php
(crontab -l ; echo "09,39 * * * * /usr/lib/php/sessionclean 2>&1") | crontab -u root -

Nextcloud aktuális verziójának telepítése

Ez esetben az Apache alapértelmezés szerint létrehozott könyvtárába telepítjuk a szolgáltatást:

cd /var/www/html
wget https://download.nextcloud.com/server/releases/latest.zip

Kitömörítjük az állományt, beállítjuk a jogosultságokat, majd töröljük a tömörített állományt:

unzip latest.zip && mv nextcloud/ /var/www/html/ && chown -R www-data:www-data /var/www/html/nextcloud && rm -f latest.zip

Apache modulok engedélyezése:

a2enmod rewrite headers env dir mime && service apache2 restart

Vhost beállítás:

Hozzuk létre a konfigurációs állományt, az alábbi tartalommal:

nano /etc/apache2/sites-available/001-nextcloud.conf
<VirtualHost *:80>
ServerName zsoltina.eu <--A saját domain neved legyen!!
ServerAdmin albert@vanyi.eu
DocumentRoot /var/www/html/nextcloud/

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

<Directory /var/www/html/nextcloud/>
Options +FollowSymlinks
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/html/nextcloud
SetEnv HTTP_HOME /var/www/html/nextcloud
</Directory>
</VirtualHost>

Engedélyezzük a szolgáltatást:

a2ensite 001-nextcloud.conf && service apache2 restart

Most jöhet az ssl titkosítás beállítása:

apt install python-certbot-apache -y

Majd kérjünk egy tanúsítványt. A parancs kérni fog egy email címet, ahová a szolgáltató a rendszer üzeneteit küldheti, ki kell választanunk a felismert domain nevünket, valamint ha akarjuk a rendszer automatikusan a 80 -as portra érkező kéréseket átirányítja a 443 -as portra és legenerálja az Apache konfigurációs állományait ehhez.

certbot --apache

Nyissuk meg az ssl -re vonatkozó Apache konfigurációt:

nano /etc/apache2/sites-available/001-nextcloud-le-ssl.conf

Majd egészítsük ki a következő beállításokkal a VirtualHost szekción belől:

[...]
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15768000; preload"
</IfModule>
[...]

Ezt a beállítást a VirtualHost szekción kívül

</VirtualHost>
[...]
SSLSessionTickets off
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache shmcb:/var/run/ocsp(128000)
SSLOpenSSLConfCmd Curves X448:secp521r1:secp384r1:prime256v1
SSLOpenSSLConfCmd ECDHParameters secp384r1
SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
[...]
</IfModule>

Ezután generáljuk le a pem fájlt, legyünk türelmesek, mivel erőforrástól függően ez a folyamat jó ideig eltarthat:

openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Érdemes a NextCloud gyökérkönyvtárától eltérő elérési úton tárolni az adatokat, ezért hozzunk létre egy új könyvtárat:

mkdir -p /var/nc_data
chown -R www-data:www-data /var/nc_data

Mostmár megnyithatjuk a böngészőt a beállított url szerint és hajtsuk végre a telepítést, ehhez adjuk meg az alábbi adatokat a grafikus felületen:

Felhasználói név megadása
Jelszó megadása
Az adatok elérési könyvtára
adatbázis név
adatbázis felhasználói neve
felhasználó jelszava
kiszolgáló

Módosítsuk a .htaccess fájlt:

nano /var/www/html/nextcloud/.htaccess

Adjuk hozzá a következő sorokat:

[...]
ErrorDocument 403 //
ErrorDocument 404 //
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteRule ^core/js/oc.js$ index.php [PT,E=PATH_INFO:$1]
RewriteRule ^core/preview.png$ index.php [PT,E=PATH_INFO:$1]
RewriteCond %{REQUEST_FILENAME} !\.(css|js|svg|gif|png|html|ttf|woff2?|ico|jpg|jpeg)$
RewriteCond %{REQUEST_FILENAME} !core/img/favicon.ico$
RewriteCond %{REQUEST_FILENAME} !core/img/manifest.json$
RewriteCond %{REQUEST_FILENAME} !/remote.php
RewriteCond %{REQUEST_FILENAME} !/public.php
RewriteCond %{REQUEST_FILENAME} !/cron.php
RewriteCond %{REQUEST_FILENAME} !/core/ajax/update.php
RewriteCond %{REQUEST_FILENAME} !/status.php
RewriteCond %{REQUEST_FILENAME} !/ocs/v1.php
RewriteCond %{REQUEST_FILENAME} !/ocs/v2.php
RewriteCond %{REQUEST_FILENAME} !/robots.txt
RewriteCond %{REQUEST_FILENAME} !/updater/
RewriteCond %{REQUEST_FILENAME} !/ocs-provider/
RewriteCond %{REQUEST_URI} !^/\.well-known/(acme-challenge|pki-validation)/.*
RewriteRule . index.php [PT,E=PATH_INFO:$1]
RewriteBase /
<IfModule mod_env.c>
SetEnv front_controller_active true
<IfModule mod_dir.c>
DirectorySlash off
</IfModule>
</IfModule>
</IfModule>

Módosítsuk a config.php

sudo -u www-data cp /var/www/html/nextcloud/config/config.php /var/www/html/nextcloud/config/config.php.bak
sudo -u www-data sed -i 's/^[ ]*//' /var/www/html/nextcloud/config/config.php
sudo -u www-data sed -i '/);/d' /var/www/html/nextcloud/config/config.php

Beállítások hozzáadása:

sudo -u www-data cat <<EOF>>/var/www/html/nextcloud/config/config.php
'activity_expire_days' => 14,
'auth.bruteforce.protection.enabled' => true,
'blacklisted_files' => 
array (
0 => '.htaccess',
1 => 'Thumbs.db',
2 => 'thumbs.db',
),
'cron_log' => true,
'enable_previews' => true,
'enabledPreviewProviders' => 
array (
0 => 'OC\\Preview\\PNG',
1 => 'OC\\Preview\\JPEG',
2 => 'OC\\Preview\\GIF',
3 => 'OC\\Preview\\HEIC',
4 => 'OC\\Preview\\BMP',
5 => 'OC\\Preview\\XBitmap',
6 => 'OC\\Preview\\MP3',
7 => 'OC\\Preview\\TXT',
8 => 'OC\\Preview\\MarkDown',
9 => 'OC\\Preview\\Movie',
10 => 'OC\\Preview\\MKV',
11 => 'OC\\Preview\\MP4',
12 => 'OC\\Preview\\AVI',
13 => 'OC\\Preview\\PDF',
),
'filesystem_check_changes' => 0,
'logfile' => '/var/nc_data/nextcloud.log',
'filelocking.enabled' => 'true',
'htaccess.RewriteBase' => '/',
'integrity.check.disabled' => false,
'knowledgebaseenabled' => false,
'loglevel' => 2,
'logtimezone' => 'Europe/Budapest',
'log_rotate_size' => 104857600,
'maintenance' => false,
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'overwriteprotocol' => 'https',
'preview_max_x' => 1024,
'preview_max_y' => 768,
'preview_max_scale_factor' => 1,
'redis' => 
array (
'host' => '/var/run/redis/redis-server.sock',
'port' => 0,
'timeout' => 0.0,
),
'quota_include_external_storage' => false,
'share_folder' => '/Shares',
'skeletondirectory' => '',
'theme' => '',
'trashbin_retention_obligation' => 'auto, 7',
'updater.release.channel' => 'stable',
);
EOF

Indítsuk újra a szolgáltatást:

service php7.3-fpm restart && service redis-server restart && service apache2 restart

NextCloud finomhangolása

Adjuk ki az alábbi parancsot:

sudo -u www-data php /var/www/html/nextcloud/occ app:disable survey_client
sudo -u www-data php /var/www/html/nextcloud/occ app:disable firstrunwizard
sudo -u www-data php /var/www/html/nextcloud/occ app:enable admin_audit
sudo -u www-data php /var/www/html/nextcloud/occ app:enable files_pdfviewer

Előnézet Beállítása

Képek-, filmek előnézetéhez az alábbi lépések szükségesek:

apt install -y libmagickcore-dev ghostscript

Biztonsági házirend szerkesztése:

nano /etc/ImageMagick-6/policy.xml

Keressük meg- és kommenteljük ki az alábbi részt:

[...]
<!-- <policy domain="coder" rights="none" pattern="PDF" /> -->
[...]

Navigáljunk el a nextcloud gyökérkönyvtárába, majd adjuk ki az alábbi parancsokat:

sudo -u www-data php /var/www/nextcloud/occ app:install previewgenerator
sudo -u www-data php /var/www/nextcloud/occ app:enable previewgenerator

Nincs más hátra, mint legenerálni az előnézeti objektumokat:

sudo -u www-data php /var/www/nextcloud/occ preview:generate-all -vvv

Állítsuk be, hogy ütemezetten is lefusson a program:

sudo crontab -u www-data -e
*/10 *  *  *  * php /var/www/nextcloud/occ preview:pre-generate

Optimalizáljunk

A helyes működés érdekében hajtsuk végre a következőket:

systemctl stop apache2
sudo -u www-data php /var/www/html/nextcloud/occ db:add-missing-indices
sudo -u www-data php /var/www/html/nextcloud/occ db:convert-filecache-bigint
systemctl start apache2

Cron feladatok beállítása

Jobb ha a linux Cron -ra bízzuk az ütemezett feladatok végrehajtását:

crontab -u www-data -e

Adjuk az ütemezett feladatokhoz az alábbi sort és ne feledjük el a nextclod webes konfigurálásánál beállítani a cron lehetőséget:

*/5 * * * * php -f /var/www/html/nextcloud/cron.php > /dev/null 2>&1

MPM EVENT módosítása

Nyissuk meg az npm_event.conf fájlt:

nano /etc/apache2/mods-available/mpm_event.conf

Módosítsuk a tartalmat:

StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 1000

HTTP2 engedélyezése

Először is engedélyezzük a modult:

a2enmod http2 && service php7.3-fpm restart && service apache2 restart

Nyissuk meg a konfigurációs állományt:

nano /etc/apache2/conf-available/http2.conf

Módosítsuk a tartalmát:

<IfModule http2_module>
Protocols h2 h2c http/1.1
H2Direct on
H2StreamMaxMemSize 5120000000
</IfModule>

Érvényesítsük a beállítást:

a2enconf http2 && service apache2 restart

Lassan a végéhez érünk a teendőknek, végezetül a biztonsági szintet állítjuk be:

a2dismod status && nano /etc/apache2/conf-available/security.conf

Változtassuk meg az alábbi beállításokat:

ServerTokens Prod
ServerSignature Off
TraceEnable Off

Végezetül indítsuk újra a szolgáltatásokat:

service php7.3-fpm restart && service redis-server restart && service apache2 restart

Opcionális beállítás

Telepítsünk túzfalat és gondoskodjunk a rendszer biztonságáról:

Fail2Ban

apt install fail2ban -y

Készítsük el a megfelelő szúrő szabályt:

nano /etc/fail2ban/filter.d/nextcloud.conf
[Definition]
failregex=^{"reqId":".*","remoteAddr":".*","app":"core","message":"Login failed: '.*' \(Remote IP: ''\)","level":2,"time":".*"}$
          ^{"reqId":".*","level":2,"time":".*","remoteAddr":".*","user,:".*","app":"no app in context".*","method":".*","message":"Login failed: '.*' \(Remote IP: ''\)".*}$
          ^{"reqId":".*","level":2,"time":".*","remoteAddr":".*","user":".*","app":".*","method":".*","url":".*","message":"Login failed: .* \(Remote IP: \).*}$

Új jail szabály létrehozása:

nano /etc/fail2ban/jail.d/nextcloud.local

Illesszük be az alábbi tartalmat:

[nextcloud]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = nextcloud
maxretry = 6
bantime = 18000
findtime = 36000
logpath = /var/nc_data/nextcloud.log

Indítsuk újra a szolgáltatást:

service fail2ban restart

UFW telepítése és beállítása

apt install ufw

Konfiguráció:

ufw allow 80/tcp && ufw allow 443/tcp && ufw allow 22/tcp && ufw logging medium

Engedélyezzük a szolgáltatást:

ufw enable && service ufw restart

Ezzel a végére értünk a beállításoknak. Egyetlen dolgunk maradt csak hátra, ha azt szeretnénk, hogy a tanúsítványunk automatikusan megújuljon, akkor a /etc/letsencrypt/renew könyvtárban a domain konfigurációját nyissuk meg és a kommentet vegyük ki a megfelelő sor elől. Ezzel végeztünk is.

Kiegészítés

A NextCloud szolgáltatás frissítésénél belefutottam egy hibába. A webes felületen elindított frissítés a 6. lépésnél ismeretlen hiba miatt megállt. A frissítő újbóli indítása hibás eredményre vezetett, mivel a korábbi lépés megszakadt. A megoldás a következő, melyet parancssorban kell elvégezni:

sudo -u www-data php occ maintenance:mode --on
sudo -u www-data php occ maintenance:repair
sudo -u www-data php occ maintenance:mode --off

Ezután a frissítés újra elvégezhető, így már hiba nélkül lefutott.