KVM debian cinay.eu

Package: 2 GB Mémoire, 1 CPU, 20 GB SSD, 100 Mbps
Selected Location: Gravelines
Debian 10 (Buster) (en version 64 bits)

PARAMETRES D’ACCES: L’adresse IPv4 du VPS est : 137.74.40.54 L’adresse IPv6 du VPS est : 2001:41d0:0302:2200:0000:0000:0000:0dac

Le nom du VPS est : vps652678.ovh.net

Le compte administrateur suivant a été configuré sur le VPS : Nom d’utilisateur : root Mot de passe : 0ixPbyF4

VPS OVH

OVH

Connexion sur “OVH8 VPS SSD 3 KVM 2 vCore(s) Ram 8Go SSD 40Go debian”

ssh root@137.74.40.54

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:0302:2200:0000:0000:0000:0dac
 netmask 128
 post-up /sbin/ip -6 route add 2001:41d0:0302:2200:0000:0000:0000:0001 dev eth0
 post-up /sbin/ip -6 route add default via 2001:41d0:0302:2200:0000:0000:0000:0001 dev eth0
 pre-down /sbin/ip -6 route del default via 2001:41d0:0302:2200:0000:0000:0000:0001 dev eth0
 pre-down /sbin/ip -6 route del 2001:41d0:0302:2200: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@137.74.40.54

Vérifier le réseau ip a

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:d5:d1:da brd ff:ff:ff:ff:ff:ff
    inet 137.74.40.54/32 brd 137.74.40.54 scope global dynamic eth0
       valid_lft 86357sec preferred_lft 86357sec
    inet6 2001:41d0:302:2200::dac/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fed5:d1da/64 scope link 
       valid_lft forever preferred_lft forever

Debian

cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
cat /etc/debian_version 
    10.1

Version OpenSSL

openssl version
    OpenSSL 1.1.1c  28 May 2019

Installer utilitaires

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

Configurer Locales (fr et en)

dpkg-reconfigure locales
locales-all installed, skipping locales generation

Europe/Paris (TimeZone tzdata)

Europe/Paris

dpkg-reconfigure tzdata
Current default time zone: 'Europe/Paris'
Local time is now:      Wed Sep 11 11:04:16 CEST 2019.
Universal Time is now:  Wed Sep 11 09:04:16 UTC 2019.

Création utilisateur

Utilisateur bustera

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

Mot de passe bustera

passwd bustera

Visudo pour les accès root via utilisateur bustera

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

Changer le mot de passe root

passwd root

Hostname

Modifier hostname

hostnamectl set-hostname --static cinay.eu

Modifier /etc/hosts

nano /etc/hosts
127.0.1.1 	cinay.eu vps652678
127.0.0.1       localhost
...

Vérifications

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

OVH DNS fournisseur domaine

Domaine cinay.eu distribué par OVH

$TTL 3600
@	IN SOA dns100.ovh.net. tech.ovh.net. (2019082104 86400 3600 3600000 300)
    3600 IN NS     dns100.ovh.net.
    3600 IN NS     ns100.ovh.net.
         IN A      137.74.40.54
    3600 IN AAAA   2001:41d0:302:2200::dac
*        IN CNAME  cinay.eu.

Connexion utilisateur

Déconnexion puis connexion ssh en mode utilisateur

ssh bustera@137.74.40.54

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-vps652678

Envoyer la clé publique sur le serveur KVM

scp ~/.ssh/kvm-vps652678.pub bustera@137.74.40.54:/home/bustera/

sur le serveur KVM On se connecte

ssh bustera@137.74.40.54

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

et donner les droits

chmod 600 $HOME/.ssh/authorized_keys

effacer le fichier de la clé

rm $HOME/kvm-vps652678.pub

Modifier la configuration serveur SSH

sudo nano /etc/ssh/sshd_config

Modifier

Port 55032
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-get 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 55032 -i ~/.ssh/kvm-vps652678 bustera@cinay.eu

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

Script bash

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)
lvm_entet="Sys. fichiers\tTaille\tUtilisé\tDispo\tUti%\tMonté sur"
lvm=$(df -h |grep mapper)    # les montages lvm
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;96m$lvm_entet\e[1;35m\e[1;49m
\e[1;35m\e[1;33m$sdx
\e[1;35m\e[1;33m$lvm
\e[1;35m\e[1;32m$meteo
\e[1;0m
"
chmod +x ssh_rc_bash # rendre le bash exécutable
./ssh_rc_bash        # exécution

Exécution script “neofetch” (facultatif)

Installer neofetch

sudo apt install  neofetch

Le lancement

neofetch 

systemd/journal

Ajout de l’utilisateur courant au groupe systemd-journal

sudo gpasswd -a $USER systemd-journal

Accès utilisateur aux fichiers log

sudo gpasswd -a $USER adm

Après déconnexion puis reconnexion , l’utilisateur a accès au journal:

journalctl

Pour avoir les lignes NON TRONQUEES

export SYSTEMD_LESS="FRXMK"

Pour un mode permanent ,modifier ~/.bashrc

echo 'export SYSTEMD_LESS="FRXMK"' >> ~/.bashrc

Certificats SSL letsencrypt (acme)

SSL Letsencrypt

Exporter les clés OVH

Domaine cinay.eu

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

Les certificats

[Wed 11 Sep 2019 11:22:18 AM CEST] Your cert is in  /home/bustera//.acme.sh/cinay.eu_ecc/cinay.eu.cer 
[Wed 11 Sep 2019 11:22:18 AM CEST] Your cert key is in  /home/bustera//.acme.sh/cinay.eu_ecc/cinay.eu.key 
[Wed 11 Sep 2019 11:22:18 AM CEST] The intermediate CA cert is in  /home/bustera//.acme.sh/cinay.eu_ecc/ca.cer 
[Wed 11 Sep 2019 11:22:18 AM CEST] And the full chain certs is there:  /home/bustera//.acme.sh/cinay.eu_ecc/fullchain.cer 

Les liens pour les certificats

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

OpenResty/Nginx PHP MariaDb

lemp

Ce script bash compile et installe openresty (nginx + openssl TLSv1.3 + modules dynamiques) ,le service nginx (systemd) pour le démarrage, PHP7.3 et mariadb. Téléchargement
Après téléchargement passer en mode super utilisateur (su ou sudo)

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/debian-compilation-openresty(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: openresty/1.15.8.1
OpenSSL 1.1.1c  28 May 2019
mysql  Ver 15.1 Distrib 10.3.17-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Mot de passe MySql/MariaDB : /etc/mysql/mdp
PHP 7.3.4-2 (cli) (built: Apr 13 2019 19:05:48) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.4-2, Copyright (c) 1999-2018, by Zend Technologies
********** FIN EXECUTION SCRIPT ************

Structure openresty nginx

Structure openresty

tree -L 1 /usr/local/openresty/
/usr/local/openresty/
├── bin
├── COPYRIGHT
├── luajit
├── lualib
├── nginx
├── pod
├── resty.index
└── site

Structure openresty/nginx

tree -L 1 /usr/local/openresty/nginx/
/usr/local/openresty/nginx/
├── client_body_temp
├── conf
├── fastcgi_temp
├── html
├── logs
├── modules
├── modules-enabled
├── proxy_temp
├── sbin
├── scgi_temp
├── sites
├── uwsgi_temp
└── www

Les fichiers de configuration nginx /usr/local/openresty/nginx/conf/

ls  /usr/local/openresty/nginx/conf/
fastcgi.conf		koi-utf		    nginx.conf		 uwsgi_params
fastcgi.conf.default	koi-win		    nginx.conf.default	 uwsgi_params.default
fastcgi_params		mime.types	    scgi_params		 win-utf
fastcgi_params.default	mime.types.default  scgi_params.default

Le dossier des configurations VHOST ,fichiers .conf

ls  /usr/local/openresty/nginx/sites/
default.conf

Le dossier racine VHOST /usr/local/openresty/nginx/www/

ls  /usr/local/openresty/nginx/www/
index.html  info.php

Création du fichier de configuration nginx ssl

sudo nano /usr/local/openresty/nginx/conf/ssl_params
    ssl_certificate /etc/ssl/private/cinay.eu-fullchain.pem;
    ssl_certificate_key /etc/ssl/private/cinay.eu-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';

Création du fichier des entêtes nginx headers

sudo nano /usr/local/openresty/nginx/conf/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";

Générer le fichier Diffie-Hellman

sudo -s
openssl dhparam -out /etc/ssl/private/dh2048.pem -outform PEM -2 2048

Fichier de configuration VHOST cinay.eu.conf

On va créer un répertoire pour les sous domaines cinay.eu

sudo mkdir -p /usr/local/openresty/nginx/sites/cinay.eu.d

Configuration de base avec SSL et sécurité + letsencrypt (renouvellement)
On va renommer le fichier default.conf créer précédemment en cinay.eu.conf et le modifier

sudo mv /usr/local/openresty/nginx/sites/default.conf /usr/local/openresty/nginx/sites/cinay.eu.conf
sudo nano /usr/local/openresty/nginx/sites/cinay.eu.conf
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; }
    # 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/dh2048.pem -outform PEM -2 2048
    ssl_dhparam /etc/ssl/private/dh2048.pem;

    root /usr/local/openresty/nginx/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 cinay.eu.d , uncomment the following directive
    include cinay.eu.d/*.conf;

    access_log /var/log/openresty/cinay.eu-access.log;
    error_log /var/log/openresty/cinay.eu-error.log;
}

Vérifier

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

relancer openresty

sudo systemctl restart openresty

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

Nginx et les modules

sudo nginx -V
nginx version: nginx/1.16.1
built by gcc 8.3.0 (Debian 8.3.0-6) 
built with OpenSSL 1.1.1c  28 May 2019
TLS SNI support enabled
configure arguments:
 --with-cc-opt='-g -O2 -fdebug-prefix-map=/usr/src/nginx-custom/$stable_nginx=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2'
 --with-ld-opt='-Wl,-z,relro -Wl,-z,now,-rpath,/usr/local/lib'
 --prefix=/usr/share/nginx
 --conf-path=/etc/nginx/nginx.conf
 --http-log-path=/var/log/nginx/access.log
 --error-log-path=/var/log/nginx/error.log
 --lock-path=/var/lock/nginx.lock
 --pid-path=/run/nginx.pid
 --modules-path=/usr/lib/nginx/modules
 --http-client-body-temp-path=/var/lib/nginx/body
 --http-fastcgi-temp-path=/var/lib/nginx/fastcgi
 --http-proxy-temp-path=/var/lib/nginx/proxy
 --http-scgi-temp-path=/var/lib/nginx/scgi
 --http-uwsgi-temp-path=/var/lib/nginx/uwsgi
 --with-debug
 --with-pcre-jit
 --with-http_ssl_module
 --with-http_stub_status_module
 --with-http_realip_module
 --with-http_auth_request_module
 --with-http_v2_module
 --with-http_dav_module
 --with-http_slice_module
 --with-threads
 --with-http_addition_module
 --with-http_flv_module
 --with-http_geoip_module=dynamic
 --with-http_gunzip_module
 --with-http_gzip_static_module
 --with-http_image_filter_module=dynamic
 --with-http_mp4_module
 --with-http_perl_module=dynamic
 --with-http_random_index_module
 --with-http_secure_link_module
 --with-http_sub_module
 --with-http_xslt_module=dynamic
 --with-mail=dynamic
 --with-mail_ssl_module
 --with-stream

Liens OpenResty Nginx

Pour avoir une compatibilité dans la structure entre nginx et openresty

Lien sur le binaire openresty et nginx
ln -s /usr/local/openresty/bin/openresty /usr/local/bin/nginx
Les fichiers de configuration nginx/OpenResty /usr/local/openresty/nginx/conf/
Créer le lien
ln -s /usr/local/openresty/nginx/conf /etc/nginx
Le dossier racine VHOST /usr/local/openresty/nginx/www/
Droits sur le dossier chown bustera:www-data -R /usr/local/openresty/nginx/www Créer le lien racine web
ln -s /usr/local/openresty/nginx/www /var/www
Créer un lien pour les fichiers de configuration des sites
ln -s /usr/local/openresty/nginx/sites /etc/nginx/conf.d

parefeu (iptables V4 V6)

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

sudo nano /sbin/iptables-firewall.sh
#!/bin/bash
# Configure iptables firewall

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

# iptables configuration
firewall_start() {
###################
#      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 55032 -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
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -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 55032 -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
ip6tables -A OUTPUT -p udp --dport 53 -j ACCEPT
ip6tables -A OUTPUT -p tcp --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 

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

OpenLDAP


OpenLDAP installation et configuration annuaire

JWT

Créer une clé secrète encryptée

// Generating an encryption key and a nonce
$key   = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES); // 256 bit
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); // 24 bytes

// Encrypt
$ciphertext = sodium_crypto_secretbox($msg, $nonce, $key);
// Decrypt
$plaintext = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);

echo $plaintext === $msg ? 'Success' : 'Error';