Post

Serveur Local Debian Stretch 64bits domaine xoyaz.xyz

Serveur Debian Stretch 64bits

Serveur Local Debian Stretch 64bits domaine xoyaz.xyz

ASRock QC5000M Quad-Core APU

ASRock QC5000M (pdf)

ASRock QC5000M

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

1
ssh xoadmin@192.168.0.30

Màj

1
apt update && apt upgrade

Firmware Realtek

1
2
3
echo "deb http://httpredir.debian.org/debian/ stretch main contrib non-free" >> /etc/apt/sources.list
apt update
apt install firmware-realtek

Installer utilitaires

1
apt install rsync curl tmux jq figlet git mailutils dnsutils netcat -y

Droits d’accès sudo à l’utilisateur xoadmin

1
2
apt install sudo
echo "xoadmin     ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Configurer Locales (fr)

Locales : fr_FR.UTF-8

1
dpkg-reconfigure locales
1
2
3
Generating locales (this might take a while)...
  fr_FR.UTF-8... done
Generation complete.

Europe/Paris (TimeZone tzdata)

Europe/Paris

1
dpkg-reconfigure tzdata
1
2
3
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

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

1
sudo nano /etc/network/interfaces
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 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

1
sudo systemctl reboot

Vérifier l’adresse inet6

1
ip addr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

1
2
3
4
5
6
 _               _                              
| |__   ___  ___| |_ _ __   __ _ _ __ ___   ___ 
| '_ \ / _ \/ __| __| '_ \ / _` | '_ ` _ \ / _ \
| | | | (_) \__ \ |_| | | | (_| | | | | | |  __/
|_| |_|\___/|___/\__|_| |_|\__,_|_| |_| |_|\___|
                                                

Modifier hostname

1
hostnamectl set-hostname --static xoyaz.xyz

Modifier /etc/hosts

1
nano /etc/hosts
1
2
3
127.0.0.1       localhost
127.0.1.1 	xoyaz.xyz srvxo
...

Vérifications

1
hostnamectl
1
2
3
4
5
6
7
8
   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
1
2
hostname --fqdn
	xoyaz.xyz

DNS OVH

dns

Le domaine xoyaz.xyz pointe sur l’adresse IPV6 2a01:e34:eebf:df5::1

1
2
3
4
5
6
7
$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é

ssh+clés

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

1
2
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

1
2
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/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

letsencrypt

Installation gestionnaire des certificats Let’s Encrypt

1
2
3
4
5
6
7
8
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)

1
2
export OVH_AK="votre application key"
export OVH_AS="votre application secret"

Premier lancement pour la génération des certificats

1
/root/.acme.sh/acme.sh --dns dns_ovh --issue --keylength ec-384 -d xoyaz.xyz -d '*.xoyaz.xyz'
1
2
3
[...]
[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.

1
OVH authentication Success ! 

Lancer une seconde fois la génération des certificats et patienter quelques minutes…

1
/root/.acme.sh/acme.sh --dns dns_ovh --issue --keylength ec-384 -d xoyaz.xyz -d '*.xoyaz.xyz'

Les certificats sont disponibles

1
2
3
4
[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)

1
2
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

1
crontab -l
1
18 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

Nginx PHP7 mariadb

lemp

Préalable

1
sudo apt install apt-transport-https

Script

1
2
3
4
5
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

SSL

Certificats sur les sites xoyaz.xyz

Ajout des certificats , création des liens

1
2
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

1
sudo nano /etc/nginx/ssl_params
1
2
3
4
5
6
7
8
9
10
    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

1
sudo nano /etc/nginx/header_params
1
2
3
4
5
6
7
8
9
10
11
    # 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

1
2
sudo mkdir /var/www/default-www
sudo mv /var/www/{index/,info.php} /var/www/default-www/

Configuration de base avec SSL et sécurité + letsencrypt (renouvellement)

1
sudo nano /etc/nginx/conf.d/xoyaz.xyz.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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 ~* \./|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/ 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

1
sudo rm /etc/nginx/conf.d/default.conf

Vérifier et relancer nginx

1
2
sudo nginx -t
sudo systemctl restart nginx

Vérifier le lien https://xoyaz.xyz , le tls 1.3

parefeu (iptables V4 V6)

parefeu Iptables
installer un parefeu serveur

NOTE : Tous les ports sont OUVERTS en SORTIE vers l’extérieur

Le script de base /usr/local/sbin/config_firewall

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/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

1
2
3
4
5
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

1
sudo nano /etc/network/interfaces
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 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

1
sudo service networking restart

Vérifier

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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


Résolveur 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**

1
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

Configuration dns et box

DNS OVH (spf et dkim) pour tenir compte de la messagerie

1
2
3
4
5
6
7
8
9
10
$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

1
2
3
4
    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

1
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

1
2
3
4
5
6
    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

1
df -h |grep "mapper"
1
2
/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

1
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

1
2
3
# 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é:

1
2
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.

1
2
3
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

1
2
* 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

1
2
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

1
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

1
2
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

1
192.168.0.30    srvxo

Vérifier

1
ls -l /net/srvxo/home/xoadmin/
1
2
3
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/5 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

1
2
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/?d=xoyaz.xyz
SSL Report: xoyaz.xyz
Assessed on: Thu, 07 Mar 2019 14:01:42 UTC

image

Mozilla observatory https://observatory.mozilla.org/analyze/?host=xoyaz.xyz

image

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

1
2
sudo -s
pvs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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

1
blkid
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/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

1
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

1
sudo nano /etc/fstab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# /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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# /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

1
exportfs -arv
1
2
3
4
5
6
7
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”

1
sudo apt edit-sources # pour ajouter la ligne pour les dépôts "backports"

Ajouter

1
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 »

1
sudo apt update

Installer borgbackup

1
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 :

1
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

1
2
3
4
5
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

1
cat /srv/ssd-two-lv/borg-backups/.ssh/authorized_keys 
1
2
3
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.

1
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

1
/root/.borg/borg-backup
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

1
2
3
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

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)]>

1
2
3
4
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
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//+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/|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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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

1
2
3
4
5
6
7
8
[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

1
2
3
4
5
6
7
  '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é.

1
2
3
4
5
6
7
8
9
10
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

1
2
3
$ 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

1
2
3
4
5
6
 ____                 _                                  _   
|  _ \  _____   _____| | ___  _ __  _ __ ___   ___ _ __ | |_ 
| | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __|
| |_| |  __/\ V /  __/ | (_) | |_) | | | | | |  __/ | | | |_ 
|____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__|
                             |_|                             

devel /etc/nginx/conf.d/devel.devel.xoyaz.xyz.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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 ~* \./|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/ 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

1
2
sudo nginx -t
sudo systemctl restart nginx

Subsonic

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

1
2
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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

1
2
sudo nginx -t
sudo systemctl restart nginx

Le dossier musique : /srv/ssd-one-musique
Première connexion admin admin

Cet article est sous licence CC BY 4.0 par l'auteur.