Nextcloud 18 Installationsanleitung

Nextcloud 18, NGINX 1.17, PHP 7.3, MariaDB
AMD 64 und ARM64

Folgen Sie dieser Anleitung und erstellen Sie sich Ihren eigenen Nextcloud Server,
basierend auf Ubuntu 18.04.x LTS oder Debian 10.x 64Bit (ARM64 oder AMD64), NGINX 1.17, TLSv1.3, PHP 7.3, MariaDB 10.4, Redis, UFW und fail2ban. Das System erhält sowohl von Nextcloud, als auch von Qualys SSL Labs eine A+ Bewertung. Sie verwenden dabei eigens erstellte und sich automatisch erneuernde SSL-Zertifikate von Let’s Encrypt. Im Verlauf dieser Anleitung müssen Sie nur die rot markierten Werte wie bspw. your.dedyn.io oder 192.168.2.x mit den entsprechenden Werten Ihres Systems ersetzen.


Aktualisierungshistorie: hier


Inhaltsverzeichnis

  1. Vorbereitungen und Installation des nginx Webservers
  2. Installation und Konfiguration von PHP 7.x
  3. Installation und Konfiguration des Datenbankservers MariaDB
  4. Installation des Redis-server („in-memory-Datenbank“)
  5. Installation und Optimierung der Nextcloud (inkl. SSL)
  6. Systemhärtung (fail2ban und ufw)
  7. Sytemmails per msmtp

1. Vorbereitungen und Installation des nginx Webserver

Wechseln Sie zuerst in den privilegierten Benutzermodus

sudo -s

und installieren dann die folgenden Softwarepakete, die als Grundlage des Serverbetriebs notwendig sind:

apt install curl gnupg2 git lsb-release ssl-cert ca-certificates apt-transport-https tree locate software-properties-common dirmngr screen htop net-tools zip unzip curl ffmpeg ghostscript libfile-fcntllock-perl -y

Fügen Sie dem System die sogenannten Software-Repositories (Softwarequellen) hinzu, um die aktuellen Releases der jeweiligen Pakete installieren zu können.

cd /etc/apt/sources.list.d

Nur Ubuntu:

echo "deb [arch=amd64,arm64] http://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" | tee nginx.list
echo "deb [arch=amd64,arm64] http://ppa.launchpad.net/ondrej/php/ubuntu $(lsb_release -cs) main" | tee php.list
echo "deb [arch=amd64,arm64] http://ftp.hosteurope.de/mirror/mariadb.org/repo/10.4/ubuntu $(lsb_release -cs) main" | tee mariadb.list

Um den jeweiligen Repositories vertrauen zu können nutzen wir entsprechende Schlüssel:

apt-key adv --recv-keys --keyserver hkps://keyserver.ubuntu.com:443 4F4EA0AAE5267A6C

Nur Debian:

echo "deb [arch=amd64,arm64] http://nginx.org/packages/mainline/debian $(lsb_release -cs) nginx" | tee nginx.list
echo "deb [arch=amd64,arm64] https://packages.sury.org/php/ $(lsb_release -cs) main" | tee php.list
echo "deb [arch=amd64,arm64] http://mirror2.hs-esslingen.de/mariadb/repo/10.4/debian $(lsb_release -cs) main" | tee mariadb.list

Um den jeweiligen Repositories vertrauen zu können nutzen wir entsprechende Schlüssel:

wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -

Ubuntu und Debian:

Wir ergänzen noch weitere Schlüssel (nginx, mariadb), aktualisieren das System und generieren im Anschluß sogenannte self-signed-Zertifikate, die im weiteren Verlauf durch vollwertige Zertifikate von Let’s Encrypt ersetzt werden.

curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
apt-key adv --recv-keys --keyserver hkps://keyserver.ubuntu.com:443 0xF1656F24C74CD1D8
apt update && apt upgrade -y
make-ssl-cert generate-default-snakeoil -y

Um sicherzustellen, dass keine Relikte früherer Installationen den Betrieb des Webserver stören, entfernen wir diese:

apt remove nginx nginx-extras nginx-common nginx-full -y --allow-change-held-packages

Zudem stellen wir sicher, dass das Pendant (Apache2) zum nginx Webserver weder aktiv noch installiert ist.

systemctl stop apache2.service && systemctl disable apache2.service

Nun sind die Vorbereitungen zur Installation des Webservers abgeschlossen und wir können die Software mit dem nachfolgenden Befehl installieren

apt install nginx -y

und den Dienst zum automatischen Start nach einem Server neustart mittels

systemctl enable nginx.service

einrichten. Mit Blick auf die späteren Anpassungen wird die Standardkonfiguration gesichert und eine neue Konfigurationsdatei geöffnet:

mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak && touch /etc/nginx/nginx.conf
nano /etc/nginx/nginx.conf

Kopieren Sie den gesamten nachfolgenden Inhalt in die Datei und ersetzen die rot markierten Werte entsprechend Ihres Systems:

user www-data;
worker_processes auto;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
multi_accept on; use epoll;
}
http {
server_names_hash_bucket_size 64;
upstream php-handler {
server unix:/run/php/php7.3-fpm.sock;
}
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
set_real_ip_from 127.0.0.1;
set_real_ip_from 192.168.2.0/24;
# das ist der IP-Bereich Ihres privaten / firmen Netzwerks
real_ip_header X-Forwarded-For;
real_ip_recursive on;
include /etc/nginx/mime.types;
#include /etc/nginx/proxy.conf;
#include /etc/nginx/ssl.conf;
#include /etc/nginx/header.conf;
#include /etc/nginx/optimization.conf; 
default_type application/octet-stream;
sendfile on;
send_timeout 3600;
tcp_nopush on;
tcp_nodelay on;
open_file_cache max=500 inactive=10m;
open_file_cache_errors on;
keepalive_timeout 65;
reset_timedout_connection on;
server_tokens off;
resolver 127.0.0.53 valid=30s;
# das ist die IP des lokalen (127.0.0.53) oder globalen DNS Servers (bspw. die IP Ihrer FritzBox 192.168.2.1)
resolver_timeout 5s;
include /etc/nginx/conf.d/*.conf;
}

Speichern Sie die Datei und schließen Sie diese, um im Anschluß den Webserver neu zu starten:

service nginx restart

Vorbereitend für die SSL Zertifikate und die Webverzeichnisse legen wir vier Ordner und setzen die korrekten Berechtigungen:

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

Die Installation des Webservers ist somit bereits abgeschlossen und wir fahren mit der Installation und den Anpassungen von PHP fort.


2. Installation und Konfiguration von PHP 7.3 (fpm)

Das PHP Repository wurde bereits im vorherigen Kapitel eingerichtet und aktiviert, so dass wir direkt mit der Installation beginnen können.:

apt update && apt install php7.3-fpm php7.3-gd php7.3-mysql php7.3-curl php7.3-xml php7.3-zip php7.3-intl php7.3-mbstring php7.3-json php7.3-bz2 php7.3-ldap php-apcu imagemagick php-imagick php-smbclient -y

Setzen Sie das richtige Datumsformat, um auch ein korrektes Logging zu ermöglichen:

timedatectl set-timezone Europe/Berlin

Bevor wir mit den Optimierungen von PHP beginnen sichern wir die Konfigurationsdateien:

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
cp /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xml.bak

Führen Sie nun alle nachfolgenden Optimierungen durch:

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/output_buffering =.*/output_buffering = 'Off'/" /etc/php/7.3/cli/php.ini
sed -i "s/max_execution_time =.*/max_execution_time = 3600/" /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/;date.timezone.*/date.timezone = Europe\/\Berlin/" /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 = 3600/" /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/;date.timezone.*/date.timezone = Europe\/\Berlin/" /etc/php/7.3/fpm/php.ini
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/rights=\"none\" pattern=\"PS\"/rights=\"read|write\" pattern=\"PS\"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights=\"none\" pattern=\"EPI\"/rights=\"read|write\" pattern=\"EPI\"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights=\"none\" pattern=\"PDF\"/rights=\"read|write\" pattern=\"PDF\"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights=\"none\" pattern=\"XPS\"/rights=\"read|write\" pattern=\"XPS\"/" /etc/ImageMagick-6/policy.xml

Starten Sie nun beide Dienste, nginx und PHP, neu:

service php7.3-fpm restart
service nginx restart

Auch PHP ist nun bereits installiert und für Nextcloud optimiert. Starten wir nun mit der Installation und konfiguration des Datenbankserver MariaDB.


3. Installation und Konfiguration von MariaDB 10.x

Die Installation von MariaDB erfolgt mit diesem befehl:

apt update && apt install mariadb-server -y

Härten wir nun den Datenbankserver mittels des mitgelieferten Tools „mysql_secure_installation“. Bei einer Erstinstallation besteht kein Rootpasswort, so dass Sie die Abfrage mit ENTER bestätigen könne. Es wird empfohlen, ein Passwort direkt zu setzen, der entsprechende Dialog erscheint automatisch:

mysql_secure_installation
Switch to unix_socket authentication [Y/n] N
Enter current password for root (enter for none): <ENTER> or type the password
Set root password? [Y/n] Y
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

Stoppen Sie nun den Datenbankserver und sichern dann die Standardkonfiguration, um unmittelbar danach Anpassungen vornehmen zu können:

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

Kopieren Sie alle nachfolgenden Zeilen in die leere Datei:

[client]
 default-character-set = utf8mb4
 port = 3306
[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]
 key_buffer = 16M 

Speichern und schließen Sie die Datei und starten dann den Datenbankserver neu, um die Nextcloud-Datenbank, den Nextcloud-Benutzer und sein Passworts einzurichten:

service mysql restart
mysql -uroot -p

Erläuterung:

Datenbankname: nextcloud

Datenbankbenutzer: nextcloud

Datenbankbenutzerpaßwort: nextcloud

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; quit;

Überprüfen Sie, ob das Isolation-Level (read commit) und das Charset (utf8mb4) korrekt gesetzt wurden:

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'"

Erscheint in der Ausgabe (resultset) „READ-COMMITTED“ und „utf8mb4_general_ci“ wurde alles korrekt eingerichtet und wir können mit der Installation von Redis fortfahren.


4. Installation und Konfiguration von Redis

Wir installieren den Redis-Server um die Nextcloudperformance zu steigern, da durch Redis die Last auf der MariaDB-Nextclouddatenbank reduziert wird:

apt update && apt install redis-server php-redis -y

Passen Sie die Rediskonfiguration durch das Sichern und Anpassen der Konfiguration mittels Ausführen der nachfolgenden Befehle an:

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

Aus hinreichender Installationserfahrung heraus empfehle ich Ihnen, den gesamten Server einmalig neu zu starten:

reboot now

Gratulation, der Server ist bereits Installiert und eingerichtet, so dass nun mit der Einrichtung der Nextcloud begonnen werden kann.


5. Installation und Optimierung der Nextcloud (inkl. SSL)

Wir richten nun verschiedene vhost, also Serverkonfigurationsdateien, ein und modifizieren die Standard vhost-Datei persistent. Da das System zuvor neu gestartet wurde wechseln wir erneut in den privilegierten Benutzermodus, sichern die Standard vhost-Datei namen default.conf und legen eine leere Datei an.

sudo -s
[ -f /etc/nginx/conf.d/default.conf ] && mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
touch /etc/nginx/conf.d/default.conf

Somit ist auch bei späteren Aktualisierungen des Webservers nginx sichergestellt, dass diese Standardkonfiguration den Nextcloudbetrieb nicht beeinflußt. Erstellen wir dann die vhost Datei für Nextcloud:

 nano /etc/nginx/conf.d/nextcloud.conf 

Kopieren Sie alle nachfolgenden Zeilen in die Datei nextcloud.conf und passen die rot markierten Werte entsprechend Ihres Systems an:

server {
server_name your.dedyn.io;
# your.dedyn.io ist mit ihre Domain zu ersetzen
listen 80 default_server;
listen [::]:80 default_server;
location ^~ /.well-known/acme-challenge {
proxy_pass http://127.0.0.1:81;
proxy_set_header Host $host;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
server_name your.dedyn.io;
 # your.dedyn.io ist mit ihre Domain zu ersetzen 
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
root /var/www/nextcloud/;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
#SOCIAL app enabled? Please uncomment the following row
#rewrite ^/.well-known/webfinger /public.php?service=webfinger last;
#WEBFINGER app enabled? Please uncomment the following two rows.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
client_max_body_size 10240M;
location / {
rewrite ^ /index.php;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ^~ /apps/rainloop/app/data {
deny all;
}
location ~ \.(?:flv|mp4|mov|m4a)$ {
mp4;
mp4_buffer_size 100M;
mp4_max_buffer_size 1024M;
fastcgi_split_path_info ^(.+?.php)(\/.*|)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
include php_optimization.conf;
}
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+).php(?:$|\/) {
fastcgi_split_path_info ^(.+?.php)(\/.*|)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
include php_optimization.conf;
}
location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}
location ~ \.(?:css|js|woff2?|svg|gif|map|png|html|ttf|ico|jpg|jpeg)$ {
try_files $uri /index.php$request_uri;
access_log off;
expires 360d;
}
}

Speichern und schließen Sie diese Datei und legen dann die weitere vhost Datei letsencrypt.conf an:

nano /etc/nginx/conf.d/letsencrypt.conf

Kopieren Sie alle Zeilen in die Datei:

server
{
server_name 127.0.0.1;
listen 127.0.0.1:81 default_server;
charset utf-8;
location ^~ /.well-known/acme-challenge
{
default_type text/plain;
root /var/www/letsencrypt;
}
}

Speichern und schließen Sie diese Datei und legen dann die weitere vhost Datei ssl.conf an:

nano /etc/nginx/ssl.conf

Kopieren Sie alle Zeilen in die Datei:

ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
ssl_trusted_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
#ssl_certificate /etc/letsencrypt/rsa-certs/fullchain.pem;
#ssl_certificate_key /etc/letsencrypt/rsa-certs/privkey.pem;
#ssl_certificate /etc/letsencrypt/ecc-certs/fullchain.pem;
#ssl_certificate_key /etc/letsencrypt/ecc-certs/privkey.pem;
#ssl_trusted_certificate /etc/letsencrypt/ecc-certs/chain.pem;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m;
ssl_session_tickets off; ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384';
ssl_ecdh_curve X448:secp521r1:secp384r1:prime256v1;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;

Speichern und schließen Sie diese Datei und legen dann die weitere vhost Datei proxy.conf an:

nano /etc/nginx/proxy.conf

Kopieren Sie alle Zeilen in die Datei:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_connect_timeout 3600;
proxy_send_timeout 3600;
proxy_read_timeout 3600;
proxy_redirect off;

Speichern und schließen Sie diese Datei und legen dann die weitere vhost Datei header.conf an:

nano /etc/nginx/header.conf

Kopieren Sie alle Zeilen in die Datei:

add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Robots-Tag none; add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer" always;
add_header X-Frame-Options "SAMEORIGIN";

Speichern und schließen Sie diese Datei und legen dann die weitere vhost Datei optimization.conf an:

nano /etc/nginx/optimization.conf

Kopieren Sie alle Zeilen in die Datei:

fastcgi_hide_header X-Powered-By;
fastcgi_read_timeout 3600;
fastcgi_send_timeout 3600;
fastcgi_connect_timeout 3600;
fastcgi_buffers 64 64K;
fastcgi_buffer_size 256k;
fastcgi_busy_buffers_size 3840K;
fastcgi_cache_key $http_cookie$request_method$host$request_uri;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
gzip_disable "MSIE [1-6]\.";

Speichern und schließen Sie diese Datei und legen dann die weitere vhost Datei php_optimization.conf an:

nano /etc/nginx/php_optimization.conf

Kopieren Sie alle Zeilen in die Datei:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
fastcgi_cache_valid 404 1m;
fastcgi_cache_valid any 1h;
fastcgi_cache_methods GET HEAD;

Speichern und schließen Sie diese Datei. Erweitern Sie nun die Server- und Systemsicherheit durch die Möglichkeit des sicheren Schlüsselaustauschs mittels eines Diffie-Hellman Schlüssels (dhparam.pem):

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

Bitte haben Sie nun Geduld, das Generieren kann in Abhängigkeit von der Systemleistung wenige Minuten bis zu einer Stunde dauern. Sobald das Generieren abgeschlossen ist aktivieren wir SSL im Webserver nginx und starten diesen neu:

sed -i s/\#\include/\include/g /etc/nginx/nginx.conf
service nginx restart

Wir starten nun die Installation der Nextcloud Software und richten die SSL Zertifikate von Let’s Encrypt mittels acme ein. Wechseln Sie in das Arbeitsverzeichnis

cd /usr/local/src

und laden das aktuelle Nextcloud Release

wget https://download.nextcloud.com/server/releases/latest.tar.bz2

Entpacken Sie die Nextcloud Software in das Webverzeichnis, setzen dann die Berechtigung adäquat und Löschen den Download:

tar -xjf latest.tar.bz2 -C /var/www && chown -R www-data:www-data /var/www/ && rm -f latest.tar.bz2

Bitte stellen Sie sicher, dass Ihr Server sowohl über Port 80/TCP als auch über Port 443/TCP von außen erreichbar ist. Für das Zertifikatshandling erstellen wir nun einen dedizierten Benutzer und fügen diesen der www-data Gruppe hinzu:

adduser acmeuser
usermod -a -G www-data acmeuser

Wechseln Sie in die Shell des neuen Benutzers (acmeuser) um die Zertifikatssoftware zu installieren und verlassen diese Shell danach wieder:

su - acmeuser
curl https://get.acme.sh | sh
exit

Legen Sie drei Verzeichnisse mit den entsprechenden Berechtigungen an, um die neuen Zertifikate darin speichern zu können:

mkdir -p /var/www/letsencrypt/.well-known/acme-challenge /etc/letsencrypt/rsa-certs /etc/letsencrypt/ecc-certs
chmod -R 775 /var/www/letsencrypt /etc/letsencrypt && chown -R www-data:www-data /var/www/ /etc/letsencrypt

Wechseln Sie erneut in die Shell des neuen Benutzers

su - acmeuser

und requestieren (beantragen) die SSL-Zertifikate. Ersetzen Sie dabei your.dedyn.io mit Ihrer Domain :

acme.sh --issue -d your.dedyn.io --keylength 4096 -w /var/www/letsencrypt --key-file /etc/letsencrypt/rsa-certs/privkey.pem --ca-file /etc/letsencrypt/rsa-certs/chain.pem --cert-file /etc/letsencrypt/rsa-certs/cert.pem --fullchain-file /etc/letsencrypt/rsa-certs/fullchain.pem
acme.sh --issue -d your.dedyn.io --keylength ec-384 -w /var/www/letsencrypt --key-file /etc/letsencrypt/ecc-certs/privkey.pem --ca-file /etc/letsencrypt/ecc-certs/chain.pem --cert-file /etc/letsencrypt/ecc-certs/cert.pem --fullchain-file /etc/letsencrypt/ecc-certs/fullchain.pem

Verlassen Sie die Shell des neuen Benutzers

exit

und legen sich dann ein Skript an, dass zukünftig die Berechtigungen überprüft und korrigiert (permissions.sh):

nano /root/permissions.sh

Kopieren Sie alle Zeilen in die Datei:

#!/bin/bash
find /var/www/ -type f -print0 | xargs -0 chmod 0640
find /var/www/ -type d -print0 | xargs -0 chmod 0750
chmod -R 775 /var/www/letsencrypt
chmod -R 775 /etc/letsencrypt 
chown -R www-data:www-data /var/www/
chown -R www-data:www-data /var/nc_data/
chmod 0644 /var/www/nextcloud/.htaccess
chmod 0644 /var/www/nextcloud/.user.ini
chmod 600 /etc/letsencrypt/rsa-certs/fullchain.pem
chmod 600 /etc/letsencrypt/rsa-certs/privkey.pem
chmod 600 /etc/letsencrypt/rsa-certs/chain.pem
chmod 600 /etc/letsencrypt/rsa-certs/cert.pem
chmod 600 /etc/letsencrypt/ecc-certs/fullchain.pem
chmod 600 /etc/letsencrypt/ecc-certs/privkey.pem
chmod 600 /etc/letsencrypt/ecc-certs/chain.pem
chmod 600 /etc/letsencrypt/ecc-certs/cert.pem
chmod 600 /etc/ssl/certs/dhparam.pem
exit 0

Markieren Sie das Skript als ausführbar und führen es dann direkt aus:

chmod +x /root/permissions.sh
/root/permissions.sh

Entfernen Sie Ihre bisher verwendeten Self-Signed-Zertifikate aus nginx und aktivieren Sie die neuen, vollwertigen und bereits gültigen SSL Zertifikate von Let’s Encrypt:

sed -i '/ssl-cert-snakeoil/d' /etc/nginx/ssl.conf
sed -i s/\#\ssl/\ssl/g /etc/nginx/ssl.conf
service nginx restart

Um sowohl die SSL-Zertifikate automatisch zu erneuern, als auch den notwendigen Webserverneustart zu initiieren legen wir folgendes ‚renewal‘-Skript an:

nano /root/renewal.sh
#!/bin/bash
sudo -u acmeuser "/home/acmeuser/.acme.sh"/acme.sh --cron --home "/home/acmeuser/.acme.sh"
/usr/sbin/service nginx stop
/usr/sbin/service mysql restart
/usr/sbin/service redis-server restart
/usr/sbin/service php7.3-fpm restart
/usr/sbin/service nginx restart
exit 0

Speicherns Sie dieses Skript und markieren es als „ausführbar“.

chmod +x /root/renewal.sh

Nun deaktivieren wir den Standard ‚acme‘-Cronjob

crontab -e -u acmeuser

durch das Voranstellen eines ‚#‚ Zeichens

# 44 0 * * * "/home/acmeuser/.acme.sh"/acme.sh --cron --home "/home/acmeuser/.acme.sh" > /dev/null

und legen dann einen neuen Cronjob an

crontab -e
@weekly /root/renewal.sh 2>&1

Ab sofort wird wöchentlich nach erneuerbaren SSL-Zertifikaten gesucht und bei einem möglichen Zertifikatsrenewal die SSL-Zertifikate aktualisiert und der Webserver neu gestartet – voll automatisch!

Wir können nun mit der Einrichtung der Nextcloud fortfahren. Dazu verwenden Sie den nachfolgenden „silent“ Installationsbefehl:

sudo -u www-data php /var/www/nextcloud/occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "nextcloud" --database-pass "nextcloud" --admin-user "YourNextcloudAdmin" --admin-pass "YourNextcloudAdminPasssword" --data-dir "/var/nc_data"

Erläuterungen:

database-name „nextcloud“ : Datenbankname aus Kapitel 3

database-user “nextcloud” : Datenbankbenutzer aus Kapitel 3

database-pass “nextcloud” : Datenbankbenutzerpasswort aus Kapitel 3

admin-user “YourNextcloudAdmin” : frei wählbar von Ihnen

admin-pass “YourNextcloudAdminPasssword” : frei wählbar von Ihnen

Warten Sie bis die Installation der Nextcloud abgeschlossen wurde und passen dann die zentrale Konfigurationsdatei der Nextcloud „config.php“ als Webuser www-data an:

1. Fügen Sie Ihre Domain als trusted domain hinzu, ergänzen Sie dabei your.dedyn.io mit Ihrer dedizierten Domain:

sudo -u www-data php /var/www/nextcloud/occ config:system:set trusted_domains 0 --value=your.dedyn.io

2. Setzen Sie Ihre Domain als overwrite.cli.url, ergänzen Sie dabei your.dedyn.io mit Ihrer dedizierten Domain:

sudo -u www-data php /var/www/nextcloud/occ config:system:set overwrite.cli.url --value=https://your.dedyn.io

Nun erweitern wir abschließend die Nextcloud Konfiguration. Sichern Sie dazu zuerst die bestehende config.php und führen dann die nachfolgenden Zeilen in einem Block aus:

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

Ubuntu:

sudo -u www-data cat <<EOF >>/var/www/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\BMP',
4 => 'OC\Preview\XBitmap',
5 => 'OC\Preview\Movie',
6 => 'OC\Preview\PDF',
7 => 'OC\Preview\MP3',
8 => 'OC\Preview\TXT',
9 => 'OC\Preview\MarkDown',
),
'filesystem_check_changes' => 0,
'filelocking.enabled' => 'true',
'htaccess.RewriteBase' => '/',
'integrity.check.disabled' => false,
'knowledgebaseenabled' => false,
'logfile' => '/var/nc_data/nextcloud.log',
'loglevel' => 2,
'logtimezone' => 'Europe/Berlin',
'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

Debian:

sudo -u www-data cat <<EOF >>/var/www/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\BMP',
4 => 'OC\Preview\XBitmap',
5 => 'OC\Preview\Movie',
6 => 'OC\Preview\PDF',
7 => 'OC\Preview\MP3',
8 => 'OC\Preview\TXT',
9 => 'OC\Preview\MarkDown',
),
'filesystem_check_changes' => 0,
'filelocking.enabled' => 'true',
'htaccess.RewriteBase' => '/',
'integrity.check.disabled' => false,
'knowledgebaseenabled' => false,
'logfile' => '/var/nc_data/nextcloud.log',
'loglevel' => 2,
'logtimezone' => 'Europe/Berlin',
'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.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

Debian und Ubuntu:

sudo -u www-data sed -i "s/.*dbhost.*/\'dbhost\' \=\>\ \'localhost\:\/var\/run\/mysqld\/mysqld\.sock\'\,/g" /var/www/nextcloud/config/config.php 

Modifizieren Sie die „.user.ini“

sudo -u www-data sed -i "s/output_buffering=.*/output_buffering='Off'/" /var/www/nextcloud/.user.ini

und passen die Nextcloud-Apps als user www-data an

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

Nextcloud ist ab sofort voll einsatzfähig, optimiert und abgesichert. Starten Sie alle relevanten Services neu:

service nginx stop
service php7.3-fpm stop
service mysql restart
service php7.3-fpm restart
service redis-server restart
service nginx restart

Richten Sie einen Cronjob für Nextcloud als „www-data“ – Benutzer ein:

crontab -u www-data -e

Fügen Sie diese Zeile ein

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

Speichern und schließen Sie dann die Datei und konfigurieren Sie den Nextcloud-Job von „Ajax“ zu „Cron“ mittels der Nextclouds CLI um:

sudo -u www-data php /var/www/nextcloud/occ background:cron

6. Härtung (fail2ban and ufw)

Zuerst installieren wir fail2ban um den Server gegen Brute-force-Attacken und fehlerhafte Loginversuche zu schützen:

apt update && apt install fail2ban -y

Erstellen Sie eine neue Filterdatei

nano /etc/fail2ban/filter.d/nextcloud.conf

und kopieren alle nachfolgenden Zeilen hinein:

[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: \).*}$

Speichern und schließen Sie diese Datei und legen eine neue Jail-Datei an:

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

Kopieren Sie alle nachfolgenden Zeilen hinein:

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

[nginx-http-auth]
enabled = true  

Starten Sie fail2ban neu und überprüfen den fail2ban-status:

service fail2ban restart
fail2ban-client status nextcloud

Ab sofort werden IP-Adressen, die mehr als 10 fehlerhafte Anmeldeversuche hatten für 36000s gesperrt und Ihr Server somit vor weiteren Attacken geschützt.

Abschließend installieren wir noch eine Firewall, die sogenannte uncomplicated firewall (ufw):

Sofern Sie zuvor den SSH-Port von 22 auf einen anderen Port geändert haben, so müssen Sie die 22 entsprechend ersetzen!

apt install ufw -y
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 22/tcp

Setzen Sie das Firewall-Logging auf „medium“ und verhindern nicht definierte eingehende Verbindungen.

ufw logging medium
ufw default deny incoming

Aktivieren Sie die Firewall und starten diese neu:

ufw enable
service ufw restart

7. Systemmails per msmtp versenden

Aktualisieren Sie ihren Server und installieren Sie msmtp. Sie haben damit die Möglichkeit, sich von fail2ban, apticron und bei SSH-Anmeldungen per Mail informieren zu lassen:

apt update && apt upgrade -y && apt install msmtp msmtp-mta mailutils -y

Erstellen Sie Ihre Mailkonfiguration anhand meines nachfolgenden Beispiels – erzeugen Sie dazu beide Konfigurationsdateien und kopieren dann die folgenden Zeilen hinein:

vi /etc/msmtprc

und

vi ~/.msmtprc

Passen die roten Werte in beiden Dateien identisch an:

defaults
port 587
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
#Your Mail:
account ihre@mailadresse.de
#Your SMTP-Server:
host smtp.domain.com
#Mails will be sent from:
from ihre@mailadresse.de
auth on 
#Your Mailaccount:
user ihre@mailadresse.de
#Your Password:
password IhR-mAILPasswort
#Default Mailaccount:
account default: ihre@mailadresse.de
aliases /etc/aliases
# find out more about the configuration here: https://marlam.de/msmtp/msmtprc.txt

Setzen Sie die richtigen Berechtigungen

chown <IhrBenutzer>:<IhrBenutzer> ~/.msmtprc
chmod 600 /etc/msmtprc && chmod 600 ~/.msmtprc

Erstellen Sie die mail.rc Datei und fügen Sie die folgende Zeile hinzu:

vi /etc/mail.rc
set sendmail="/usr/bin/msmtp -t"

Nutzen Sie „Logrotate“, um die Logdateien vom System verwalten zu lassen – erstellen Sie dafür die Datei mit folgendem Inhalt:

vi /etc/logrotate.d/msmtp

Fügen Sie alle Zeilen hinzu:

/var/log/msmtp/*.log {
rotate 12
monthly
compress
missingok
notifempty
}

Passen Sie die PHP-Konfiguration an um auch PHP-Mails über msmtp zu versenden:

vi /etc/php/7.3/fpm/php.ini

Setzen Sie den sendmail_path wie folgt:

sendmail_path = "/usr/bin/msmtp -t"

und starten dann PHP neu:

service php7.3-fpm restart

Nun legen Sie die Mail-Aliase zum Versenden von Systemmails fest:

vi /etc/aliases

Passen Sie die Mailadresse des root- und default-Benutzers an – erweitern Sie die Datei bei Bedarf nach Ihren Wünschen: Passen Sie die Datei nach Ihren Bedürfnissen und Benutzern an:

root: ihre@mailadresse.de
default: ihre@mailadresse.de

Testen Sie nun Ihre Mailserverkonfiguration durch folgenden Einzeiler:

echo "Meine Testmail..." | mail -s "Testmailbetreff" ihre@mailadresse.de

Ihr Mailserver ist nun einsatzbereit und Sie können nun weitere Systemmails (bspw. von fail2ban und apticron) konfigurieren:

(optional) 7.1 Konfiguration von fail2ban-Mailbenachrichtigungen

Ersetzen Sie in der fail2ban-Konfiguration die nachfolgenden Parameter durch Ihre, um Benachrichtigungen bei fehlerhaften Loginversuchen und Banns zu erhalten. Sichern Sie dazu die Originalkonfiguration von fail2ban und bearbeiten diese dann:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.bak
vi /etc/fail2ban/jail.conf

Ersetzen Sie die roten Werte:

...
destemail = ihre@mailadresse.de
...
sender = ihre@mailadresse.de
...
mta = mail
...
# action = %(action_)s
action = %(action_mwl)s
...

Um bei einem Serverneustart fail2ban-Mails zu unterdrücken passen Sie die folgende Datei an:

vi /etc/fail2ban/action.d/mail-buffered.local

Kopieren Sie den Inhalt hinein:

[Definition]
actionstart =
actionstop =

Legen Sie dann Dummy-Dateien durch das Ausführen der folgenden Befehle an:

cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/mail.local
cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/mail-whois-lines.local
cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/mail-whois.local
cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/sendmail-buffered.local
cp /etc/fail2ban/action.d/mail-buffered.local /etc/fail2ban/action.d/sendmail-common.local

Starten Sie den fail2ban-Service neu

service fail2ban restart

und Sie werden ab sofort (nur noch) bei Banns, also neu blockierten IP-Adressen die durch fehlerhafte Loginversuche aufgefallen sind, informiert.

(optional) 7.2 Installation von Apticron inkl. Mailbenachrichtigungen

Apticron informiert Sie über verfügbare Systemaktualisierungen bzw. auch dann, wenn ihr System „up2date“ ist. Installieren Sie apticron aus den Standardsoftwarequellen Ubuntus:

apt update && apt upgrade -y && apt install apticron -y

Nun passen wir apticron an und ändern wenigstens die folgenden Parameter:

cp /etc/apticron/apticron.conf /etc/apticron/apticron.conf.bak
vi /etc/apticron/apticron.conf
...
EMAIL="ihre@mailadresse.de"
...
SYSTEM="your.dedyn.io"
...
NOTIFY_HOLDS="1"
...
NOTIFY_NO_UPDATES="1"
...
CUSTOM_SUBJECT="$SYSTEM: $NUM_PACKAGES package update(s)"
...
CUSTOM_NO_UPDATES_SUBJECT="$SYSTEM: no updates available"
...
CUSTOM_FROM="ihre@mailadresse.de"
...

Überprüfen Sie apticron und den soeben konfigurierten Mailversand indem sie apticron aufrufen:

apticron

Sie erhalten nun umgehend eine Mailbenachrichtigungen über Ihren aktuellen Systemzustand. Passen Sie zuletzt noch den Cronjob an, um sich regelmäßig und automatisch benachrichtigen zu lassen:

cp /etc/cron.d/apticron /etc/cron.d/apticron.bak
vi /etc/cron.d/apticron
30 7 * * * root if test -x /usr/sbin/apticron; then /usr/sbin/apticron --cron; else true; fi

Apticron würde Sie am obigen Beispiel jeden Morgen um 07.30 Uhr per Mail über Ihren Systemaktualitätsgrad informieren.

(optional) 7.3 Mailbenachrichtigungen bei SSH-Einwahl

Passen Sie die Profildatei an und erweitern diese am Ende um die folgenden Zeilen:

nano /etc/profile
if [ -n "$SSH_CLIENT" ]; then
        echo 'Login on' `hostname` `date` `who -m` | mail -s "Login on `hostname` from `echo $SSH_CLIENT |
        awk '{print $1}'`" ihre@mailadresse.de
fi

Bei jeder erfolgreichen SSH-Einwahl werden Sie ab sofort aktiv benachrichtigt.

Die Installation und Absicherung Ihres Nextcloudservers wurde erfolgreich abgeschlossen und so wünsche ich Ihnen viel Spaß mit Ihren Daten in Ihrer privaten Cloud. Über eine Spende würden sich meine Frau, meine Zwillinge und ich sehr freuen!

© Carsten Rieger IT-Services

Carsten Rieger

Carsten Rieger ist ein angestellter Senior IT-Systemengineer und zudem auch als Kleinunternehmer (Freelancer) aktiv. Er arbeitet seit mehr als 15 Jahren im Linux- und Microsoftumfeld, ist ein Open Source Enthusiast und hoch motiviert, Linux Installationen und Troubleshooting durchzuführen. Dabei arbeitet er vorrangig mit Debian und Ubuntu Linux, Nginx und Apache Webservern, MariaDB/MySQL/PostgreSQL, PHP, Cloud Infrastrukturen (bspw. Nextcloud) und auch vielen anderen Open Source Projekten (bspw. Roundcube). Zudem engagiert er sich ehrenamtlich für die Dr. Michael & Angela Jacobi Stiftung - und das schon seit mehr als 7 Jahren.