Die Cloud ist heutzutage nicht mehr weg zu denken. Aber wie sichert man seine Daten richtig ab? Derzeit gibt es Cloudanbieter an jeder Ecke, Google, Apple, Dropbox, Onedrive, AWS. Nach den letzten News um Alexa und Google Assistent, indem Gespräche des heimischen Umfelds mitgehört worden sind, ist die Angst ob privat abgelegte Daten in der Cloud eines großen Anbieters wirklich sicher sind, allgegenwärtig.
Deshalb geht der Gedanke hin zur eigenen Cloud, wie sich das ganze umsetzen lässt wollen wir hier Schritt für Schritt erläutern. Wir werden hier die Nextcloud in Angriff nehmen.
Alles was Ihr dafür braucht, ist ein eigener Server zuhause, der mit fester IpAdresse oder einer Dynamischen DNS (DYNDNS) mit eurer Domain (bsp: cloud.euredomain.de) verheiratet ist. Oder Ihr nutzt eine gemietete V-Serverlösung, sie senkt die heimischen Stromkosten und ist preislich echt okay. Wir empfehlen da ganz deutlich netcup, Netcup hebt sich Preislich sehr von der Konkurrenz ab und bietet zudem noch massig Extras, wie z.b Extra Storage welcher sich in den Server Mounten lässt.
Es gibt 2 Möglichkeiten um einen Cloudserver zu betreiben, als erstes schauen wir uns die Bare-Metal Variante an. Bei der Bare-Metal Variante sprechen wir von der blanken Installation der Cloud auf der Maschine.
Die 2. Variante ist der Betrieb der Nextcloud im Docker via Reverse-Proxy, diese variante ist Deutliche sicherer, als eine Bare-Metal Installation. Bei der Docker Variante wird der Nextcloud Container über einen Reverse-Proxy angesprochen, aber dazu kommen wir in einem anderem Beitrag.
Vorbereiten der Maschine für den Cloudbetrieb.
Wir wählen für den Betrieb des Cloudservers Ubuntu in der Version 18.4 LTS (Unsere bewerte Distri). Wir installieren Ubuntu 18.4 als Minimal System, das einzige Paket welches wir mit installieren ist Open SSL, damit wir uns per Putty direkt drauf schalten können.
Wir befassen uns mit der Bare Metal Installation, nachdem wir die Minimal-Installation mit der Installation des Paketes Open SSL abgeschlossen haben, updaten wir das System.
sudo apt update && apt upgrade -y
Direkt nach der Installation des Betriebssystems legen wir einen neuen Benutzer an: sudo adduser
„Euer-neuer-Benutzername“ jetzt werdet Ihr aufgefordert ein Passwort zu vergeben, dies wiederholt ihr danach. Die restlichen eingaben könnt Ihr leer lassen.
Jetzt da wir einen neuen Benutzer haben verpassen wir diesem Benutzer ROOT-Rechte dafür öffnen wir die Sudoers Datei.sudo vim /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
Euer-neuer-Benutzer ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Nachdem wir dem neuen Benutzer mit Root Rechten versorgt haben, loggen wir uns aus und melden uns per Putty mit dem neuem Benutzer neu an. Jetzt deaktivieren wir das Passwort von ROOT damit sich niemand mehr mit dem Linux Standarduser anmelden kann. sudo passwd -l root
Wenn wir das gemacht haben öffnen wir die Shadow-Datei und löschen den Hashwert des Users root.
sudo vim /etc/shadow
Wir löschen alles was hinter dem : bei root steht, bis hin zum erstem : vor der Zahlenfolge.
VORHER:
root:$6$U8/18wG.$c2utCizkDC0LPDxussOAASEg8blki4NkoFs.fudQNkw0iefRy1QEViTJteQ3MI8A03UlQjdoDEIc0ddrweHRV1:18307:0:99999:7::::18295:0:99999:7:::
daemon:*:17937:0:99999:7:::
Nachher:
root:!:18295:0:99999:7:::
daemon:*:17937:0:99999:7:::
Wir verlassen den Vim Editior wieder mit :wq! Enter
Jetzt machen wir uns Gedanken was wir für den Betrieb des Cloudservers alles benötigen.
- Webserver
- Datenbankserver
- PHP + PHP Repository
- IP-Tables (Kernel Firewall)
- Fail2Ban (Intrusion Prevention System)
Wir installieren als erstes unseren altbekannten Webserver in diesem Fall den Apache2. Bei Apache 2 handelt es um einen der ältesten und lange Zeit um den mit Abstand wichtigsten Webserver des Internets.sudo apt install apache2
Da wir hier nur eine Cloud betreiben deaktivieren wir das „directrory listing“ dies ist wichtig. Denn für ein Verzeichnis, welches nicht über eine Datei „index.html“ oder „index.php“ verfügt, liefert der Apache-Webserver in der Regel eine Fehlermeldung. Unter Umständen ist dies jedoch nicht der Fall, was dazu führt, dass der Server den Verzeichnisinhalt anzeigt. Bei öffentlichen Servern ist dies ungewünscht und recht ärgerlich. Glücklicherweise existiert ein weg dies zu umgehen, naja eigentlich existieren 2 Methoden, aber hier geht es nur um das listing. Über die Konfiguration des Apache-Webservers ist das Abstellen des Verzeichnis-Listings sehr einfach. Die Konfiguration ist in der Regel in der Datei „httpd.conf“ zu finden. Bei Linux kann die Bezeichnung der Datei abweichen – als Administrator solltest du den Namen deiner Konfigurationsdatei jedoch kennen und sie entsprechend schnell finden können, bei Linux ist es Standardmäßig die dabei Apache2.conf.sudo sed -i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/apache2/apache2.conf
Nachdem wir das Verzeichnis Listing abgestellt haben starten wir den Webserver mit folgenden Befehl.sudo start apache2.service
alternative auch sudo /etc/init.d/apache2 start
Nachdem der Webserver Ordnungsgemäß läuft, installieren wir den Datenbankserver. Wir haben uns auch diesmal für die MariaDB entschieden, alternativ kann aber auch der MYSQL-Server genommen werden.sudo apt install mariadb-server mariadb-client
Konfiguration des MariaDB Serverssudo mysql_secure_installation
Enter current password for root (enter for none): Just press the Enter
Set root password? [Y/n]: Y
New password: Enter password
Re-enter new password: Repeat password
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
Im Anschluss wird der Datenbankserver neugestartet.sudo systemctl restart mariadb.service
Im Anschluss installieren wir die benötigten PHP Modulesudo apt install software-properties-common
add-apt-repository ppa:ondrej/phpsudo apt update
apt install php7.2 libapache2-mod-php7.2 php7.2-common php7.2-gmp php7.2-curl php7.2-intl php7.2-mbstring php7.2-xmlrpc php7.2-mysql php7.2-gd php7.2-xml php7.2-cli php7.2-zip
Nachdem wir die PHP Module installiert haben, konfigurieren wir die php.ini Datei. Diese Datei muss zwingend konfiguriert werden, denn hier wird festgelegt welche Zeitzone, Größe der Dateien die Hochgeladen werden dürfen, oder ob Dateien überhaupt hochgeladen werden dürfen.
sudo vim /etc/php/7.2/apache2/php.ini
In der vim Konsole navigieren wir zu folgenden Bereichen, wir drücken Enter / und geben die Textzeile ein die wir suchen und drücken wieder Enter.
file_uploads = On
allow_url_fopen = On
memory_limit = 256M
upload_max_filesize = 100M
display_errors = Off
date.timezone = Europe/Berlin
Im Anschluss an die Konfiguration, der php.ini befassen wir und mit der Konfiguration der Datenbank, wie ich bereits in unserem Beitrag über WordPress geschrieben habe nutzen wir hierfür unsere Login Daten welche wir bei der Installation des Datenbankservers festgelegt haben.mysdql -u euer angelegter benutzer -p
Jetzt da wir in der Datenbank angemeldet sind, legen wir die Datenbank für die Nextcloud an.mysql> CREATE DATABASE nextcloud;
mysql> CREATE USER 'euer angelegter user'@'localhost' IDENTIFIED BY 'euer passwort'
;mysql> CREATE USER 'euer angelegter user'@'localhost' IDENTIFIED BY 'euer passwort'
;mysql> Flush privileges;
mysql> exit;
Somit hätten wir die Datenbank für die Cloud angelegt, im nächstem Step benötigen wir die aktuelle Version der Nextcloud, dafür surfen wir die Seite von Nextcloud an und speichern den Downloadlink.
Jetzt laden wir das Paket runter.cd /tmp && wget https://download.nextcloud.com/server/releases/nextcloud-18.0.1.zip
das Nextcloud Paket muss jetzt noch entpackt werden und an den richtigen Ort Kopiert werden.sudo unzip nextcloud
sudo mv nextcloud /var/www/nextcloud
Wie bereits in unserem Beitrag über WordPress beschrieben, funktioniert die Weiterleitung von cloud.euredomain.de nur richtig, wenn die Konfigurationsdatei vom Webserver richtig konfiguriert ist. Wie wir uns an die Konfiguration des Configfiles aus unserem WordPressbeitrag erinnern ist dies nicht sonderlich schwer aber wir erklären es hier noch einmal.
Wir Navigieren in den Ordner cd /ets/apache2/sites-available/nextcloud.conf
<VirtualHost *:80>
ServerAdmin eure@email.com
DocumentRoot /var/www/nextcloud/
ServerName cloud.euredomain.de
ServerAlias www.cloud.euredomain.de
Alias /nextcloud "/var/www/nextcloud/"
<Directory /var/www/nextcloud/>
Options +FollowSymlinks
AllowOverride All
Require all granted
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.cloud.euredomain.de [OR]
RewriteCond %{SERVER_NAME} =cloud.euredomain.de
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Abspeichern und Aktivieren
sudo a2ensite nextcloud.conf
sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod env
sudo a2enmod dir
sudo a2enmod mime
Jetzt müssen wir noch den Data Folder vorbereiten
cd /home
mkdir /home/data/
chown -R www-data:www-data /var/www/nextcloud/
Chown -R www-data:www-data /var/www/nextcloud/
chmod R 755 /var/www/nextcloud/
Jetzt starten wir den Webserver nochmal neu /etc/init.d/apache2 restart
und surfen die Seite an: cloud@euredomain.de und schließen die Einrichtung ab.
Damit ihr eure Domain auch mit einem SSL Zertifikat ausstatten könnte, gibt es eine Kostenlose Lösung vom Lets Encrypt Projet.
Installation von Certbot, damit Ihr euer Zertifikat auch beziehen könnt.sudo apt-get install python-certbot-apache
Zertifikatsbestellung:sudo certbot --apache -m euro@email.de -d cloud.euredomain.de
wählt bitte Option 2 damit, wird die Seite REDIRECTED.
Das Zertifikat was wir gerade bezogen haben, hat eine Gültigkeit von 90 Tagen, da heißt das unsere Seite alle 90 Tage das SSL Zertifikat verliert, damit dies nicht passiert legen wir einen Cronjob an der das Zertifikat automatisch alle 90 Tage verlängert.sudo crontab -e
wir fügen die folgende Codezeile unten an0 1 * * * /usr/bin/certbot renew & > /dev/nul
Jetzt ist die Cloud vernünftig eingerichtet und ihr könnt eure Cloud wie gewünscht nutzen. Wir werden demnächst noch ein Beitrag veröffentlichen wie wir die Nextcloud unter Docker Betreiben.
Absicherung der Cloud
Da die Cloud jetzt wie gewünscht eingerichtet ist, gehen wir noch kurz auf die Absicherung ein, um es kurz zu halten gibt es 2 einfache Varianten wie die Cloud fürs erste Abgesichert werden kann.
Step1:
Installation von IPTABLES falls diese noch nicht vorhanden sind, wir haben ein Script für euch vorbereitet, mit dem Ihr die Firewall vernünftig einstellen könnt.
Dieses Script könnt ihr hier herunter laden
Da jetzt die IPTables vernünftig eingestellt sind, widmen wir uns jetzt einem Intrusion Prevention System IPS es nennt sich Fail 2 Ban.
Step2:
Fail2ban (Fehlschlag führt zum Bann) ist ein in Python geschriebenes Intrusion Prvention System (Framework zur Vorbeugung gegen Einbrüche), das auf allen servern läuft das manipulierbare Paketfilersystem oder eine Firewall besitzen.
Quelle: Yarikoptic 2016
Um eventuell zu sehen, wie Angreifbar Ihr Cloudsystem ist empfiehlt es sich mit nmap einen Portscan durchzuführen,nmap -T4 -A -v cloud.euredomain.de
nun sind die Ports welche ein Potentielles Risiko darstellen aufgelistet, in unserem Fall sollten es 80 und 443 sein.
Installation von Fail2bansudo apt install fail2ban
Jetzt können wir in der Fail2ban die Konfiguration beginnen.
wir suchen in der Datei nach dem Eintrag http
diesen Editieren wir wie folgt:enable = true
port = 80,443
filter: http,https
logpath = /var/log/hattpd/access_log
maxretry = 5
findtime = 120
bantime = 3600
action = iptables [name=HTTP, port=http, protocol,tcp]
Dieser Eintrag kann auf alle Services angewendet, wie z.b ssh oder sshd [22]. Die oben angelegte Regel sagt aus, das die Anmeldung am Webserver 5x getätigt werden darf, abn dem 6. mal wir die Ipadresse des Anmeldenden für 3600 Sekunden gebannt. Die IpAdresse wird in den Chains der IP Tables auf die Banliste gesetzt, nach 3600 Sekunden wird die IP-Adresse wieder von der Banliste genommen und darf sich wieder anmelden.
Viel Spaß mit Eurer Nextcloud