Afficher/cacher Sommaire
ASRock QC5000M Quad-Core APU
Debian Stretch
Boot sur clé “debian 9”
Utilisation disque entier LVM (Sata SSD 120Go)
30Go ext4 root
80Go ext4 home
256Mo ext2 boot
Serveur SSH
Utilitaires usuels du système
Reboot
Connexion xoadmin
enp3s0 :
- adresse ip : 192.168.0.30
- mac add : 70:85:c2:53:cb:80
- inet6 : fe80::7285:c2ff:fe53:cb80
Mise à jour Debian et installation des utilitaires
Première connexion via SSH
ssh xoadmin@192.168.0.30
Màj
apt update && apt upgrade
Firmware Realtek
echo "deb http://httpredir.debian.org/debian/ stretch main contrib non-free" >> /etc/apt/sources.list
apt update
apt install firmware-realtek
Installer utilitaires
apt install rsync curl tmux jq figlet git mailutils dnsutils netcat -y
Droits d’accès sudo à l’utilisateur xoadmin
apt install sudo
echo "xoadmin ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
Configurer Locales (fr)
Locales : fr_FR.UTF-8
dpkg-reconfigure locales
Generating locales (this might take a while)...
fr_FR.UTF-8... done
Generation complete.
Europe/Paris (TimeZone tzdata)
Europe/Paris
dpkg-reconfigure tzdata
Current default time zone: 'Europe/Paris'
Local time is now: Tue Mar 5 15:48:25 CET 2019.
Universal Time is now: Tue Mar 5 14:48:25 UTC 2019.
Adressage ipv6
La carte n’est joignable de l’internet que par son adresse IPV6
NextHop Freebox permet d’attribuer une adresse IPV6
Adresse IPV6 Box fe80::224:d4ff:fea6:aa20
Préfixe : 2a01:e34:eebf:df5::/64
NextHop : fe80::7285:c2ff:fe53:cb80
sudo nano /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enp3s0
iface enp3s0 inet dhcp
# This is an autoconfigured IPv6 interface
# iface enp3s0 inet6 auto
iface enp3s0 inet6 static
address 2a01:e34:eebf:df5::1
netmask 64
post-up ip -6 route add default via fe80::224:d4ff:fea6:aa20 dev enp3s0
Redémarrer la machine
sudo systemctl reboot
Vérifier l’adresse inet6
ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
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: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 70:85:c2:53:cb:80 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.30/24 brd 192.168.0.255 scope global enp3s0
valid_lft forever preferred_lft forever
inet6 2a01:e34:eebf:df5::1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::7285:c2ff:fe53:cb80/64 scope link
valid_lft forever preferred_lft forever
3: enp4s0f0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 6c:b3:11:32:04:c8 brd ff:ff:ff:ff:ff:ff
4: enp4s0f1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 6c:b3:11:32:04:c9 brd ff:ff:ff:ff:ff:ff
Hostname xoyaz.xyz
_ _
| |__ ___ ___| |_ _ __ __ _ _ __ ___ ___
| '_ \ / _ \/ __| __| '_ \ / _` | '_ ` _ \ / _ \
| | | | (_) \__ \ |_| | | | (_| | | | | | | __/
|_| |_|\___/|___/\__|_| |_|\__,_|_| |_| |_|\___|
Modifier hostname
hostnamectl set-hostname --static xoyaz.xyz
Modifier /etc/hosts
nano /etc/hosts
127.0.0.1 localhost
127.0.1.1 xoyaz.xyz srvxo
...
Vérifications
hostnamectl
Static hostname: xoyaz.xyz
Icon name: computer-desktop
Chassis: desktop
Machine ID: 458ff564e0a049238e954906d88c7c32
Boot ID: 3b8498a5d3cd4872a6aab38d73824a9c
Operating System: Debian GNU/Linux 9 (stretch)
Kernel: Linux 4.9.0-4-amd64
Architecture: x86-64
hostname --fqdn
xoyaz.xyz
DNS OVH
Le domaine xoyaz.xyz pointe sur l’adresse IPV6 2a01:e34:eebf:df5::1
$TTL 3600
@ IN SOA dns106.ovh.net. tech.ovh.net. (2019030600 86400 3600 3600000 300)
3600 IN NS ns106.ovh.net.
3600 IN NS dns106.ovh.net.
3600 IN MX 10 xoyaz.xyz.
3600 IN AAAA 2a01:e34:eebf:df5::1
* 3600 IN CNAME xoyaz.xyz.
SSH avec clé
+
sur l'ordinateur de bureau
Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) nommé xoyaz pour une liaison SSH avec le serveur KVM.
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/xoyaz
Envoyer la clé publique sur le serveur KVM
scp ~/.ssh/xoyaz.pub xoadmin@192.168.0.30:/home/xoadmin/
sur le serveur **xoyaz**
Copier le contenu de la clé publique dans /home/$USER/.ssh/authorized_keys
$ cd ~
Sur le KVM ,créer un dossier .ssh
mkdir .ssh
cat /home/$USER/xoyaz.pub >> /home/$USER/.ssh/authorized_keys
et donner les droits
chmod 600 /home/$USER/.ssh/authorized_keys
effacer le fichier de la clé
rm /home/$USER/xoyaz.pub
Modifier la configuration serveur SSH
sudo nano /etc/ssh/sshd_config
Modifier
Port = 55034
PasswordAuthentication no
Relancer openSSH
sudo systemctl restart sshd
Accès depuis le poste distant avec la clé privée
ssh -p 55034 -i ~/.ssh/xoyaz xoadmin@192.168.0.30
Exécution script sur connexion SSH
Exécuter un fichier utilisateur nommé $HOME/.ssh/rc si présent
Pour tous les utilisateurs exécuter un fichier nommé /etc/ssh/sshrc si présent
Installer les utilitaires curl jq figlet
Créer dossier si connexion par clé non installée
mkdir -p ~/.ssh
Le batch
nano ~/.ssh/rc
#!/bin/bash
#clear
PROCCOUNT=`ps -Afl | wc -l` # nombre de lignes
PROCCOUNT=`expr $PROCCOUNT - 5` # on ote les non concernées
GROUPZ=`users`
ipinfo=$(curl -s ipinfo.io) # info localisation format json
publicip=$(echo $ipinfo | jq -r '.ip') # extraction des données , installer préalablement "jq"
ville=$(echo $ipinfo | jq -r '.city')
pays=$(echo $ipinfo | jq -r '.country')
cpuname=`cat /proc/cpuinfo |grep 'model name' | cut -d: -f2 | sed -n 1p`
iplink=`ip link show |grep -m 1 "2:" | awk '{print $2}' | cut -d: -f1`
echo "\033[0m\033[1;31m"
figlet "`hostname --fqdn`"
echo "\033[0m
\033[1;35m \033[1;37mHostname \033[1;35m= \033[1;32m`hostname`
\033[1;35m \033[1;37mWired IpV4 \033[1;35m= \033[1;32m`ip addr show $iplink | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1`
\033[1;35m \033[1;37mWired IpV6 \033[1;35m= \033[1;32m`ip addr show $iplink | grep -E 'inet6' |grep -E 'scope link' | awk '{print $2}' | cut -d/ -f1`
\033[1;35m \033[1;37mKernel \033[1;35m= \033[1;32m`uname -r`
\033[1;35m \033[1;37mDebian \033[1;35m= \033[1;32m`cat /etc/debian_version`
\033[1;35m \033[1;37mUptime \033[1;35m= \033[1;32m`uptime | sed 's/.*up ([^,]*), .*/1/' | sed -e 's/^[ \t]*//'`
\033[1;35m \033[1;37mCPU \033[1;35m= \033[1;32m`echo $cpuname`
\033[1;35m \033[1;37mMemory Use \033[1;35m= \033[1;32m`free -m | awk 'NR==2{printf "%s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'`
\033[1;35m \033[1;37mUsername \033[1;35m= \033[1;32m`whoami`
\033[1;35m \033[1;37mSessions \033[1;35m= \033[1;32m`who | grep $USER | wc -l`
\033[1;35m \033[1;37mPublic IpV4 \033[1;35m= \033[1;32m`echo $publicip`
\033[1;35m \033[1;37mPublic IpV6 \033[1;35m= \033[1;32m`ip addr show $iplink | grep -m 1 'inet6\b' | awk '{print $2}' | cut -d/ -f1`
\033[0m"
df -h /
#curl fr.wttr.in/$ville?0
Effacer motd
sudo rm /etc/motd
Déconnexion puis connexion
Certificats letsencrypt
Installation gestionnaire des certificats Let’s Encrypt
cd ~
sudo -s # en mode super utilisateur
apt install netcat socat # prérequis
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install # --nocron
cd ..
rm -rf acme.sh/
Se connecter sur l’api OVH pour les paramètres (clé et secret)
export OVH_AK="votre application key"
export OVH_AS="votre application secret"
Premier lancement pour la génération des certificats
/root/.acme.sh/acme.sh --dns dns_ovh --issue --keylength ec-384 -d xoyaz.xyz -d '*.xoyaz.xyz'
[...]
[mercredi 17 octobre 2018, 14:05:32 (UTC+0200)] Please open this link to do authentication: https://eu.api.ovh.com/auth/?credentialToken=FQGXWob9QI9m1yg8NlmPN0GZOJRKEzMLdlsPoIJT2o2WuWBikcsJIMyICk6Z8K0Z
[...]
Connecter l’url ci-dessus, s’authentifier puis sélectionner “unlimited” et valider.Le message suivant dit s’afficher.
OVH authentication Success !
Lancer une seconde fois la génération des certificats et patienter quelques minutes…
/root/.acme.sh/acme.sh --dns dns_ovh --issue --keylength ec-384 -d xoyaz.xyz -d '*.xoyaz.xyz'
Les certificats sont disponibles
[mardi 5 mars 2019, 16:48:13 (UTC+0100)] Your cert is in /root/.acme.sh/xoyaz.xyz_ecc/xoyaz.xyz.cer
[mardi 5 mars 2019, 16:48:13 (UTC+0100)] Your cert key is in /root/.acme.sh/xoyaz.xyz_ecc/xoyaz.xyz.key
[mardi 5 mars 2019, 16:48:14 (UTC+0100)] The intermediate CA cert is in /root/.acme.sh/xoyaz.xyz_ecc/ca.cer
[mardi 5 mars 2019, 16:48:14 (UTC+0100)] And the full chain certs is there: /root/.acme.sh/xoyaz.xyz_ecc/fullchain.cer
Pour un lancement manuel (ajout domaine, sous-domaine ou regénération des certificats)
sudo -s
/root/.acme.sh/acme.sh --dns dns_ovh --issue --keylength ec-384 -d xoyaz.xyz -d *.xoyaz.xyz
Un certificat Wildcard Let’s Encrypt qui se renouvelle automatiquement
crontab -l
18 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
Nginx PHP7 mariadb
Préalable
sudo apt install apt-transport-https
Script
sudo -s # Passer en mode super utilisateur (su ou sudo)
wget -O install.sh "https://static.xoyaz.xyz/files/debian9-compilation-nginx-tls1.3-php7.3-MariaDB.sh.txt" # Télécharger le script
chmod +x install.sh # Rendre le script exécutable
./install.sh # Exécuter le script
#******** Patienter **********
SSL xoyaz.xyz
Certificats sur les sites xoyaz.xyz
Ajout des certificats , création des liens
sudo ln -s /root/.acme.sh/xoyaz.xyz_ecc/fullchain.cer /etc/ssl/private/xoyaz.xyz-fullchain.pem
sudo ln -s /root/.acme.sh/xoyaz.xyz_ecc/xoyaz.xyz.key /etc/ssl/private/xoyaz.xyz-key.pem
Les fichiers de configurations ssl headers et nginx
sudo nano /etc/nginx/ssl_params
ssl_certificate /etc/ssl/private/xoyaz.xyz-fullchain.pem;
ssl_certificate_key /etc/ssl/private/xoyaz.xyz-key.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_prefer_server_ciphers on;
# Ciphers with modern compatibility
# New protocol TLSv1.3
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers 'TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
entêtes
sudo nano /etc/nginx/header_params
# Follows the Web Security Directives from the Mozilla Dev Lab and the Mozilla Obervatory + Partners
# https://wiki.mozilla.org/Security/Guidelines/Web_Security
# https://observatory.mozilla.org/
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header Content-Security-Policy "upgrade-insecure-requests";
add_header Content-Security-Policy-Report-Only "default-src https: data: 'unsafe-inline' 'unsafe-eval'";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header X-Frame-Options "SAMEORIGIN";
On change le dossier racine
sudo mkdir /var/www/default-www
sudo mv /var/www/{index.html,info.php} /var/www/default-www/
Configuration de base avec SSL et sécurité + letsencrypt (renouvellement)
sudo nano /etc/nginx/conf.d/xoyaz.xyz.conf
server {
listen 80;
listen [::]:80;
## redirect http to https ##
server_name xoyaz.xyz;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name xoyaz.xyz;
#### Locations
# On cache les fichiers statiques
location ~* \.(html|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; }
# On interdit les dotfiles
location ~ /\. { deny all; }
include ssl_params;
include header_params;
# Diffie-Hellmann
# Uncomment the following directive after DH generation
# > openssl dhparam -out /etc/ssl/private/dh4096.pem -outform PEM -2 4096
# ssl_dhparam /etc/ssl/private/dh4096.pem;
root /var/www/default-www ;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.3-fpm.sock; # PHP7.3
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
# if folder xoyaz.xyz.d , uncomment the following directive
#include conf.d/xoyaz.xyz.d/*.conf;
access_log /var/log/nginx/xoyaz.xyz-access.log;
error_log /var/log/nginx/xoyaz.xyz-error.log;
}
Effacer ancien fichier de config
sudo rm /etc/nginx/conf.d/default.conf
Vérifier et relancer nginx
sudo nginx -t
sudo systemctl restart nginx
Vérifier le lien https://xoyaz.xyz , le tls 1.3
parefeu (iptables V4 V6)
NOTE : Tous les ports sont OUVERTS en SORTIE vers l’extérieur
Le script de base /usr/local/sbin/config_firewall
#!/bin/sh
###################
# IPv4 #
###################
# refuser input et forward par défaut, accepter output
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT
# interface lo (loop) accessible
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# accepter en entrée le ping (icmp), et les
# connexions sur les ports nécessaires.
iptables -A INPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 55034 -j ACCEPT
iptables -A INPUT -p udp --dport 55034 -j ACCEPT
# accepter en sortie le ping, les requêtes HTTP(S), DNS,
# et les connexions sur les ports nécessaires.
iptables -A OUTPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
###################
# IPv6 #
###################
# refuser input et forward par défaut, accepter output
ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P FORWARD DROP
ip6tables -t filter -P OUTPUT ACCEPT
# interface lo (loop) accessible
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT
# maintenir les connexions établies
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# NDP pour toute interface de type broadcast
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
# accepter en entrée le ping (icmpv6), les
# connexions entrantes déjà établies et les connexions sur les ports nécessaires.
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 55034 -j ACCEPT
ip6tables -A INPUT -p udp --dport 55034 -j ACCEPT
# accepter en sortie le ping, les requêtes HTTP(S), DNS,
# et les connexions sur les ports nécessaires.
ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport 443 -j ACCEPT
Script
chmod +x /usr/local/sbin/config_firewall # droits en exécution
/usr/local/sbin/config_firewall # exécution
iptables -L # affiche règles ipv4
ip6tables -L # affiche règles ipv6
apt-get install iptables-persistent # pour la persistance au redémarrage
IPV4 statique
Modifier la configuration réseau pour avoir une adresse ip statique
sudo nano /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug enp3s0
iface enp3s0 inet static
address 192.168.0.30
netmask 255.255.255.0
gateway 192.168.0.254
# IPv6 interface
iface enp3s0 inet6 static
address 2a01:e34:eebf:df5::1
netmask 64
post-up ip -6 route add default via fe80::224:d4ff:fea6:aa20 dev enp3s0
Relancer le service
sudo service networking restart
Vérifier
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
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: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 70:85:c2:53:cb:80 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.30/24 brd 192.168.0.255 scope global enp3s0
valid_lft forever preferred_lft forever
inet6 2a01:e34:eebf:df5::1/64 scope global
valid_lft forever preferred_lft forever
inet6 2a01:e34:eebf:df0:7285:c2ff:fe53:cb80/64 scope global mngtmpaddr dynamic
valid_lft 84689sec preferred_lft 84689sec
inet6 fe80::7285:c2ff:fe53:cb80/64 scope link
valid_lft forever preferred_lft forever
3: enp4s0f0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 6c:b3:11:32:04:c8 brd ff:ff:ff:ff:ff:ff
4: enp4s0f1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 6c:b3:11:32:04:c9 brd ff:ff:ff:ff:ff:ff
DNS Unbound
On ne peut plus modifier le fichier /etc/resolv.conf , pour ajouter des serveurs dns à celui en place (127.0.0.1) , il faut ajouter la ligne suivante (après la ligne ‘gateway’) au fichier ** /etc/network/interfaces**
dns-nameservers 127.0.0.1 9.9.9.9 80.67.169.12 80.67.169.40
Adaptater vos serveurs dns séparés par un espace sauf le premier de la liste. dns-nameservers prend toujours un s
Postfix pour uniquement envoyer des messages
- Postfix en tant que serveur SMTP d’envoi message uniquement sur Debian 9
- Opendkim ,identifier ses mails avec le principe DKIM
Configuration dns et box
DNS OVH (spf et dkim) pour tenir compte de la messagerie
$TTL 3600
@ IN SOA dns106.ovh.net. tech.ovh.net. (2019030604 86400 3600 3600000 300)
3600 IN NS dns106.ovh.net.
3600 IN NS ns106.ovh.net.
3600 IN MX 10 xoyaz.xyz.
IN A 78.235.240.223
3600 IN AAAA 2a01:e34:eebf:df5::1
600 IN TXT "v=spf1 a mx ip4:78.235.240.223 ip6:2a01:e34:eebf:df5::1 -all"
* 3600 IN CNAME xoyaz.xyz.
mail._domainkey 3600 IN TXT ( "v=DKIM1; k=rsa; h=sha256; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoL+I8An+opPnV+qZe3fAzrAwDtwiPFAXtcgO1979kILy0wFLC0S+g2hzGSkaZAtwD27MWPR+IlSkEFeXhRwsVPM5Ryu7yeEap+mj9B8oqhoPTQP9UNR8b2YJxoc86WakuTTjJUykJ2EU8K4JX3PYRiYd2n9CKEIBy1/mWZnzmOtN047K8q" "MkXV2csZ+si4U1PhXy3tI4n1sHU6iiXNwydecsGdhoMlk18jfiQx0a2He+rKxSN4iUbfO1J+9rAWZZHLecV0nukJUbzpD32+2dW3Zx545hVVaUvhZCARAZc8BH53c4lWjn37coZLmLTQhdhS8tH4wev0pN0hyNicf6yQIDAQAB" )
Box
- Reverse DNS : xoyaz.xyz
- DMZ : 192.168.0.30
- Déblocage SMTP (port 25 ouvert)
- DNS 1 2 3 : 9.9.9.9 80.67.169.12 80.67.169.40
NFS serveur
NFS (pour Network File System, système de fichiers en réseau) est un protocole qui permet à un ordinateur d’accéder à des fichiers via un réseau local.
Installation NFS
on passe en mode su
sudo -s
Installation
apt install nfs-kernel-server
Vérification serveur
rpcinfo -p | grep nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
Vérifier que le système supporte effectivement NFS
cat /proc/filesystems | grep nfs
nodev nfsd
Si la commande précédente ne renvoie rien, il se peut que le module NFS ne soit pas chargé, auquel cas, il faut le charger modprobe nfs
Enfin, vérifions que portmap attend les instructions sur le port 111
rpcinfo -p | grep portmap
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
Configuration du partage
Espace disque
df -h |grep "mapper"
/dev/mapper/svrxo--vg-root 28G 2,8G 24G 11% /
/dev/mapper/svrxo--vg-home 75G 53M 71G 1% /home
Créer un dossier data dans home
mkdir ~/{data,srv}
Passage en su
sudo -s
indiquer au serveur les répertoires qui seront partagés, les machines qui y auront accès et les conditions de ce partage.
nano /etc/exports
Ajouter en fin de fichier /etc/exports
# Premier disque
/home/xoadmin/data 192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
/home/xoadmin/srv 192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
Sécurisation NFS
Passage en su
sudo -s
Le protocole RPC n’a pas la réputation d’être bien sécurisé, mais la version 4 de NFS entend corriger ce problème, elle est donc à privilégier. Il est déconseillé d’effectuer un partage NFS via internet, ou bien dans ce cas, opter pour un tunnel crypté.
- S’assurer que les partages sont réservés à certaines IP dans /etc/exports
- S’appuyer sur rpcbind (/etc/hosts.deny et /etc/hosts.allow) pour sécuriser l’accès au serveur NFS
- Configurer convenablement iptables
hosts.deny , hosts.allow
Tout le monde est interdit, puis le LAN est autorisé:
echo "rpcbind mountd nfsd statd lockd rquotad : ALL" >> /etc/hosts.deny
echo "rpcbind mountd nfsd statd lockd rquotad: 192.168.0." >> /etc/hosts.allow
iptables (NFS)
Par défaut, les différents services NFS (lockd, statd, mountd, etc.) demandent des assignations de ports aléatoires à partir du portmapper (portmap/rpcbind), ce qui signifie que la plupart des administrateurs doivent ouvrir une gamme de ports dans leur base de règles de pare-feu pour que NFS fonctionne.
Il va donc falloir fixer les ports de ces services afin de créer les règles iptables.
echo 'STATDOPTS="--port 32765 --outgoing-port 32766"' >> /etc/default/nfs-common
echo 'RPCMOUNTDOPTS="-p 32767"' >> /etc/default/nfs-kernel-server
echo 'RPCRQUOTADOPTS="-p 32769"' >> /etc/default/quota
Relance sysctl
sysctl --system
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.conf ...
Relancer le service
systemctl restart nfs-kernel-server
Nous pouvons maintenant fixer nos règles manuellement
iptables -A INPUT -s 192.168.0.0/24 -p tcp -m multiport --ports 111,2049,32764:32769 -j ACCEPT -m comment --comment "NFS Server"
iptables -A INPUT -s 192.168.0.0/24 -p udp -m multiport --ports 111,2049,32764:32769 -j ACCEPT -m comment --comment "NFS Server"
On sauve les règles
iptables-save > /etc/iptables/rules.v4
Configuration d’un client NFS
Prérequis : NFS installé (https://wiki.archlinux.fr/NFS)
Visualiser les volumes accessibles
showmount -e 192.168.0.30
Export list for 192.168.0.30:
/home/xoadmin/data 192.168.0.0/24
Créer un dossier pour le montage
sudo mkdir /mnt/xoyaze
Donner les droits utilisateurs
sudo chown $USER.users -R /mnt/xoyaze
Montage manuel
sudo mount -t nfs4 -o rw 192.168.0.30:/home/xoadmin/data /mnt/xoyaze
Test lecture écriture
touch /mnt/xoyaze/test.txt
Ne doit générer aucune erreur
Montage auto , ajouter en fin de fichier /etc/fstab
192.168.0.30:/mnt/xoyaze /mnt/xoyaze nfs4 noauto,x-systemd.automount 0 0
Client avec autofs
Il suffit seulement de renseigner /etc/hosts avec la ligne suivante
192.168.0.30 srvxo
Vérifier
ls -l /net/srvxo/home/xoadmin/
total 0
drwxr-xr-x 2 root root 0 6 mars 17:06 data
drwxr-xr-x 2 root root 0 6 mars 17:06 srv
Portail xoyaz.xyz
Les fichiers html5 et autres sont dans le dossier /home/xoadmin/srv/default-www
On va créer un lien avec le dossier par défaut du site
sudo rm -r /var/www/default-www # on supprime le dossier existant
sudo ln -s /home/xoadmin/srv/default-www /var/www/default-www # création du lien
Test vulnérabilité
Quality SSL Labs https://www.ssllabs.com/ssltest/analyze.html?d=xoyaz.xyz
SSL Report: xoyaz.xyz
Assessed on: Thu, 07 Mar 2019 14:01:42 UTC
Mozilla observatory https://observatory.mozilla.org/analyze.html?host=xoyaz.xyz
Content Security Policy -20 Content Security Policy (CSP) implemented unsafely.
srvxo (xoyaz.xyz)- Ajout de 3 disques LVM
/home/yannick/nas-one-yanplus/dplus/statique/images/crucial-ssd.png
Ajout de 3 disques LVM , SATA 3”5 4To et 2 SSD Crucial 512Go
Après mise en place physique des 3 éléments , on se connecte au serveur
les disques
Les disques LVM
sudo -s
pvs
pvs
PV VG Fmt Attr PSize PFree
/dev/sda5 svrxo-vg lvm2 a-- 111,55g 0
/dev/sdb3 vg-nas-one lvm2 a-- 3,64t 677,72g
/dev/sdc1 vg-ssd-two lvm2 a-- 111,79g 0
/dev/sdd3 vg-ssd-one lvm2 a-- 446,85g 142,85g
vgs
VG #PV #LV #SN Attr VSize VFree
svrxo-vg 1 3 0 wz--n- 111,55g 0
vg-nas-one 1 3 0 wz--n- 3,64t 677,72g
vg-ssd-one 1 5 0 wz--n- 446,85g 142,85g
vg-ssd-two 1 1 0 wz--n- 111,79g 0
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home svrxo-vg -wi-ao---- 76,18g
root svrxo-vg -wi-ao---- 27,94g
swap_1 svrxo-vg -wi-ao---- 7,43g
sav vg-nas-one -wi-a----- 500,00g
video vg-nas-one -wi-a----- 2,00t
yanplus vg-nas-one -wi-a----- 500,00g
data vg-ssd-one -wi-a----- 100,00g
home vg-ssd-one -wi-a----- 75,00g
musique vg-ssd-one -wi-a----- 100,00g
root vg-ssd-one -wi-a----- 25,00g
swap vg-ssd-one -wi-a----- 4,00g
lv-ssd-two vg-ssd-two -wi-a----- 111,79g
Les UUID
blkid
/dev/sda1: UUID="0b3181c7-e410-4b18-9611-c809fedbeb3c" TYPE="ext2" PARTUUID="8f806fa7-01"
/dev/sda5: UUID="ooWgEh-AHL4-naPs-s2eN-dw4T-Yuxx-ak42Lb" TYPE="LVM2_member" PARTUUID="8f806fa7-05"
/dev/sdb1: PARTLABEL="BIOS boot partition" PARTUUID="ed937de2-0476-4053-b61d-2762f585b06e"
/dev/sdb3: UUID="nLFric-2HkM-T6TB-u6Hk-svmd-qgcw-3jaNUq" TYPE="LVM2_member" PARTLABEL="Linux LVM" PARTUUID="14c9fbd9-577a-437c-a51b-bc15e3910883"
/dev/sdc1: UUID="Yiq13W-7Y74-se09-6RUp-Olo5-4vxi-y5lBk8" TYPE="LVM2_member" PARTUUID="ad94cf63-01"
/dev/sdd1: PARTLABEL="BIOS boot partition" PARTUUID="b14e299d-a261-41c2-87cb-3a94bb8d2ca9"
/dev/sdd2: UUID="884d7a9a-0022-4327-8b5c-122fdaa395bb" TYPE="ext2" PARTLABEL="boot" PARTUUID="bef1c7c4-5e4d-4abe-8110-1b281eec3d30"
/dev/sdd3: UUID="Iibu0Y-HfOC-zZlp-Laby-27z9-djFq-asxVR1" TYPE="LVM2_member" PARTLABEL="Linux LVM" PARTUUID="d7fa9f3a-36cb-4603-836b-a5175d0ebd9a"
/dev/mapper/vg--ssd--one-root: LABEL="root" UUID="a9676b49-3225-42cd-aba9-0ce41d68b82d" TYPE="ext4"
/dev/mapper/vg--ssd--one-swap: UUID="a38e2362-224b-4f33-8931-6cd09bbaa4d8" TYPE="swap"
/dev/mapper/vg--ssd--one-home: UUID="c15f4528-6bee-4f4d-9522-61389a697d83" TYPE="ext4"
/dev/mapper/vg--ssd--one-data: LABEL="data" UUID="a6d46937-e8a3-4e90-a1a6-919d219ed7c1" TYPE="ext4"
/dev/mapper/vg--ssd--one-musique: UUID="9a7302c4-6c70-46bd-836c-cea53d499f33" TYPE="ext4"
/dev/mapper/vg--ssd--two-lv--ssd--two: UUID="92a2a93e-3858-42e9-bafa-9599b6dfa825" TYPE="ext4"
/dev/mapper/vg--nas--one-yanplus: UUID="c6ab468e-ed7b-491e-b7c3-010a70816d0c" TYPE="ext4"
/dev/mapper/vg--nas--one-video: UUID="e2f56559-c05c-4fe9-8344-cbe06059bf90" TYPE="ext4"
/dev/mapper/vg--nas--one-sav: UUID="894e79a6-d542-45e0-8b71-3b156ddce0e6" TYPE="ext4"
/dev/mapper/svrxo--vg-root: UUID="8270a496-9bda-4937-8964-07d03da5d84e" TYPE="ext4"
/dev/mapper/svrxo--vg-swap_1: UUID="fd5aa6ed-c9c4-4209-b307-1e9d853250c7" TYPE="swap"
/dev/mapper/svrxo--vg-home: UUID="a24877fc-f1e6-4a22-8c65-c62ccef514d8" TYPE="ext4"
Les points de montage , création des dossiers et du fstab
sudo mkdir -p /srv/{nas-one-sav,nas-one-video,nas-one-yanplus,ssd-one-home,ssd-one-musique,ssd-one-root,ssd-two-lv}
Modifier fstab
sudo nano /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/svrxo--vg-root / ext4 errors=remount-ro 0 1
# /boot was on /dev/sda1 during installation
UUID=0b3181c7-e410-4b18-9611-c809fedbeb3c /boot ext2 defaults 0 2
/dev/mapper/svrxo--vg-home /home ext4 defaults 0 2
/dev/mapper/svrxo--vg-swap_1 none swap sw 0 0
# SSD NAS
/dev/mapper/vg--nas--one-sav /srv/nas-one-sav ext4 defaults 0 2
/dev/mapper/vg--nas--one-video /srv/nas-one-video ext4 defaults 0 2
/dev/mapper/vg--nas--one-yanplus /srv/nas-one-yanplus ext4 defaults 0 2
/dev/mapper/vg--ssd--one-home /srv/ssd-one-home ext4 defaults 0 2
/dev/mapper/vg--ssd--one-data /srv/ssd-one-data ext4 defaults 0 2
/dev/mapper/vg--ssd--one-musique /srv/ssd-one-musique ext4 defaults 0 2
/dev/mapper/vg--ssd--one-root /srv/ssd-one-root ext4 defaults 0 2
/dev/mapper/vg--ssd--two-lv--ssd--two /srv/ssd-two-lv ext4 defaults 0 2
srvxo - NFS
NFS exports exportfs -arv
Modifier le fichier /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
# Premier disque
/home/xoadmin/data 192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
/home/xoadmin/srv 192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
# SSD NAS
/srv/nas-one-yanplus 192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
/srv/nas-one-video 192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
/srv/ssd-one-musique 192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
/srv/ssd-one-data 192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
/srv/ssd-two-lv 192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
Prise en charge
exportfs -arv
exporting 192.168.0.0/24:/srv/ssd-two-lv
exporting 192.168.0.0/24:/srv/ssd-one-data
exporting 192.168.0.0/24:/srv/ssd-one-musique
exporting 192.168.0.0/24:/srv/nas-one-video
exporting 192.168.0.0/24:/srv/nas-one-yanplus
exporting 192.168.0.0/24:/home/xoadmin/srv
exporting 192.168.0.0/24:/home/xoadmin/data
BorgBackup
Installation
Debian Stretch avec les dépôts “backports”
sudo apt edit-sources # pour ajouter la ligne pour les dépôts "backports"
Ajouter
deb http://deb.debian.org/debian stretch-backports main contrib non-free
Votre fichier « /etc/apt/sources.list » a changé, veuillez lancer « apt-get update »
sudo apt update
Installer borgbackup
sudo apt -V -t=stretch-backports install borgbackup
Préparation de la machine qui stocke les sauvegardes srvxo (xoyaz.xyz)
Le dossier de base pour les sauvegardes sur le serveur srvxo (xoyaz.xyz) : /srv/ssd-two-lv/borg-backups/
En mode su
Commencer par installer Borg (Installation sur Debian Stretch avec les dépôts “backports”) et openssh-server si ça n’est pas déjà le cas.
Il est préférable de créer un utilisateur dédié aux sauvegardes :
useradd borg --create-home --home-dir /srv/ssd-two-lv/borg-backups/
Vous pouvez changer /srv/ssd-two-lv/borg-backups pour n’importe quel emplacement où vous êtes susceptible d’avoir suffisamment d’espace disque.
Comment ajouter une clé publique sur la machine qui stocke les sauvegardes srvxo (xoyaz.xyz)
Se connecter sur la machine xoyize.xyz en ssh et ajouter de la clé publique
sudo -s
mkdir -p /srv/ssd-two/borg-backups/.ssh # sans incidence si répertoire existe déjà
cat >> /srv/ssd-two/borg-backups/.ssh/authorized_keys
Copier/coller le contenu du fichier du fichier de clef publique (fichier /root/.ssh/client.pub de la machine à sauvegarder ) dans ce terminal, et presser [Ctrl]+[D] pour valider.
Pour info, les clefs publiques clientes
cat /srv/ssd-two-lv/borg-backups/.ssh/authorized_keys
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAqJxvGRot7fEnh+dtKvy4EORwKXqGbloxM6hldnANpH root@yanspm.com
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL1VZR9M0Al47ACqg3HZM3UCQ2tWF/7H/eFD+lsDasyN root@yanfi.net
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKTVAK9iElmsM/bbw5VvVI7rR4GF6It/WjJnuHMYqUdk root@cinay.xyz
Machines clientes - Exécution sauvegarde
Suite changement du serveur des dépôts
Modifier les fichiers /root/.borg/borg-backup de chaque client , pour prendre en compte le nouveau serveur xoyaz.xyz.
BORG_REPOSITORY=ssh://borg@xoyaz.xyz:55034/srv/ssd-two-lv/borg-backups/Nom_DEPOT
Exécuter manuellement pour valider le changement de lieu du dépôt
/root/.borg/borg-backup
set -e
BACKUP_DATE=`date +%Y-%m-%d-%Hh%M`
LOG_PATH=/var/log/borg-backup.log
export BORG_PASSPHRASE="`cat ~root/.borg/passphrase`"
export BORG_RSH='ssh -i /root/.ssh/yanfi_ed25519'
BORG_REPOSITORY=ssh://borg@xoyaz.xyz:55034/srv/ssd-two-lv/borg-backups/yanfi.net
BORG_ARCHIVE=${BORG_REPOSITORY}::${BACKUP_DATE}
borg create \
-v --stats --compression lzma,9 \
$BORG_ARCHIVE \
/bin /boot /etc /home /lib /lib64 /opt /root /sbin /srv /usr /var
puis
borg prune \
-v --list --stats --keep-daily=7 --keep-weekly=4 --keep-monthly=6 \
$BORG_REPOSITORY
En cas d’erreur du type Borg: Failed to create/acquire the lock /lock.exclusive (timeout).
Exécuter la commande suivante borg break-lock $BORG_REPOSITORY
Nextcloud
On passe en mode super utilisateur
sudo -s
Base mysql nextcloud
Créer une base mariadb Nextcloud
mysql -uadmin -p$(cat /etc/mysql/mdp)
sur le prompt MariaDB [(none)]>
CREATE DATABASE nextcloud;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'mot-de-passe-base-nextcloud';
FLUSH PRIVILEGES;
quit
Installer nextcloud
Télécharger la denière version de nextcloud (https://download.nextcloud.com/server/releases/)
wget https://download.nextcloud.com/server/releases/nextcloud-15.0.5.zip
Extraction après téléchargement du fichier
unzip nextcloud-15.0.5.zip
Déplacer le dossier extrait vers le répertoire web /var/www/
mv nextcloud /var/www/
Effacer le zip
rm nextcloud-15.0.5.zip
Créer le dossier data
mkdir /var/www/nextcloud/data
Modifiez le propriétaire et le groupe du répertoire /var/www/nextcloud :
chown -R www-data:www-data /var/www/nextcloud/
Modifier les droits
find /var/www/nextcloud/ -type d -exec chmod 750 {} \;
find /var/www/nextcloud/ -type f -exec chmod 640 {} \;
Le pool dédié à Nextcloud /etc/php/7.3/fpm/pool.d/nextcloud.conf
[nextcloud]
listen = /run/php/php7.3-fpm-nextcloud.sock
; Set permissions for unix socket, if one is used.Méthoe B listen.owner = nextcloud
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
; Unix user/group of processes. user = nextcloud (méthode B)
user = www-data
group = www-data
pm = dynamic
pm.max_children = 6
pm.start_servers = 3
pm.min_spare_servers = 3
pm.max_spare_servers = 5
pm.max_requests = 500
pm.status_path = /fpm-status
ping.path = /ping
request_terminate_timeout = 1d
request_slowlog_timeout = 5s
slowlog = /var/log/nginx/nextcloud.slow.log
rlimit_files = 4096
rlimit_core = 0
chdir = /var/www/nextcloud/
catch_workers_output = yes
clear_env = no
php_value[upload_max_filesize] = 10G
php_value[post_max_size] = 10G
php_value[default_charset] = UTF-8
Redémarrez le service php-fpm afin d’activer le nouveau pool nextcloud :
sudo systemctl restart php7.3-fpm.service
Nginx virtualhost
Le fichier de configuration nginx /etc/nginx/conf.d/nextcloud.xoyaz.xyz.conf
upstream php-handler {
#server 127.0.0.1:9000;
server unix:/run/php/php7.3-fpm-nextcloud.sock;
}
server {
listen 80;
listen [::]:80;
server_name nextcloud.xoyaz.xyz;
# enforce https
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name nextcloud.xoyaz.xyz;
ssl_certificate /etc/ssl/private/xoyaz.xyz-fullchain.pem;
ssl_certificate_key /etc/ssl/private/xoyaz.xyz-key.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
# As suggested by Mozilla : https://wiki.mozilla.org/Security/Server_Side_TLS and https://en.wikipedia.org/wiki/Curve25519
# (this doesn't work on jessie though ...?)
# ssl_ecdh_curve secp521r1:secp384r1:prime256v1;
# As suggested by https://cipherli.st/
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
# Ciphers with modern compatibility
#---------------------------------
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=nginx-1.6.2&openssl=1.0.1t&hsts=yes&profile=modern
# Uncomment the following to use modern ciphers, but remove compatibility with some old clients (android < 5.0, Internet Explorer < 10, ...)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS13+AESGCM+AES128:EECDH+AESGCM:EECDH+CHACHA20:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
# Add headers to serve security related headers
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;
# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;
# Path to the root of your installation
root /var/www/nextcloud/;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;
# Enable gzip but do not remove ETag headers
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;
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
location / {
rewrite ^ /index.php$request_uri;
}
location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|ocs-provider\/.+)\.php(?:$|\/) {
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
#Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^\/(?:updater|ocs-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}
# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js|woff2?|svg|gif)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into
# this topic first.
# add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;
# Optional: Don't log access to assets
access_log off;
}
location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
try_files $uri /index.php$request_uri;
# Optional: Don't log access to other assets
access_log off;
}
}
Vérifier nginx
nginx -t
Relancer php-fpm et nginx
systemctl restart php7.3-fpm nginx
Initialisation nextcloud
Accès https://nextcloud.xoyaz.xyz
Créer un compte administrateur yanspm + mot de passe
Répertoire des données /var/www/nextcloud/data
Base MariaDb (MySql) nextcloud , utilisateur nextcloud + mot de passe accès
Aller dans Paramètres → Vue d’ensemble
Avertissements de sécurité & configuration
Il est important pour la sécurité et la performance de votre instance que celle-ci soit correctement configurée. Afin de vous aider, votre instance Nextcloud effectue quelques vérifications automatiques. Pour de plus amples informations, veuillez consulter la documentation liée.
Il y a quelques avertissements concernant votre configuration.
Aucun cache mémoire n'est configuré. Si possible, configurez un "memcache" pour améliorer les performances. Pour plus d'informations consultez la documentation.
Le PHP OPcache n'est pas correctement configuré. Pour de meilleure performance nous recommandons d'utiliser les paramètres suivant dans le php.ini :
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
Certaines colonnes de la base de données n'ont pas été converties en big int. Changer le type de colonne dans de grandes tables peu prendre beaucoup de temps, elles n'ont donc pas été converties automatiquement. En exécutant 'occ db:convert-filecache-bigint' ces changements en suspens peuvent être déclenchés manuellement. Cette opération doit être exécutée pendant que l'instance est hors ligne. Pour plus d'information, consulter la page de la documentation.
filecache.mtime
filecache.storage_mtime
Merci de consulter les guides d'installation ↗ et de vérifier les erreurs ou avertissements des logs.
Vérifier la sécurité de votre Nextcloud grâce à notre scan de sécurité ↗
Les corrections
Cache PHP : OPcache
OPcache (qui signifie Optimizer Plus Cache) est introduit depuis la version 5.5.0 de PHP. Il sert à cacher l’opcode de PHP, c’est-à-dire les instructions de bas niveau générées par la machine virtuelle PHP lors de l’exécution d’un script. Autrement dit, le code pré-compilé est stocké en mémoire. Cela évite ainsi l’étape de compilation à chaque requête PHP. De plus, OPcache va optimiser l’exécution du code afin d’en améliorer les performances.
Éditez le fichier /etc/php/7.3/fpm/php.ini, décommentez et modifiez les lignes suivantes dans la section [opcache] :
sudo nano /etc/php/7.3/fpm/php.ini
[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
La nouvelle configuration sera prise en compte après redémarrage du service PHP-FPM :
sudo systemctl restart php7.3-fpm.service
Cache de données : APCu & Redis
APCu permet notamment de mettre en cache les variables PHP et de les stocker en mémoire vive. Redis est un système de gestion de base de données NoSQL avec un système de clef-valeur scalable (s’adapte à la charge). Une des principales caractéristiques de Redis est de conserver l’intégralité des données en RAM. Cela permet d’obtenir d’excellentes performances en évitant les accès disques, particulièrement coûteux.
Installez les paquets APCu et Redis :
sudo apt install php-apcu redis-server php-redis -y
Ajoutez les lignes suivantes dans le fichier /var/www/nextcloud/config/config.php :
sudo nano /var/www/nextcloud/config/config.php
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => 'localhost',
'port' => 6379,
],
La nouvelle configuration sera prise en compte après redémarrage du service PHP-FPM :
sudo systemctl restart php7.3-fpm.service
Correction anomalie Big Int
Message du type: Certaines colonnes de la base de données n’ont pas été converties en BigInt (64 bits). Changer le type de colonne dans de grandes tables peu prendre beaucoup de temps, elles n’ont donc pas été converties automatiquement. En exécutant ‘occ db:convert-filecache-bigint’ ces changements en suspens peuvent être déclenchés manuellement. Cette opération doit être exécutée pendant que l’instance est hors ligne.
Depuis Nextcloud 13 les BigInt sont utilisés pour stocker les identifiants et les clés auto-incrément dans la base de données. Comme le changement de colonnes sur de grandes tables peut prendre un certain temps (jusqu’à plusieurs heures ou jours), la mise à jour de Nextcloud 12 ou plus tôt n’a pas effectué cette migration sur le cache de fichiers et la table d’activité.
Pour faciliter la mise à jour de ces tables, nous avons ajouté une commande console, qui peut être utilisée pour migrer les colonnes restantes vers bigints.
La commande peut être exécutée en toute sécurité.
sudo -s
cd /var/www/nextcloud/
$ sudo -u www-data php occ db:convert-filecache-bigint
Following columns will be updated:
* filecache.mtime
* filecache.storage_mtime
This can take up to hours, depending on the number of files in your instance!
Continue with the conversion (y/n)? [n] y
Au second passage, il affichera un message
$ sudo -u www-data php occ db:convert-filecache-bigint
All tables already up to date!
Note : Comme pour une mise à jour normale, vous devriez fermer votre serveur apache ou nginx ou activer le mode maintenance avant d’exécuter la commande pour éviter les problèmes avec vos clients de synchronisation.
Vérification nextcloud
On se connecte sur nextcloud , Paramètres → Vue d’ensemble
On lance le scan de sécurité nextcloud
Développement
____ _ _
| _ \ _____ _____| | ___ _ __ _ __ ___ ___ _ __ | |_
| | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __|
| |_| | __/\ V / __/ | (_) | |_) | | | | | | __/ | | | |_
|____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__|
|_|
devel /etc/nginx/conf.d/devel.devel.xoyaz.xyz.conf
server {
listen 80;
listen [::]:80;
## redirect http to https ##
server_name devel.xoyaz.xyz;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name devel.xoyaz.xyz;
#### Locations
# On cache les fichiers statiques
location ~* \.(html|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; }
# On interdit les dotfiles
location ~ /\. { deny all; }
include ssl_params;
include header_params;
# Diffie-Hellmann
# Uncomment the following directive after DH generation
# > openssl dhparam -out /etc/ssl/private/dh4096.pem -outform PEM -2 4096
# ssl_dhparam /etc/ssl/private/dh4096.pem;
# autoindex on;
fancyindex on; # Enable fancy indexes.
fancyindex_exact_size off; # Output human-readable file sizes.
root /srv/nas-one-yanplus/devel/ouestline/ ;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.3-fpm.sock; # PHP7.3
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
access_log /var/log/nginx/devel.xoyaz.xyz-access.log;
error_log /var/log/nginx/devel.xoyaz.xyz-error.log;
}
Vérification et relance nginx
sudo nginx -t
sudo systemctl restart nginx
Subsonic
Application dédiée musique, serveur java
Dossier /srv/musique (musique vg-ssd-one -wi-ao—- 100,00g)
Installer java
sudo apt install openjdk-8-jre
Installer subsonic , télécharger la version en cours
wget https://s3-eu-west-1.amazonaws.com/subsonic-public/download/subsonic-6.1.5.deb # paquet deb subsonic
Installer
sudo dpkg -i subsonic-6.1.5.deb
Modifier le paramètrage /etc/default/subsonic
SUBSONIC_ARGS="--host=192.168.0.30 --port=8090 --max-memory=200"
SUBSONIC_USER=xoadmin
Relancer subsonic
sudo systemctl restart subsonic
Virtual host /etc/nginx/conf.d/music.xoyaz.xyz.conf
upstream subsonic {
server 192.168.0.30:8090;
}
server {
listen 80;
listen [::]:80;
## redirect http to https ##
server_name music.xoyaz.xyz;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name music.xoyaz.xyz;
include ssl_params;
include header_params;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_pass http://subsonic;
}
access_log /var/log/nginx/music.xoyaz.xyz-access.log;
error_log /var/log/nginx/music.xoyaz.xyz-error.log;
}
Vérification et relance nginx
sudo nginx -t
sudo systemctl restart nginx
Le dossier musique : /srv/ssd-one-musique
Première connexion admin admin