Dans ce tuto, nous allons installer Nextcloud, fork de ownCloud, sur un raspberrypi. Les données seront stockées sur une clé usb, la base de donnée utilisée est mariadb la version de php installée sera php7. Le serveur sera securisé grâce à fail to ban et ufw (uncomplicated fire wall). La connexion sera sécurisée grâce à un certificat let's encrypt. Ce tuto part du principe que vous avez déjà un nom de domaine. Si vous n'en avez pas, vous pouvez utiliser no-ip ou un autre fournisseur de ce type de service et adapter le tuto à vos besoins (très simple).
Premièrement la clé usb qui acceuillera vos données doit etre insérée et montée automatiquement à chaque (re)boot.
1) Brancher votre clé ou votre disque externe.
2) Ma clé était formatée en NTFS, installons le paquet qui permet de travailler avec ce système de fichiers:
3) Créer le répertoire qui va accueillir le "mount" du disque:
4) Monter le disque dans notre répertoire fraichement créé au point précédent (cette commande est valable pour le système de fichiers NTFS, pour tout autre système de fichier que vous souhaitez utiliser, changer la commande comme il se doit):
5) Trouver le UUID du disque USB que nous venons de brancher au point 18, c'est une suite de chiffres ressemblant à ça:4264E66D64E66361 normalement en bleu et associé à sda1 avec la commande ci-dessous:
6) Si comme moi, vous êtes nul et que vous avez de gros doigts gras qui ne vous obéissent pas toujours comme vous le souhaiteriez, choisir la sécurité et faire un backup du fichier fstab:
7) Editer fstab et ajouter le UUID de votre clé ou disque externe USB que vous avez trouvé au point 22 (vous suivez?):
Ne pas effacer ce qui est déjà dans le fichier, mais copier-coller cette ligne tout en bas (remplacer le UUID de cette ligne par celui de votre disque)
8) Reboot du Pi et vérifier si la clé est montée correctement
9) Installer Apache2
10) Pour installer PHP7 il faut ajouter le dépôt
11) ajouter la ligne suivante
12) Créer un fichier pour continuer
13) Coller ces lignes
14) Installer php7 et tout ce qu'il faut pour que la cache soit activée et que ça fonctionne avec mariadb, exécuter les commandes suivantes dans l'ordre:
15) Installer MariaDB:
16) Créer une redirection vers l'installation de Nextcloud
Ajouter la ligne suivante où "nextcloud.nomdedomaine.com." doit être l'adresse qui pointe sur votre serveur.
17) Installer Nextcloud:
18) Ajuster les permissions grâce à un script:
Coller le code suivant dans le fichier créé
Rendre le script exécutable et le lancer
19) Configurer Apache2 en modifiant le fichier nextcloud.conf
Coller ceci dans le fichier:
Puis lancer dans l'ordre les commandes suivantes:
20) Mettre en place la base de données en commençant par se loguer en root à la base de données:
Puis lancer les commandes suivantes dans l'ordre. Je vous conseille fortement de remplacer MOTDEPASSE par un mot de passe fort de votre cru, souvenez-vous en, nous en aurons besoin plus tard.
21) Mettre en place le certificat ssl de let's encrypt:
Copier la ligne suivante au bas du fichier:
22) Si tout s'est bien passé, nous sommes prêts à nous connecter à notre interface pour terminer l'installation de Nextcloud par la génération des fichiers de configuration.
Ouvrir votre navigateur préféré et taper l'adresse qui devrait vous amener à votre cloud. Créer un utilisateur d'administration et changer le chemin des données pour pointer le disque usb.
En ce qui concerne la base de données, renseigner les champs comme ceci, en utilisant le mot de passe que vous avez choisi à l'étape 20
Si il y a un message d'erreur signalant que le dossier des données ne peut pas être écrit, ça m'est arrivé, essayer ceci:
23) Activer le Mem Cache, cela peut paraître facultatif et le serveur fonctionnera sans, mais ce sera plus lent et vous aurez des messages d'erreur dans la console d'administration...
Juste avant ); insérer:
24) Un petit "clean" qui ne fera pas de mal... ;)
25) Définir la taille maximale de fichiers
Trouver la ligne php_value upload_max_filesize 512M et la ligne php_value post_max_size 512M
Changer les deux valeurs à celle souhaitée, si souhaité utiliser G pour gigas à la place de M
Trouver la ligne upload_max_filesize=512M et post_max_size=512M
Changer les valeurs par la même que défini à l'étape précédente et ne pas oublier de changer le M en G, si besoin...
26) Éviter les attaques de l'homme du milieu:
A la fin du fichier, ajouter ce qui suit:
27) Reboot et vérification que tout fonctionne bien
Félicitations! Vous avez fait un grand pas pour vous éloigner des GAFAM! La route n'a pas été si difficile, n'est-ce pas?
Maintenant, avec plus d'indépendance et de liberté, viennent immanquablement plus de responsabilités. Vous êtes responsables de votre matériel et de vos données. A vous de faire en sorte que tout fonctionne comme souhaité et que vos données soient raisonnablement protégées contre les regards indiscrets. La suite du tutoriel est à votre on vouloir et n'est en aucun cas obligatoire pour que le serveur fonctionne bien. Cependant, je vous encourage vivement de le suivre. Je ne suis pas un expert en sécurité et il y a peut-être des aberrations (merci de les relever dans les commentaires)... Faites vos propres recherches et agissez en fonction.
28) Installer et activer fail2ban pour les logins (Basé sur: https://forum.owncloud.org/viewtopic.php?f=8&t=28678):
Puis créer un fichier nextcloud.conf:
Coller dans ce fichier les lignes suivantes:
Créer un fichier jail.local:
Coller dans ce fichier les lignes suivantes:
Activer fail2ban par cette suite de commandes:
Vérifier périodiquement les logs de fail2ban:
29) Installer ufw (uncomplicated firewall):
Rejeter par défaut tous les paquets:
Il peut être utile de désactiver les IP v6, à voir si cela vous est utile...
Permettre la connexion SSH depuis le réseau local uniquement. Si votre réseau local n'est pas 192.168.1.0/24 , il faut modifier le code suivant à votre convenance.
Permettre le port 443 pour le https depuis internet.
Activer le firewall:
Vérifier le statut de ufw:
Premièrement la clé usb qui acceuillera vos données doit etre insérée et montée automatiquement à chaque (re)boot.
1) Brancher votre clé ou votre disque externe.
2) Ma clé était formatée en NTFS, installons le paquet qui permet de travailler avec ce système de fichiers:
sudo apt-get install ntfs-3g
3) Créer le répertoire qui va accueillir le "mount" du disque:
sudo mkdir /media/cloudata
4) Monter le disque dans notre répertoire fraichement créé au point précédent (cette commande est valable pour le système de fichiers NTFS, pour tout autre système de fichier que vous souhaitez utiliser, changer la commande comme il se doit):
sudo mount -t ntfs-3g -o uid=1000,gid=1000,umask=007 /dev/sda1 /media/cloudata
5) Trouver le UUID du disque USB que nous venons de brancher au point 18, c'est une suite de chiffres ressemblant à ça:4264E66D64E66361 normalement en bleu et associé à sda1 avec la commande ci-dessous:
ls -l /dev/disk/by-uuid/
6) Si comme moi, vous êtes nul et que vous avez de gros doigts gras qui ne vous obéissent pas toujours comme vous le souhaiteriez, choisir la sécurité et faire un backup du fichier fstab:
sudo cp /etc/fstab /etc/fstab.backup
7) Editer fstab et ajouter le UUID de votre clé ou disque externe USB que vous avez trouvé au point 22 (vous suivez?):
sudo nano /etc/fstab
Ne pas effacer ce qui est déjà dans le fichier, mais copier-coller cette ligne tout en bas (remplacer le UUID de cette ligne par celui de votre disque)
UUID=4264E66D64E66361 /media/owncloud ntfs-3g uid=1000,gid=1000,umask=007 0 0
8) Reboot du Pi et vérifier si la clé est montée correctement
mount
9) Installer Apache2
sudo apt-get install apache2 -y
10) Pour installer PHP7 il faut ajouter le dépôt
sudo nano /etc/apt/sources.list
11) ajouter la ligne suivante
deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi
12) Créer un fichier pour continuer
sudo nano /etc/apt/preferences
13) Coller ces lignes
Package: *
Pin: release n=jessie
Pin-Priority: 600
14) Installer php7 et tout ce qu'il faut pour que la cache soit activée et que ça fonctionne avec mariadb, exécuter les commandes suivantes dans l'ordre:
sudo apt-get update
sudo apt-get install -t stretch php7.0 php7.0-curl php7.0-gd php7.0-fpm php7.0-cli php7.0-opcache php7.0-mbstring php7.0-xml php7.0-zip -y
sudo apt-get install php7.0-APC -y
sudo apt-get install mysql-server php7.0-mysql -y
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 reload
sudo apt-get install libxml2-dev php-zip php-dom php-xmlwriter php-xmlreader php-gd php-curl php-mbstring -y
sudo a2enmod rewrite
sudo service apache2 restart
15) Installer MariaDB:
sudo apt-get install mariadb-server -y
16) Créer une redirection vers l'installation de Nextcloud
cd /var/www/html
sudo nano index.html
Ajouter la ligne suivante où "nextcloud.nomdedomaine.com." doit être l'adresse qui pointe sur votre serveur.
<meta http-equiv="refresh" content="0; URL='http://nextcloud.nomdedomaine.com/nextcloud'" />
17) Installer Nextcloud:
cd /var/www/
sudo wget https://download.nextcloud.com/server/releases/nextcloud-10.0.0.zip
sudo unzip nextcloud-10.0.0.zip
sudo rm nextcloud-10.0.0.zip
cd /
18) Ajuster les permissions grâce à un script:
cd /home/pi
nano permissions.sh
Coller le code suivant dans le fichier créé
#!/bin/bash
ocpath='/var/www/nextcloud'
htuser='www-data'
htgroup='www-data'
rootuser='root'
printf "Creating possible missing Directories\n"
mkdir -p $ocpath/data
mkdir -p $ocpath/assets
mkdir -p $ocpath/updater
printf "chmod Files and Directories\n"
find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640
find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750
printf "chown Directories\n"
chown -R ${rootuser}:${htgroup} ${ocpath}/
chown -R ${htuser}:${htgroup} ${ocpath}/apps/
chown -R ${htuser}:${htgroup} ${ocpath}/assets/
chown -R ${htuser}:${htgroup} ${ocpath}/config/
chown -R ${htuser}:${htgroup} ${ocpath}/data/
chown -R ${htuser}:${htgroup} /media/cloudata
chown -R ${htuser}:${htgroup} ${ocpath}/themes/
chown -R ${htuser}:${htgroup} ${ocpath}/updater/
chown -R ${htuser}:${htgroup} /tmp
chmod +x ${ocpath}/occ
printf "chmod/chown .htaccess\n"
if [ -f ${ocpath}/.htaccess ]
then
chmod 0644 ${ocpath}/.htaccess
chown ${rootuser}:${htgroup} ${ocpath}/.htaccess
fi
if [ -f ${ocpath}/data/.htaccess ]
then
chmod 0644 ${ocpath}/data/.htaccess
chown ${rootuser}:${htgroup} ${ocpath}/data/.htaccess
fi
Rendre le script exécutable et le lancer
chmod +x permissions.sh
sudo ./permissions.sh
19) Configurer Apache2 en modifiant le fichier nextcloud.conf
cd /etc/apache2/sites-available
nano nextcloud.conf
Coller ceci dans le fichier:
Alias /nextcloud "/var/www/nextcloud/"
<Directory /var/www/nextcloud/>
Options +FollowSymlinks
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
</Directory>
Puis lancer dans l'ordre les commandes suivantes:
ln -s /etc/apache2/sites-available/nextcloud.conf /etc/apache2/sites-enabled/nextcloud.conf
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime
a2enmod ssl
a2ensite default-ssl
service apache2 reload
20) Mettre en place la base de données en commençant par se loguer en root à la base de données:
mysql -u root -p
Puis lancer les commandes suivantes dans l'ordre. Je vous conseille fortement de remplacer MOTDEPASSE par un mot de passe fort de votre cru, souvenez-vous en, nous en aurons besoin plus tard.
CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'MOTDEPASSE';
GRANT ALL PRIVILEGES ON nextcloud.* TO nextclouduser@localhost;
EXIT
21) Mettre en place le certificat ssl de let's encrypt:
sudo apt install git -y
cd /etc
sudo git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
sudo ./letsencrypt-auto
crontab -e
Copier la ligne suivante au bas du fichier:
30 1 * * 1 root /etc/letsencrypt/certbot-auto renew --quiet
22) Si tout s'est bien passé, nous sommes prêts à nous connecter à notre interface pour terminer l'installation de Nextcloud par la génération des fichiers de configuration.
Ouvrir votre navigateur préféré et taper l'adresse qui devrait vous amener à votre cloud. Créer un utilisateur d'administration et changer le chemin des données pour pointer le disque usb.
/media/cloudata
En ce qui concerne la base de données, renseigner les champs comme ceci, en utilisant le mot de passe que vous avez choisi à l'étape 20
nextclouduser
MOTDEPASSE
nextcloud
Si il y a un message d'erreur signalant que le dossier des données ne peut pas être écrit, ça m'est arrivé, essayer ceci:
sudo usermod -a -G pi www-data
23) Activer le Mem Cache, cela peut paraître facultatif et le serveur fonctionnera sans, mais ce sera plus lent et vous aurez des messages d'erreur dans la console d'administration...
sudo nano /var/www/nextcloud/config/config.php
Juste avant ); insérer:
'memcache.local' => '\OC\Memcache\APC',
24) Un petit "clean" qui ne fera pas de mal... ;)
sudo apt-get clean
25) Définir la taille maximale de fichiers
cd /var/www/nextcloud
sudo nano .htaccess
Trouver la ligne php_value upload_max_filesize 512M et la ligne php_value post_max_size 512M
Changer les deux valeurs à celle souhaitée, si souhaité utiliser G pour gigas à la place de M
sudo nano .user.ini
Trouver la ligne upload_max_filesize=512M et post_max_size=512M
Changer les valeurs par la même que défini à l'étape précédente et ne pas oublier de changer le M en G, si besoin...
26) Éviter les attaques de l'homme du milieu:
cd /etc/apache2
sudo nano apache2.conf
A la fin du fichier, ajouter ce qui suit:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
</IfModule>
27) Reboot et vérification que tout fonctionne bien
sudo reboot
Félicitations! Vous avez fait un grand pas pour vous éloigner des GAFAM! La route n'a pas été si difficile, n'est-ce pas?
Maintenant, avec plus d'indépendance et de liberté, viennent immanquablement plus de responsabilités. Vous êtes responsables de votre matériel et de vos données. A vous de faire en sorte que tout fonctionne comme souhaité et que vos données soient raisonnablement protégées contre les regards indiscrets. La suite du tutoriel est à votre on vouloir et n'est en aucun cas obligatoire pour que le serveur fonctionne bien. Cependant, je vous encourage vivement de le suivre. Je ne suis pas un expert en sécurité et il y a peut-être des aberrations (merci de les relever dans les commentaires)... Faites vos propres recherches et agissez en fonction.
28) Installer et activer fail2ban pour les logins (Basé sur: https://forum.owncloud.org/viewtopic.php?f=8&t=28678):
sudo apt-get install fail2ban
Puis créer un fichier nextcloud.conf:
sudo nano /etc/fail2ban/filter.d/nextcloud.conf
Coller dans ce fichier les lignes suivantes:
[Definition]
failregex={"reqId":".*","remoteAddr":".*","app":"core","message":"Login failed: '.*' \(Remote IP: '<HOST>'\)","level":2,"time":".*"}
ignoreregex =
Créer un fichier jail.local:
sudo nano /etc/fail2ban/jail.local
Coller dans ce fichier les lignes suivantes:
[nextcloud]
enabled = true
filter = nextcloud
# selectionner http, https ou les deux, en fonction de vos besoins:
port = http,https
# modifier le chemin des logs si besoin:
logpath = /var/www/nextcloud/data/nextcloud.log
Activer fail2ban par cette suite de commandes:
sudo service fail2ban start
sudo service fail2ban reload
sudo service fail2ban status
Vérifier périodiquement les logs de fail2ban:
nano /var/log/fail2ban.log
29) Installer ufw (uncomplicated firewall):
sudo apt install ufw
Rejeter par défaut tous les paquets:
sudo ufw default deny
Il peut être utile de désactiver les IP v6, à voir si cela vous est utile...
sudo nano /etc/default/ufw
Changer la ligne 7:
IPV6=no
Permettre la connexion SSH depuis le réseau local uniquement. Si votre réseau local n'est pas 192.168.1.0/24 , il faut modifier le code suivant à votre convenance.
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 22
Permettre le port 443 pour le https depuis internet.
sudo ufw allow 443/tcp
Activer le firewall:
sudo ufw enable
Vérifier le statut de ufw:
sudo ufw status