Mercredi 12 février 2020 (Modifié le Vendredi 28 février 2020)

OVH vps785909 (1 vCore/2GoRam/20GoSSD) Debian Buster

VPS OVH

OVH

Debian Buster
PARAMETRES D’ACCES:
L’adresse IPv4 du VPS est : 54.37.13.57
L’adresse IPv6 du VPS est : 2001:41d0:0401:3200:0000:0000:0000:0d48

Le nom du VPS est : vps785909.ovh.net
Connexion SSH en “root”

ssh root@54.37.13.57

Sur le VPS OVH il faut désactiver l’initialisation réseau par le cloud

# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}

Création du fichier /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg en mode su

echo "network: {config: disabled}" > /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

Effacer et recréer le fichier /etc/network/interfaces

rm /etc/network/interfaces
nano /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
iface eth0 inet6 static
 address 2001:41d0:401:3200:0:0:0:d48
 netmask 128
 post-up /sbin/ip -6 route add 2001:41d0:0401:3200:0000:0000:0000:0001 dev eth0
 post-up /sbin/ip -6 route add default via 2001:41d0:0401:3200:0000:0000:0000:0001 dev eth0
 pre-down /sbin/ip -6 route del default via 2001:41d0:0401:3200:0000:0000:0000:0001 dev eth0
 pre-down /sbin/ip -6 route del 2001:41d0:0401:3200:0000:0000:0000:0001 dev eth0

Configuration OVH à modifier /etc/cloud/cloud.cfg

sed -i 's/preserve_hostname: false/preserve_hostname: true/g' /etc/cloud/cloud.cfg
sed -i 's/manage_etc_hosts: true/manage_etc_hosts: false/g' /etc/cloud/cloud.cfg
Redémarrer la machine

systemctl reboot pour la prise en compte des modifications du réseau

Se connecter en root via SSH

ssh root@54.37.13.57

Vérifier le réseau ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:fc:9a:0d brd ff:ff:ff:ff:ff:ff
    inet 54.37.13.57/32 brd 54.37.13.57 scope global dynamic eth0
       valid_lft 86360sec preferred_lft 86360sec
    inet6 2001:41d0:401:3200::d48/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fefc:9a0d/64 scope link 
       valid_lft forever preferred_lft forever

Locales fr UTF8 : dpkg-reconfigure locales
Fuseau Europe/Paris : dpkg-reconfigure tzdata

Création utilisateur

Utilisateur wguser

useradd -m -d /home/wguser/ -s /bin/bash wguser

Mot de passe wguser

passwd wguser

Visudo pour les accès root via utilisateur wguser

apt install sudo  # sudo installé par défaut
echo "wguser     ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Changer le mot de passe root

passwd root

OpenSSH, clé et script

OpenSSH

connexion avec clé
sur l'ordinateur de bureau Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) nommé kvm-cinay pour une liaison SSH avec le serveur KVM.

ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/kvm-vps785909

Envoyer la clé publique sur le serveur KVM

scp ~/.ssh/kvm-vps785909.pub wguser@54.37.13.57:/home/wguser/

sur le serveur KVM On se connecte

ssh wguser@54.37.13.57

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/kvm-vps785909.pub >> $HOME/.ssh/authorized_keys

et donner les droits

chmod 600 $HOME/.ssh/authorized_keys

effacer le fichier de la clé

rm $HOME/kvm-vps785909.pub

Modifier la configuration serveur SSH

sudo nano /etc/ssh/sshd_config

Modifier

Port 55034
PermitRootLogin no
PasswordAuthentication no

session SSH ne se termine pas correctement lors d'un "reboot" à distance
Si vous tentez de redémarrer/éteindre une machine distance par ssh, vous pourriez constater que votre session ne se termine pas correctement, vous laissant avec un terminal inactif jusqu’à l’expiration d’un long délai d’inactivité. Il existe un bogue 751636 à ce sujet. Pour l’instant, la solution de contournement à ce problème est d’installer :

sudo apt install libpam-systemd  # installé par défaut sur debian buster

cela terminera la session ssh avant que le réseau ne tombe.
Veuillez noter qu’il est nécessaire que PAM soit activé dans sshd.

Relancer openSSH

sudo systemctl restart sshd

Accès depuis le poste distant avec la clé privée

ssh -p 55034 -i ~/.ssh/kvm-vps785909 wguser@54.37.13.57

Installer utilitaires

sudo apt install rsync curl tmux jq figlet git dnsutils tree -y

Scripts motd et ssh_rc_bash

Script ssh_rc_bash

ATTENTION!!! Les scripts sur connexion peuvent poser des problèmes pour des appels externes autres que ssh

nano ssh_rc_bash
#!/bin/bash

get_infos() {
    seconds="$(< /proc/uptime)"
    seconds="${seconds/.*}"
    days="$((seconds / 60 / 60 / 24)) jour(s)"
    hours="$((seconds / 60 / 60 % 24)) heure(s)"
    mins="$((seconds / 60 % 60)) minute(s)"
    
    # Remove plural if < 2.
    ((${days/ *} == 1))  && days="${days/s}"
    ((${hours/ *} == 1)) && hours="${hours/s}"
    ((${mins/ *} == 1))  && mins="${mins/s}"
    
    # Hide empty fields.
    ((${days/ *} == 0))  && unset days
    ((${hours/ *} == 0)) && unset hours
    ((${mins/ *} == 0))  && unset mins
    
    uptime="${days:+$days, }${hours:+$hours, }${mins}"
    uptime="${uptime%', '}"
    uptime="${uptime:-${seconds} seconds}"

   if [[ -f "/sys/devices/virtual/dmi/id/board_vendor" ||
                    -f "/sys/devices/virtual/dmi/id/board_name" ]]; then
	model="$(< /sys/devices/virtual/dmi/id/board_vendor)"
	model+=" $(< /sys/devices/virtual/dmi/id/board_name)"
   fi

   if [[ -f "/sys/devices/virtual/dmi/id/bios_vendor" ||
                    -f "/sys/devices/virtual/dmi/id/bios_version" ]]; then
        bios="$(< /sys/devices/virtual/dmi/id/bios_vendor)"
        bios+=" $(< /sys/devices/virtual/dmi/id/bios_version)"
        bios+=" $(< /sys/devices/virtual/dmi/id/bios_date)"
   fi
}

#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
#ipinfo=$(curl -s iplocality.com) 		# 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`

if [[ $GROUPZ == *irc* ]]; then
ENDSESSION=`cat /etc/security/limits.conf | grep "@irc" | grep maxlogins | awk {'print $4'}`
PRIVLAGED="IRC Account"
else
ENDSESSION="Unlimited"
PRIVLAGED="Regular User"
fi
get_infos
logo=$(figlet "`hostname --fqdn`")
#meteo=$(curl fr.wttr.in/$ville?0)
sdx=$(df -h |grep "/dev/sd") # les montages /dev/sd
distri=$(lsb_release -sd)
distri+=" $(uname -m)"

echo -e "
\e[1;31m$logo
\e[1;35m   \e[1;37mHostname \e[1;35m= \e[1;32m`hostname`
\e[1;35m \e[1;37mWired IpV4 \e[1;35m= \e[1;32m`ip addr show $iplink | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1`
\e[1;35m \e[1;37mWired IpV6 \e[1;35m= \e[1;32m`ip addr show $iplink | grep -E 'inet6' |grep -E 'scope link' | awk '{print $2}' | cut -d/ -f1`
\e[1;35m     \e[1;37mKernel \e[1;35m= \e[1;32m`uname -r`
\e[1;35m    \e[1;37mDistrib \e[1;35m= \e[1;32m$distri
\e[1;35m     \e[1;37mUptime \e[1;35m= \e[1;32m`echo $uptime`
\e[1;35m       \e[1;37mBios \e[1;35m= \e[1;32m`echo $bios`
\e[1;35m      \e[1;37mBoard \e[1;35m= \e[1;32m`echo $model`
\e[1;35m        \e[1;37mCPU \e[1;35m= \e[1;32m`echo $cpuname`
\e[1;35m \e[1;37mMemory Use \e[1;35m= \e[1;32m`free -m | awk 'NR==2{printf "%s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'`
\e[1;35m   \e[1;37mUsername \e[1;35m= \e[1;32m`whoami`
\e[1;35m   \e[1;37mSessions \e[1;35m= \e[1;32m`who | grep $USER | wc -l`
\e[1;35m\e[1;37mPublic IpV4 \e[1;35m= \e[1;32m`echo $publicip`
\e[1;35m\e[1;37mPublic IpV6 \e[1;35m= \e[1;32m`ip addr show $iplink | grep -m 1 'inet6\b'  | awk '{print $2}' | cut -d/ -f1`
\e[1;35m\e[1;33m$sdx
\e[1;0m
"
chmod +x ssh_rc_bash # rendre le bash exécutable
./ssh_rc_bash        # exécution

Recréer motd

sudo rm /etc/motd && sudo nano /etc/motd  
                 ____  ___  ___  ___   __   ___ 
 __ __ _ __  ___|__  |( _ )| __|/ _ \ /  \ / _ \
 \ V /| '_ \(_-<  / / / _ \|__ \\_, /| () |\_, /
  \_/ | .__//__/ /_/  \___/|___/ /_/  \__/  /_/ 
      |_|                                       
  __ (_) _ _   __ _  _  _     ___  _  _         
 / _|| || ' \ / _` || || | _ / -_)| || |        
 \__||_||_||_|\__,_| \_, |(_)\___| \_,_|        
                     |__/                       

Déconnexion puis connexion

Domaine DNS

Définir le domaine cinay.eu

sudo hostnamectl set-hostname cinay.eu
sudo hostnamectl status
   Static hostname: cinay.eu
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 0ef30511d74646618d92e464efb187ce
           Boot ID: 608d43090daa4a139d63238a3071fece
    Virtualization: kvm
  Operating System: Debian GNU/Linux 10 (buster)
            Kernel: Linux 4.19.0-5-cloud-amd64
      Architecture: x86-64

DNS OVH

$TTL 3600
@	IN SOA dns100.ovh.net. tech.ovh.net. (2020020705 86400 3600 3600000 300)
    3600 IN NS     ns100.ovh.net.
    3600 IN NS     dns100.ovh.net.
    3600 IN MX     10 cinay.eu.
    3600 IN A      54.37.13.57
    3600 IN AAAA   2001:41d0:401:3200:0:0:0:d48
         IN CAA    128 issue "letsencrypt.org"
*   3600 IN CNAME  cinay.eu.

Paramétrer le reverse IP V4 sur le vps785909 : cinay.eu

Parefeu (iptables)

/sbin/iptables-firewall.sh

On utilise un service systemd
Créer le fichier le script /sbin/iptables-firewall.sh

sudo nano /sbin/iptables-firewall.sh

ATTENTION on DROP INPUT FORWARD et OUTPUT
Ce qui signifie que les ports de sortie OUTPUT doivent être définis

#!/bin/bash
# Configure iptables firewall

# Limit PATH
PATH="/sbin:/usr/sbin:/bin:/usr/bin"

# iptables configuration
firewall_start() {

###################
#      IPv4       #
###################

# refuser input ,forward et output par défaut 
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP

# Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT

# ICMP (Ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT

# maintenir les connexions établies
iptables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# SSH In/Out
iptables -t filter -A INPUT -p tcp --dport 55034 -j ACCEPT -m comment --comment "SSH In"
iptables -t filter -A OUTPUT -p tcp --dport 55036 -j ACCEPT -m comment --comment "SSH Out backup"

# HTTP + HTTPS Out
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

# HTTP + HTTPS In
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

# DNS In/Out
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

# Postfix SMTP, SMTPS, SUBMISSION
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT
# ImapS
iptables -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT


###################
#      IPv6       #
###################

# refuser input , forward et output par défaut 
ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P FORWARD DROP
ip6tables -t filter -P OUTPUT DROP

# interface lo (loop) accessible
ip6tables -t filter -A INPUT -i lo -j ACCEPT
ip6tables -t filter -A OUTPUT -o lo -j ACCEPT

# maintenir les connexions établies
ip6tables -t filter -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -t filter -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# NDP pour toute interface de type broadcast
ip6tables -t filter -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT
ip6tables -t filter -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -t filter -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT

ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
ip6tables -t filter -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 -t filter -A OUTPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT

# SSH In/Out
ip6tables -t filter -A INPUT -p tcp --dport 55034 -j ACCEPT -m comment --comment "SSH In"
ip6tables -t filter -A OUTPUT -p tcp --dport 55036 -j ACCEPT -m comment --comment "SSH Out backup"

# HTTP + HTTPS Out
ip6tables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
ip6tables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

# HTTP + HTTPS In
ip6tables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT

# DNS In/Out
ip6tables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
ip6tables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
ip6tables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
ip6tables -t filter -A INPUT -p udp --dport 53 -j ACCEPT


}

# clear iptables configuration
firewall_stop() {
  iptables -F
  iptables -X
  iptables -P INPUT   ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT  ACCEPT
  ip6tables -F
  ip6tables -X
  ip6tables -P INPUT   ACCEPT
  ip6tables -P FORWARD ACCEPT
  ip6tables -P OUTPUT  ACCEPT
}

# execute action
case "$1" in
  start|restart)
    echo "Starting firewall"
    firewall_stop
    firewall_start
    ;;
  stop)
    echo "Stopping firewall"
    firewall_stop
    ;;
esac

Les droits et exécutable

sudo chown root:root /sbin/iptables-firewall.sh
sudo chmod 750 /sbin/iptables-firewall.sh 

systemd - iptables-firewall.service

Créer le service systemd iptables-firewall.service

cat << EOF | sudo tee /etc/systemd/system/iptables-firewall.service
[Unit]
Description=iptables firewall service
After=network.target

[Service]
Type=oneshot
ExecStart=/sbin/iptables-firewall.sh start
RemainAfterExit=true
ExecStop=/sbin/iptables-firewall.sh stop
StandardOutput=journal

[Install]
WantedBy=multi-user.target
EOF

Recharger systemd manager

sudo systemctl daemon-reload

Lancer le service iptables et l’activer

sudo systemctl start iptables-firewall
sudo systemctl enable iptables-firewall

Vérifications

sudo iptables -L
sudo ip6tables -L

Unbound - DNS

Unbound est un résolveur DNS validateur, cache, récursif développé par NLnet Labs, VeriSign Inc., Nominet, et Kirei. Le logiciel est distribué sous licence BSD.

Installer et configurer Unbound

Vérifier la résolution de nom à partir du serveur :

dig @127.0.0.1 afnic.fr
; <<>> DiG 9.11.5-P4-5.1-Debian <<>> @127.0.0.1 afnic.fr
; (1 server found)
[...]
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Feb 07 14:29:25 CET 2020
;; MSG SIZE  rcvd: 53

La résolution de nom est fonctionnelle

Test blocage DMP

dig v.oui.sncf
; <<>> DiG 9.11.5-P4-5.1-Debian <<>> v.oui.sncf
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 32618

NXDOMAIN → le domaine n’est pas servi

Nginx + PHP7.3 + MariaDB + SSL/TLS1.3 + Certificats

Nginx + PHP7.3 + MariaDB + SSL/TLS1.3

lemp

Ce script bash compile et installe nginx ,le service nginx (systemd) pour le démarrage, PHP7.3 et mariadb.
Exécuter les instructions suivantes pour lancer la compilation

sudo -s             # Passer en mode super utilisateur (su ou sudo)  
wget -O compil.sh "https://static.cinay.xyz/files/debian10-compilation-nginx-lua-tls1.3-php7.3-MariaDB.sh" # Télécharger le script
chmod +x compil.sh  # Rendre le script exécutable  
./compil.sh     # Exécuter le script

Patienter de 5 à 10 minutes…

Versions Nginx OpenSSL MariaDB et PHP
nginx version: nginx/1.16.1
OpenSSL 1.1.1d  10 Sep 2019
mysql  Ver 15.1 Distrib 10.3.18-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Mot de passe MySql/MariaDB : /etc/mysql/mdp
PHP 7.3.14-5+0~20200202.52+debian10~1.gbpa71879 (cli) (built: Feb  2 2020 07:53:51) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.14, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.14-5+0~20200202.52+debian10~1.gbpa71879, Copyright (c) 1999-2018, by Zend Technologies

Certificats letsencrypt - domaine cinay.eu

letsencrypt
Installation gestionnaire des certificats Let’s Encrypt

cd ~
sudo apt install socat # prérequis
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install 

Se déconnecter puis se reconnecter pour la prise en compte

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

acme.sh --dns dns_ovh --issue --ocsp --keylength ec-384 -d cinay.eu -d *.cinay.eu

Rechercher le lien qui suit le texte suivant Please open this link to do authentication:
Se connecter sur le lien , s’authentifier puis sélectionner “unlimited” et valider.Le message suivant s’affiche

OVH authentication Success ! 

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

acme.sh --dns dns_ovh --issue --ocsp --keylength ec-384 -d cinay.eu -d *.cinay.eu

Les certificats sont disponibles

[samedi 8 février 2020, 08:37:44 (UTC+0100)] Your cert is in  /home/wguser//.acme.sh/cinay.eu_ecc/cinay.eu.cer 
[samedi 8 février 2020, 08:37:44 (UTC+0100)] Your cert key is in  /home/wguser//.acme.sh/cinay.eu_ecc/cinay.eu.key 
[samedi 8 février 2020, 08:37:44 (UTC+0100)] The intermediate CA cert is in  /home/wguser//.acme.sh/cinay.eu_ecc/ca.cer 
[samedi 8 février 2020, 08:37:44 (UTC+0100)] And the full chain certs is there:  /home/wguser//.acme.sh/cinay.eu_ecc/fullchain.cer 

Configuration nginx (SSL DH headers OCSP)

Les liens pour les certificats

SSL

# domaine cinay.eu
sudo ln -s /home/wguser//.acme.sh/cinay.eu_ecc/fullchain.cer /etc/ssl/private/cinay.eu-fullchain.pem   # full chain certs
sudo ln -s /home/wguser//.acme.sh/cinay.eu_ecc/cinay.eu.key /etc/ssl/private/cinay.eu-key.pem     # cert key
sudo ln -s /home/wguser//.acme.sh/cinay.eu_ecc/cinay.eu.cer /etc/ssl/private/cinay.eu-chain.pem   # cert domain
sudo ln -s /home/wguser//.acme.sh/cinay.eu_ecc/ca.cer /etc/ssl/private/cinay.eu-ca.pem                 # intermediate CA cert

Configuration nginx , ssl (tls1.2 tls1.3) , Diffie Hellman ,Headers et OCSP
Diffie-Hellman , générer le fichier dh2048.pem (en mode su): openssl dhparam -out /etc/ssl/private/dh2048.pem -outform PEM -2 2048

Regroupement dans un fichier /etc/nginx/ssl_dh_headers_ocsp pour cinay.eu

    ssl_certificate /etc/ssl/private/cinay.eu-fullchain.pem;
    ssl_certificate_key /etc/ssl/private/cinay.eu-key.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    ssl_dhparam /etc/ssl/private/dh2048.pem;

    # intermediate configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # Add headers to serve security related headers
    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 X-Frame-Options "SAMEORIGIN"; 
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
    add_header Referrer-Policy "no-referrer" always;

    # OCSP settings
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/ssl/private/cinay.eu-fullchain.pem; 
    resolver 127.0.0.1;

Effacer ancien fichier de config

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

Le fichier de configuration /etc/nginx/conf.d/cinay.eu.conf

# /etc/nginx/conf.d/cinay.eu.conf
	##
	# Virtual Host cinay.eu
	##

	server {
	    listen 80;
	    listen [::]:80;
	
	    ## redirect http to https ##
	    server_name cinay.eu;
	    return  301 https://$server_name$request_uri;
	}
	
	server {
	    listen 443 ssl http2;
	    listen [::]:443 ssl http2;
	    server_name cinay.eu;
	
	    ####    Locations
	    # On cache les fichiers statiques
	    location ~* \.(html|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; }

		location = /favicon.ico {
		  log_not_found off;
		}

	    # On interdit les dotfiles
	    location ~ /\. { deny all; }
	
	    include ssl_dh_headers_ocsp;

	    root /var/www/ ;
	    index index.html index.php;
	
	        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/cinay.eu-access.log;
	    error_log /var/log/nginx/cinay.eu-error.log;
	}
	

Vérifier nginx

sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

relancer nginx

sudo systemctl restart nginx

Vérifier le lien https://cinay.eu , le tls 1.3

PhpMyAdmin

Pour accéder à PhpMyAdmin , il faut passer parune première authentification “basic”. La configuration d’accès peut se faire de 2 façons :

  1. Indirect https://cinay.eu/rienavoir
    Le dossier /etc/nginx/conf.d/cinay.eu.d contient le fichier de configuration phpadmin.conf
    Ajouter la directive include /etc/nginx/conf.d/cinay.eu.d/*.conf; dans le fichier /etc/nginx/conf.d/cinay.eu.conf
  2. Via un sous domaine https://pma.cinay.eu
    Créer le VHOST /etc/nginx/conf.d/pma.cinay.eu.conf
    # /etc/nginx/conf.d/pma.cinay.eu.conf
	##
	# Virtual Host cinay.eu
	##

	server {
	    listen 80;
	    listen [::]:80;
	
	    ## redirect http to https ##
	    server_name pma.cinay.eu;
	    return  301 https://$server_name$request_uri;
	}
	
	server {
	    listen 443 ssl http2;
	    listen [::]:443 ssl http2;
	    server_name pma.cinay.eu;

	    auth_basic "yann";
	    auth_basic_user_file /etc/nginx/.pma_pass;
	
	    ####    Locations
	    # On cache les fichiers statiques
	    location ~* \.(html|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; }

		location = /favicon.ico {
		  log_not_found off;
		}

	    # On interdit les dotfiles
	    location ~ /\. { deny all; }
	
	    include ssl_dh_headers_ocsp;

	    root /usr/share/phpmyadmin/ ;
	    index index.php;
	
	        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;
	        }
	
	    include /etc/nginx/conf.d/cinay.eu.d/*.conf;	
	    access_log /var/log/nginx/cinay.eu-access.log;
	    error_log /var/log/nginx/cinay.eu-error.log;
	}

Authentification SSO (Expérimental)

Modifier l’accès par défaut au siyte https://cinay.eu
Remplacer root /var/www/ par root /var/www/default/ dans le fichier /etc/nginx/conf.d/cinay.eu.conf
Créer le dossier sudo mkdir -p /var/www/default
Déplacer le fichier index.html , sudo mv /var/www/index.html /var/www/default/
Relancer le serveur nginx , sudo systemctl restart nginx
Mise en cache nginx ocsp_cache cinay.eu

Les droits dossier /var/www/default ,sudo chown $USER.www-data -R /var/www/default/ , sont modifiés pour autoriser l’accès au dossier via sshfs.

SSL Labs - analyse cinay.eu

Ouvrir le naviagteur avec l’url https://www.ssllabs.com/ssltest/analyze.html?d=cinay.eu et patienter…

SSL Labs - analyse cinay.eu