Mercredi 25 mars 2020 (Modifié le Mardi 31 mars 2020)

ASRock QC5000M Quad-Core APU

ASRock QC5000M (pdf)

ASRock QC5000M

  • Platform
    • Micro ATX Form Factor
    • Solid Capacitor design
    • High Density Glass Fabric PCB
  • CPU
    • AMD FT3 Kabini A4-5050/5000 Quad-Core APU
  • Memory
    • 2 x DDR3 DIMM Slots
    • Supports DDR3 1600/1333/1066 non-ECC, un-buffered memory
    • Max. capacity of system memory: 32GB (see CAUTION1)
  • Expansion Slot
    • 1 x PCI Express 2.0 x16 Slot (PCIE2: x4 mode)
    • 2 x PCI Express 2.0 x1 Slot
  • Graphics
    • Integrated AMD RadeonTM HD 8330 Graphics
    • DirectX 11.1, Pixel Shader 5.0
    • Max. shared memory 2GB
    • Dual graphics output: support D-Sub and HDMI ports by independent display controllers (see CAUTION2)
    • Supports HDMI with max. resolution up to 4K × 2K (4096x2160) @ 24Hz or 4K × 2K (3840x2160) @ 30Hz
    • Supports D-Sub with max. resolution up to 2048x1536 @ 60Hz
    • Supports Auto Lip Sync, Deep Color (12bpc), xvYCC and HBR (High Bit Rate Audio) with HDMI Port (Compliant HDMI monitor is required)
    • Supports HDCP with HDMI Port
    • Supports Full HD 1080p Blu-ray (BD) playback with HDMI Port
  • Audio
    • 7.1 CH HD Audio (Realtek ALC887 Audio Codec) * To configure 7.1 CH HD Audio, it is required to use an HD front panel audio module and enable the multi-channel audio feature through the audio driver.
    • Supports Surge Protection (ASRock Full Spike Protection)
    • ELNA Audio Caps
  • LAN
    • PCIE x1 Gigabit LAN 10/100/1000 Mb/s
    • Rea ltek RTL 8111GR
    • S u p p o r t s Wa k e - O n -WA N
    • Suppor t s Wa ke- On-L A N
    • Supports Lightning/ESD Protection (ASRock Full Spike Protection)
    • Supports LAN Cable Detection
    • Supports Energy Efficient Ethernet 802.3az
    • Supports PXE
  • Rear Panel I/O
    • 1 x PS/2 Mouse/Keyboard Port
    • 1 x Serial Port: COM1
    • 1 x D-Sub Port
    • 1 x HDMI Port
    • 4 x USB 2.0 Ports (Supports ESD Protection (ASRock Full Spike Protection))
    • 2 x USB 3.0 Ports (Supports ESD Protection (ASRock Full Spike Protection))
    • 1 x RJ-45 LAN Port with LED (ACT/LINK LED and SPEED LED)
    • HD Audio Jacks: Line in / Front Speaker / Microphone
  • Storage
    • 2 x SATA3 6.0 Gb/s Connectors, support NCQ, AHCI and Hot Plug
  • Connector
    • 1 x TPM Header
    • 1 x CPU Fan Connector (3-pin)
    • 2 x Chassis Fan Connectors (1 x 4-pin, 1 x 3-pin)
    • 1 x 24 pin ATX Power Connector
    • 1 x Front Panel Audio Connector
    • 2 x USB 2.0 Headers (Support 4 USB 2.0 ports) (Supports ESD Protection (ASRock Full Spike Protection))
  • BIOS Feature
    • 32Mb AMI UEFI Legal BIOS with multilingual GUI support
    • Supports “Plug and Play”
    • ACPI 1.1 compliance wake up events
    • SMBIOS 2.3.1 support
    • DRAM Voltage multi-adjustment
  • HardwareMonitor
    • CPU/Chassis temperature sensing
    • CPU/Chassis Fan Tachometer
    • CPU/Chassis Quiet Fan
    • CPU/Chassis Fan multi-speed control
    • Voltage monitoring: +12V, +5V, +3.3V, Vcore
  • OS
    • Microsoft® Windows® 10 64-bit / 8.1 32-bit / 8.1 64-bit / 8 32-bit / 8 64-bit / 7 32-bit / 7 64-bit / XP 32-bit / XP 64-bit*
    • USB 3.0 is not supported by Windows® XP* For the updated Windows® 10 driver, please visit ASRock’s website for details: http://www.asrock.com
  • Certifica-tions
    • FCC, CE, WHQL
    • ErP/EuP ready (ErP/EuP ready power supply is required)

Modifier la structure avant REINSTALLATION

On aprt de l’existant Serveur Debian Buster xoyize.xyz (srvxo,ex PC2)

Structure actuelle

# pvs
  PV         VG     Fmt  Attr PSize    PFree  
  /dev/sda4  ssd-vg lvm2 a--  <107,29g      0 
  /dev/sdb1  hdd-2g lvm2 a--    <1,82t 839,01g
# vgs
  VG     #PV #LV #SN Attr   VSize    VFree  
  hdd-2g   1   1   0 wz--n-   <1,82t 839,01g
  ssd-vg   1   3   0 wz--n- <107,29g      0 
# lvs
  LV    VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvhdd hdd-2g -wi-ao----   1,00t                                                    
  home  ssd-vg -wi-ao----  40,00g                                                    
  nfs   ssd-vg -wi-ao---- <47,29g                                                    
  root  ssd-vg -wi-ao----  20,00g                                                    

On transfère le home et nfs vers le volume hdd-2g

sudo -s
lvcreate -L 40G -n home hdd-2g
lvcreate -L 50G -n nfs hdd-2g
mkfs.ext4 /dev/hdd-2g/home 
mkfs.ext4 /dev/hdd-2g/nfs
mkdir -p /mnt/temp/{home,nfs}
mount /dev/hdd-2g/home /mnt/temp/home/
mount /dev/hdd-2g/nfs /mnt/temp/nfs/
rsync -a /home/* /mnt/temp/home/
rsync -a /srv/nfs/* /mnt/temp/nfs/

Modification fstab

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/ssd--vg-root /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda2 during installation
UUID=6ff909c4-5117-4b17-a571-54bde94fd6b5 /boot           ext2    defaults        0       2
# swap was on /dev/sda3 during installation
UUID=09acc7b3-0516-4963-ad54-660f66e59151 none            swap    sw              0       0
/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0

/dev/mapper/hdd--2g-home /home           ext4    defaults        0       2
/dev/mapper/hdd--2g-lvhdd     /srv/data    ext4    defaults        0       2
/dev/mapper/hdd--2g-nfs       /srv/nfs     ext4    defaults        0       2

Appliquer

mount -a

Arrêt service virtualBox

systemctl stop vmdebian
systemctl disable vmdebian

Redémarrer

systemctl reboot

Effacer les volumes

sudo -s
lvremove /dev/ssd-vg/home
lvremove /dev/ssd-vg/nfs

Créer un nouveu volume “rootb” de 20G

lvcreate -L 20G -n rootb ssd-vg
mkfs.ext4 /dev/ssd-vg/rootb

Installer gdisk

apt install gdisk

Partitions

gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): p
Disk /dev/sda: 234441648 sectors, 111.8 GiB
Model: SSD2SC120G3SA754
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): E404411D-4E3E-4957-A853-D095508F4024
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 234441614
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048            6143   2.0 MiB     EF02  BIOS boot partition
   2            6144         1054719   512.0 MiB   8300  Linux filesystem
   3         1054720         9443327   4.0 GiB     8200  Linux swap
   4         9443328       234441614   107.3 GiB   8E00  Linux LVM

Passer au chapitre Installation debian 10

Debian Buster

Partitionnement du disque

  • 2MB, type EF02 (BIOS partition). Utilisé par GRUB2/BIOS-GPT. (/dev/sda1)
  • 512MB, type 8300 (Linux). Pour le boot linux /boot (/dev/sda2)
  • 4GB, type 8200 (swap). Partition swap (en dehors de lvm). (/dev/sda3)
  • Espace restant, type 8E00 (LVM). Pour le root / et /home. (/dev/sda4).

Partitionnement du reste du disque SSD 120G GPT + LVM

gdisk /dev/sda

On passe en mode expert : x
On efface tout : z
On relance gdisk

gdisk /dev/sda
GPT fdisk (gdisk) version 0.8.6
 
Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present
 
Creating new GPT entries.
 
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-31457246, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-31457246, default = 31457246) or {+-}size{KMGTP}: +2M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ef02
Changed type of partition to 'BIOS boot partition'

Command (? for help): n
Partition number (2-128, default 2): 2
First sector (34-31457246, default = 6144) or {+-}size{KMGTP}: 
Last sector (6144-31457246, default = 31457246) or {+-}size{KMGTP}: +512M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8300
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (3-128, default 3): 3
First sector (34-31457246, default = 210944) or {+-}size{KMGTP}: 
Last sector (210944-31457246, default = 31457246) or {+-}size{KMGTP}: +4G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'

Command (? for help): n
Partition number (4-128, default 4): 
First sector (34-31457246, default = 4405248) or {+-}size{KMGTP}: 
Last sector (4405248-31457246, default = 31457246) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8e00
Changed type of partition to 'Linux LVM'
 
Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
 
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.

Installation debian 10

  • Installation effectuée à partir d’une clé USB bootable , fichier ISO : debian-10.0.0-amd64-netinst.iso
  • Choix “partitionnement manuel”

Debian 10

  • Serveur virtuel 64 bits VirtualBox : Debian Buster
  • machine : srvxo
  • domaine :
  • root : ytreu49
  • Utilisateur : xoyi
  • Mot de passe : xoyi49
  • Adresse IP : 192.168.0.45
  • Accès
    • SSH : ssh bust@192.168.0.45
    • SSH + clé : **ssh -i ~/.ssh/vbox-vmbust-ed25519 bust@192.168.0.49** (facultatif)
    • Transfert de fichier : **scp -P 55022 -i ~/.ssh/vbox-vmbust-ed25519 fichiera fichierb bust@192.168.0.49:/home/bust** (facultatif)

Partitionnement
Disque SCSI1(0,0,0)(sda) 120.0 GB

Partition Taille _ Type Commentaire _
n°1 2.1 MB K biosgrub Bios boot pa  
n°2 536.9 MB   ext2 Linux filesys /boot
n°3 4.3 GB F swap Linux swap swap
n°4 115.2 GB K lvm Linux lvm  

Groupe de volumes LVM ssd-vg

Partition Taille _ Type Commentaire _
n°1 21.5 GB F ext4   / rootb

Groupe de volumes LVM hdd-2g

Partition Taille _ Type Commentaire _
n°1 42.9 GB F ext4   /home

Sélection des logiciels

  • serveur SSH
  • utilitaires usuels du système

Oter la clé après installation

Connexion SSH

ssh xoyi@192.168.0.45

Passer en root

su 

Mise à jour

apt update && apt upgrade -y

Installer les outils et sudo

apt install rsync curl tmux jq figlet tree git -y

Installer sudo

apt install sudo

Visudo pour les accès root via utilisateur bust

echo "xoyi     ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Eviter l’erreur “Possible missing firmware” sous Debian

type de message

W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168f-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168f-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8105e-1.fw for module r8169

Résolution du problème

Certains pilotes de matériels sont fournis par leurs constructeurs respectifs mais sont “non open-source”, il reste la propriété de leurs constructeurs. Donc pour corriger ce problème, il faut installer le paquet firmware-linux-nonfree.

En premier lieu, on ajoute à sources.list le dépôt non-free. En ligne de commande :

sudo -s
sed -i "s/main/main\ non-free/g" /etc/apt/sources.list  

Ensuite, reste plus qu’à rafraîchir les dépôts avec la commande :

apt update

Puis on installe les paquets firmware-linux-non-free et firmware-realtek avec la commande suivante :

apt install firmware-linux-nonfree firmware-realtek

Historique de la ligne de commande

Ajoutez la recherche d’historique de la ligne de commande au terminal. Tapez un début de commande précédent, puis utilisez shift + up (flèche haut) pour rechercher l’historique filtré avec le début de la commande.

# Global, tout utilisateur
echo '"\e[1;2A": history-search-backward' | sudo tee -a /etc/inputrc
echo '"\e[1;2B": history-search-forward' | sudo tee -a /etc/inputrc

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é vbox-srvbust-ed25519 pour une liaison SSH avec le serveur KVM.

ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/vbox-srvbust-ed25519

Envoyer la clé publique sur le serveur KVM

scp ~/.ssh/vbox-srvbust-ed25519.pub xoyi@192.168.0.45:/home/xoyi/

sur le serveur KVM On se connecte

ssh xoyi@192.168.0.45

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/vbox-srvbust-ed25519.pub >> $HOME/.ssh/authorized_keys

et donner les droits

chmod 600 $HOME/.ssh/authorized_keys

effacer le fichier de la clé

rm $HOME/vbox-srvbust-ed25519.pub

Modifier la configuration serveur SSH

Port = 55035 # changement numéro port , facultatif
PermitRootLogin no # Connexion par root NON autorisée
PasswordAuthentication no # Utilise la clé comme authentification

Exécuter les commande ci-dessous

sudo sed -i 's/#Port 22/Port 55035/g' /etc/ssh/sshd_config
sudo sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/g' /etc/ssh/sshd_config
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config

Modifier

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 55035 -i ~/.ssh/vbox-srvbust-ed25519 xoyi@192.168.0.45

Adressage ipv6

ipv6

Adresse IP : 192.168.0.45
Mac Adress : 70:85:c2:53:cb:80

ip addr
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: 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.45/24 brd 192.168.0.255 scope global dynamic enp3s0
       valid_lft 41814sec preferred_lft 41814sec
    inet6 2a01:e34:eebf:df0:7285:c2ff:fe53:cb80/64 scope global dynamic mngtmpaddr 
       valid_lft 86318sec preferred_lft 86318sec
    inet6 fe80::7285:c2ff:fe53:cb80/64 scope link 
       valid_lft forever preferred_lft forever

La carte n’est joignable de l’internet que par son adresse IPV6
NextHop Freebox permet d’attribuer une adresse IPV6

Prefixe : 2a01:e34:eebf:df5:://64
Next Hop: fe80::7285:c2ff:fe53:cb80
Passerelle IPV6 Box : fe80::224:d4ff:fea6:aa20

Modifier interface réseau debian

sudo nano /etc/network/interfaces

REMPLACER

# 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

PAR

# Configuration static ipv4/ipv6
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.45
 netmask 255.255.255.0
 network 192.168.0.0
 broadcast 192.168.0.255
 gateway 192.168.0.254
	
# This is an autoconfigured IPv6 interface

iface enp3s0 inet6 static
  address 2abb:e70:ffef:cd3::1
  netmask 64
  post-up ip -6 route add default via fe80::224:d4ff:fea6:aa20 dev enp3s0

Redémarrer la machine

sudo systemctl reboot

Après reboot, connexion SSH
Vérifier adresses IP V4 et V6

ip addr
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: 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.45/24 brd 192.168.0.255 scope global enp3s0
       valid_lft forever preferred_lft forever
    inet6 2abb:e70:ffef:cd3::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

Vérifier avec un autre poste sur le même réseau local

ping -6 -c5 2abb:e70:ffef:cd3::1
PING 2abb:e70:ffef:cd3::1(2abb:e70:ffef:cd3::1) 56 data bytes
64 bytes from 2abb:e70:ffef:cd3::1: icmp_seq=1 ttl=56 time=55.6 ms
64 bytes from 2abb:e70:ffef:cd3::1: icmp_seq=2 ttl=56 time=54.4 ms
64 bytes from 2abb:e70:ffef:cd3::1: icmp_seq=3 ttl=56 time=54.2 ms
64 bytes from 2abb:e70:ffef:cd3::1: icmp_seq=4 ttl=56 time=54.7 ms
64 bytes from 2abb:e70:ffef:cd3::1: icmp_seq=5 ttl=56 time=54.7 ms

--- 2abb:e70:ffef:cd3::1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 9ms
rtt min/avg/max/mdev = 54.239/54.719/55.574/0.544 ms

DMZ et Next Hop Freebox

Activer la dmz sur la “freebox” pour rediriger tout le traffic entrant sur l’adresse ip 192.168.0.45

Next Hop

DNS OVH

dns OVH

Modification domaine xoyize.xyz pour un accès IPV4/IPV6.

$TTL 3600
@	IN SOA dns106.ovh.net. tech.ovh.net. (2019100803 86400 3600 3600000 300)
    3600 IN NS     dns106.ovh.net.
    3600 IN NS     ns106.ovh.net.
    3600 IN A      78.235.240.223
    3600 IN AAAA   2a01:e34:eebf:df3::1
    3600 IN CAA    0 issue "letsencrypt.org"
*   3600 IN CNAME  xoyize.xyz.

Modification domaine ouestline.net pour un accès IPV4/IPV6.

$TTL 3600
@	IN SOA dns111.ovh.net. tech.ovh.net. (2019100900 86400 3600 3600000 300)
    3600 IN NS     ns111.ovh.net.
    3600 IN NS     dns111.ovh.net.
    3600 IN MX     10 ouestline.net.
     3600 IN A      78.235.240.223
    3600 IN AAAA   2a01:e34:eebf:df2::1
*   3600 IN CNAME  ouestline.net.

Hostname

Vérifier le nom

# sudo hostnamectl set-hostname srvxo # Pour un changement de nom
hostnamectl status
   Static hostname: srvxo
         Icon name: computer-desktop
           Chassis: desktop
        Machine ID: 749dcacd3d7b4f2f9414f302719aa5da
           Boot ID: 77c405785c8a4f22bd5b285da7733afa
  Operating System: Debian GNU/Linux 10 (buster)
            Kernel: Linux 4.19.0-8-amd64
      Architecture: x86-64

Il faut modifier le fichier /etc/hosts , ajout domaine xoyize.xyz

sudo nano /etc/hosts
127.0.0.1	localhost
127.0.1.1	xoyize.xyz	srvxo

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Après modification

hostname --fqdn

xoyize.xyz

Journalctl

Ajout utilisateur courant au groupe systemd-journal et adm

sudo gpasswd -a $USER systemd-journal
sudo gpasswd -a $USER adm

Lignes non tronquées ,ajouter au fichier ~/.bashrc

echo "export SYSTEMD_LESS=FRXMK journalctl" >> /home/$USER/.bashrc

Prise en compte après déconnexion/reconnexion

Volumes disques et partitions

Les disques

fdisk -l
Disque /dev/sda : 111,8 GiB, 120034123776 octets, 234441648 secteurs
Modèle de disque : SSD2SC120G3SA754
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : gpt
Identifiant de disque : E404411D-4E3E-4957-A853-D095508F4024

Périphérique   Début       Fin  Secteurs Taille Type
/dev/sda1       2048      6143      4096     2M Amorçage BIOS
/dev/sda2       6144   1054719   1048576   512M Système de fichiers Linux
/dev/sda3    1054720   9443327   8388608     4G Partition d'échange Linux
/dev/sda4    9443328 234441614 224998287 107,3G LVM Linux

Disque /dev/sdb : 1,8 TiB, 2000398934016 octets, 3907029168 secteurs
Modèle de disque : ST2000LM007-1R81
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 4096 octets
taille d'E/S (minimale / optimale) : 4096 octets / 4096 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x6e63fe61

Périphérique Amorçage Début        Fin   Secteurs Taille Id Type
/dev/sdb1              2048 3907026943 3907024896   1,8T  7 HPFS/NTFS/exFAT

Volumes LVM

root@srvxo:/home/xoyi# pvs
  PV         VG     Fmt  Attr PSize    PFree  
  /dev/sda4  ssd-vg lvm2 a--  <107,29g <67,29g
  /dev/sdb1  hdd-2g lvm2 a--    <1,82t 749,01g
root@srvxo:/home/xoyi# vgs
  VG     #PV #LV #SN Attr   VSize    VFree  
  hdd-2g   1   3   0 wz--n-   <1,82t 749,01g
  ssd-vg   1   2   0 wz--n- <107,29g <67,29g
root@srvxo:/home/xoyi# lvs
  LV    VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home  hdd-2g -wi-ao---- 40,00g                                                    
  lvhdd hdd-2g -wi-a-----  1,00t                                                    
  nfs   hdd-2g -wi-a----- 50,00g                                                    
  root  ssd-vg -wi-a----- 20,00g                                                    
  rootb ssd-vg -wi-ao---- 20,00g                                                    

Création des points de montage

sudo mkdir -p /srv/{data,nfs}

Modification /etc/fstab pour ajout volume “data”

/dev/mapper/hdd--2g-lvhdd     /srv/data    ext4    defaults        0       2
/dev/mapper/hdd--2g-nfs       /srv/nfs     ext4    defaults        0       2

Tester le montage

sudo mount -a

Structure
df -h

Sys. de fichiers          Taille Utilisé Dispo Uti% Monté sur
udev                        3,7G       0  3,7G   0% /dev
tmpfs                       741M    8,6M  733M   2% /run
/dev/mapper/ssd--vg-rootb    20G    1,4G   18G   8% /
tmpfs                       3,7G       0  3,7G   0% /dev/shm
tmpfs                       5,0M       0  5,0M   0% /run/lock
tmpfs                       3,7G       0  3,7G   0% /sys/fs/cgroup
/dev/sda2                   504M     84M  395M  18% /boot
/dev/mapper/hdd--2g-home     40G     10G   28G  27% /home
tmpfs                       741M       0  741M   0% /run/user/1000
/dev/mapper/ssd--vg-root     20G    9,6G  9,0G  52% /mnt/temp
/dev/mapper/hdd--2g-lvhdd  1007G    309G  648G  33% /srv/data
/dev/mapper/hdd--2g-nfs      49G    725M   46G   2% /srv/nfs

Script analyse - ~/ssh_rc_bash_only

Le batch

nano ~/ssh_rc_bash_only
#!/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. de fichiers                      Taille Utilisé Dispo Uti% Monté sur"
lvm=$(df -h |grep mapper)
lvm+='\n'$(df -h |grep sda)
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$lvm
\e[1;35m\e[1;32m$meteo
\e[1;0m
"

Les droits en exécution

chmod +x ~/ssh_rc_bash_only

Effacer motd

sudo rm /etc/motd

Exécution

./ssh_rc_bash_only

Texte alternatif

Logo ascii

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

Certificats letsencrypt - domaine *.xyz

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 

Résultat de l’installation

[lundi 16 mars 2020, 10:38:21 (UTC+0100)] Installing to /home/xoyi/.acme.sh
[lundi 16 mars 2020, 10:38:21 (UTC+0100)] Installed to /home/xoyi/.acme.sh/acme.sh
[lundi 16 mars 2020, 10:38:21 (UTC+0100)] Installing alias to '/home/xoyi/.bashrc'
[lundi 16 mars 2020, 10:38:21 (UTC+0100)] OK, Close and reopen your terminal to start using acme.sh
[lundi 16 mars 2020, 10:38:21 (UTC+0100)] Installing cron job
no crontab for xoyi
no crontab for xoyi
[lundi 16 mars 2020, 10:38:21 (UTC+0100)] Good, bash is found, so change the shebang to use bash as preferred.
[lundi 16 mars 2020, 10:38:22 (UTC+0100)] OK

Se déconnecter puis se reconnecter pou 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 xoyize.xyz -d *.xoyize.xyz
[...]
[lundi 26 août 2019, 13:04:15 (UTC+0200)] Please open this link to do authentication: https://eu.api.ovh.com/auth/?credentialToken=ls7bXtEJZSv67jKAd9M1YNQQvpAd8W7Uohg2GSiCUXvVnEgtJ2OaiZE6EwPbi0lY
[...]

Connecter l’url ci-dessus, s’authentifier puis sélectionner “unlimited” et valider.Le message suivant dit s’afficher.

OVH authentication Success ! 

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

acme.sh --dns dns_ovh --issue --ocsp --keylength ec-384 -d xoyize.xyz -d *.xoyize.xyz

Les certificats sont disponibles

[lundi 16 mars 2020, 10:43:18 (UTC+0100)] Your cert is in  /home/xoyi/.acme.sh/xoyize.xyz_ecc/xoyize.xyz.cer 
[lundi 16 mars 2020, 10:43:18 (UTC+0100)] Your cert key is in  /home/xoyi/.acme.sh/xoyize.xyz_ecc/xoyize.xyz.key 
[lundi 16 mars 2020, 10:43:18 (UTC+0100)] The intermediate CA cert is in  /home/xoyi/.acme.sh/xoyize.xyz_ecc/ca.cer 
[lundi 16 mars 2020, 10:43:18 (UTC+0100)] And the full chain certs is there:  /home/xoyi/.acme.sh/xoyize.xyz_ecc/fullchain.cer 

Les liens pour les certificats

SSL

# domaine xoyize.xyz
sudo ln -s /home/xoyi//.acme.sh/xoyize.xyz_ecc/fullchain.cer /etc/ssl/private/xoyize.xyz-fullchain.pem   # full chain certs
sudo ln -s /home/xoyi//.acme.sh/xoyize.xyz_ecc/xoyize.xyz.key /etc/ssl/private/xoyize.xyz-key.pem     # cert key
sudo ln -s /home/xoyi//.acme.sh/xoyize.xyz_ecc/xoyize.xyz.cer /etc/ssl/private/xoyize.xyz-chain.pem   # cert domain
sudo ln -s /home/xoyi//.acme.sh/xoyize.xyz_ecc/ca.cer /etc/ssl/private/xoyize.xyz-ca.pem                 # intermediate CA cert

Pour un lancement manuel (ajout domaine, sous-domaine ou regénération des certificats)

acme.sh --dns dns_ovh --issue --keylength ec-384 -d xoyize.xyz -d *.xoyize.xyz

Un certificat Wildcard Let’s Encrypt qui se renouvelle automatiquement

crontab -l
21 0 * * * "/home/xoyi/.acme.sh"/acme.sh --cron --home "/home/xoyi/.acme.sh" > /dev/null

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.

Installation NFS

on passe en mode su

sudo -s

Installation

apt install nfs-kernel-server

Vérification serveur

rpcinfo -p | grep nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100003    3   udp   2049  nfs

Vérifier que le système supporte effectivement NFS

cat /proc/filesystems | grep nfs
nodev	nfsd

Si la commande précédente ne renvoie rien, il se peut que le module NFS ne soit pas chargé, auquel cas, il faut le charger modprobe nfs
Enfin, vérifions que portmap attend les instructions sur le port 111

rpcinfo -p | grep portmap
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper

Configuration du partage

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

/srv/data	192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
/srv/nfs	192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)

Exporter

exportfs -ar

Sécurisation NFS

Passage en su

sudo -s

Le protocole RPC n’a pas la réputation d’être bien sécurisé, mais la version 4 de NFS entend corriger ce problème, elle est donc à privilégier. Il est déconseillé d’effectuer un partage NFS via internet, ou bien dans ce cas, opter pour un tunnel crypté.

  • S’assurer que les partages sont réservés à certaines IP dans /etc/exports
  • S’appuyer sur rpcbind (/etc/hosts.deny et /etc/hosts.allow) pour sécuriser l’accès au serveur NFS
  • Configurer convenablement iptables

hosts.deny , hosts.allow
Tout le monde est interdit, puis le LAN est autorisé:

echo "rpcbind mountd nfsd statd lockd rquotad : ALL" >> /etc/hosts.deny
echo "rpcbind mountd nfsd statd lockd rquotad: 192.168.0." >> /etc/hosts.allow

iptables (NFS)
Par défaut, les différents services NFS (lockd, statd, mountd, etc.) demandent des assignations de ports aléatoires à partir du portmapper (portmap/rpcbind), ce qui signifie que la plupart des administrateurs doivent ouvrir une gamme de ports dans leur base de règles de pare-feu pour que NFS fonctionne.

Il va donc falloir fixer les ports de ces services afin de créer les règles iptables.

echo 'STATDOPTS="--port 32765 --outgoing-port 32766"' >> /etc/default/nfs-common
echo 'RPCMOUNTDOPTS="-p 32767"' >> /etc/default/nfs-kernel-server
echo 'RPCRQUOTADOPTS="-p 32769"' >> /etc/default/quota

Relance sysctl

sysctl --system
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.d/protect-links.conf ...
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.conf ...

Relancer le service

systemctl restart nfs-kernel-server

Voici les règles à fixer dans le parefeu

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"

Configurer le partage NFS avec SetGID

Maintenant que le serveur NFS est configuré avec le point de montage NFS de base /srv/nfs, nous devons configurer SetGID dans ce répertoire, comme indiqué ci-dessous.

sudo chmod 2770 /srv/nfs

Cela a également défini les autorisations 770 sur le répertoire, de sorte que l’utilisateur racine et le groupe défini disposent d’autorisations complètes. Le 2 permet setgid.

Ensuite, nous créons un groupe appelé ‘partage’ et modifions le répertoire /srv/nfs afin que le propriétaire du groupe soit ce groupe ‘partage’.
Nous spécifions également manuellement le GID qui sera utilisé pour le groupe en tant que 9999; il doit s’agir d’un numéro libre sur votre client et votre serveur.

Exécuter groupadd sur le client et sur le serveur, et ajouter un utilisateur à ce groupe.

sudo groupadd -g 9999 partage      # sur client et serveur
sudo usermod -a -G partage $USER   # sur client et serveur
sudo chgrp partage /srv/nfs        # serveur uniquement

NE PAS OUBLIER DE SE DECONNECTER/CONNECTER

Nous pouvons confirmer que setgid est en place, comme indiqué ci-dessous, où le bit d’exécution pour les autorisations de groupe est une minuscule. Cela passera à une majuscule S si le groupe ne dispose pas de l’autorisation d’exécution et que seul setgid est en place.

ls -la /srv/nfs/

drwxrws— 5 root partage 4096 mars 16 07:57 .

Désormais, tous les fichiers ou répertoires créés dans /srv/nfs se verront automatiquement attribuer le propriétaire du groupe ‘partage’, ce qui permettra essentiellement la collaboration de groupe, car tout utilisateur appartenant au groupe ‘partage’ pourra désormais accéder aux fichiers créés par d’autres utilisateurs du groupe. même groupe dans le répertoire /srv/nfs.

Samba client

Configuration du client SAMBA

Cela devrait fonctionner sans problème si vous installez cifs-utils

sudo apt install cifs-utils smbclient

Utilsation

smbclient -L <nom-de-l'ordinateur> (nécessite le paquet smbclient)

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
#!/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 55035 -j ACCEPT

# NFSV4
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"

# 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 55035 -j ACCEPT
ip6tables -A INPUT -p udp --dport 55035 -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 

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

Sauvegardes

BorgBackup

Machine qui stocke les sauvegardes → xoyize.xyz - 192.168.0.45

Installation BorgBackup et ajout clé publique sur le serveur de sauvegarde xoyize.xyz
On se connecte sur la machine et on passe en mode su

sudo -s

Installer borgbackup

apt install borgbackup

Créer un utilisateur borg dédié aux sauvegardes par BorgBackup :

useradd borg --create-home --home-dir /srv/data/borg-backups/

Vérifier le propriétaire des dossiers “borg” , sinon modifier

chown borg.borg -R  /srv/data/borg-backups/

Cet utilisateur n’a pas de mot de passe, nous nous y connecterons uniquement avec une clef SSH ,ajout de la clé publique

mkdir -p /srv/data/borg-backups/.ssh
cat >> /srv/data/borg-backups/.ssh/authorized_keys

Copier/coller le contenu du fichier du fichier de clef publique (fichier /root/.ssh/yanspm_ed25519.pub de la machine à sauvegarder ) dans ce terminal, et presser [Ctrl]+[D] pour valider.

Autoriser utilisateur borg à exécuter /usr/bin/borg uniquement

echo "borg ALL=NOPASSWD: /usr/bin/borg" >> /etc/sudoers

Machines autorisés à effectuer leur backup

Le dossier de base pour les sauvegardes sur le serveur xoyize.xyz : /srv/data/borg-backups/
Pour info les machines autorisés à effectuer leur backup sur cette machine :
yannick-pc e6230

Rsync

Type Source Destination Commentaire
rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ (xoyize.xyz) (rsync over ssh)
rsync /srv/data/Musique/* (xoyize.xyz) usernl@xoyaz.xyz:/home/usernl/backup/musique/ (rsync over ssh)
rsync /srv/data/CalibreTechnique/* (xoyize.xyz) usernl@xoyaz.xyz:/home/usernl/backup/CalibreTechnique/ (rsync over ssh)

Synchronisation dossier de sauvegarde borg entre ‘xoyaz.xyz’ et ‘xoyize.xyz’

Pour les serveurs yanspm.com yanfi.net et cinay.xyz ,les sauvegardes sont effectuées en utilisant le logiciel borg ,vers le serveur de backup xoyaz.xyz et on utilise rsync pour les transférer localement

connexion avec clé
sur le serveur appelant srvxo (xoyize.xyz - 192.168.0.45) Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) nommé xoyaz_ed25519 pour une liaison SSH avec le serveur KVM.

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

Ajouter la clé publique au fichier ~/.ssh/authorized_keys du serveur de backup xoyaz.xyz

Test connexion

ssh -p 55036 -i /home/xoyi/.ssh/xoyaz_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null usernl@xoyaz.xyz

Créer la commande rsync avec son fichier d’exclusion

nano .ssh/exclude-list.txt
.bash_logout
.bashrc
.profile
.ssh

Lancer la commande rsync dans une fenêtre terminal tmux en mode su

tmux
sudo -s
rsync -avz --progress --stats --human-readable --exclude-from '/home/xoyi/.ssh/exclude-list.txt' --rsync-path="sudo rsync" -e "ssh -p 55036 -i /home/xoyi/.ssh/xoyaz_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"  usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/

Paramétrer pour une exécution chaque jour à 2h30

sudo crontab -e
# Synchro Backup entre serveur distant xoyaz.xyz (contient les backup des serveurs VPS) et le serveur local xoyize.xyz 
30 02 * * * rsync -avz --progress --stats --human-readable --exclude-from '/home/xoyi/.ssh/exclude-list.txt' --rsync-path="sudo rsync" -e "ssh -p 55036 -i /home/xoyi/.ssh/xoyaz_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"  usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ ; if [ $? -eq 0 ]; then echo "Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ : Synchronisation OK" | systemd-cat -t rsync-cron -p info ; else echo "Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ :Erreur Synchronisation" | systemd-cat -t rsync-cron -p emerg ; fi

Explications sur la commande
On redirige le résultat de la commande ($?) vers le journal avec systemd-cat
if [ $? -eq 0 ]; then echo "Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ : Synchronisation OK" | systemd-cat -t rsync-cron -p info ; else echo "Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ :Erreur Synchronisation" | systemd-cat -t rsync-cron -p emerg ; fi

la ligne de commande décortiquée:

if [ $? -eq 0 ]
 then
  echo "Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ : Synchronisation OK" | systemd-cat -t rsync-cron -p info
 else
  echo "Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ :Erreur Synchronisation" | systemd-cat -t rsync-cron -p emerg
fi

On peut lire le journal avec l’identifiant rsync-cron

journalctl -t rsync-cron
-- Logs begin at Thu 2019-08-29 11:07:55 CEST, end at Tue 2019-09-17 17:50:32 CEST. --
sept. 17 17:50:32 srvxo rsync-cron[11728]: Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ : Synchronisation OK

Synchronisation dossiers Musique Calibre entre ‘xoyize.xyz’ et ‘xoyaz.xyz’

Ajouter au lanceur de tâches programmées

sudo crontab -e
# Sauvegarde de dossiers /srv/data/{Musique,CalibreTechnique} sur serveur distant backup (nl) xoyaz.xyz
# Synchro Musique avec Backup
00 02 * * * rsync -avz --progress --stats --human-readable --exclude-from '/home/xoyi/.ssh/exclude-list.txt' --rsync-path="sudo rsync" -e "ssh -p 55036 -i /home/xoyi/.ssh/xoyaz_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"  /srv/data/Musique/* usernl@xoyaz.xyz:/home/usernl/backup/musique/ ; if [ $? -eq 0 ]; then echo "Rsync /srv/data/Musique/* usernl@xoyaz.xyz:/home/usernl/backup/musique/ : Synchronisation OK" | systemd-cat -t rsync-cron -p info ; else echo "Rsync /srv/data/Musique/* usernl@xoyaz.xyz:/home/usernl/backup/musique/ :Erreur Synchronisation" | systemd-cat -t rsync-cron -p emerg ; fi
 
# Synchro CalibreTechnique avec Backup
10 02 * * * rsync -avz --progress --stats --human-readable --exclude-from '/home/xoyi/.ssh/exclude-list.txt' --rsync-path="sudo rsync" -e "ssh -p 55036 -i /home/xoyi/.ssh/xoyaz_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"  /srv/data/CalibreTechnique/* usernl@xoyaz.xyz:/home/usernl/backup/CalibreTechnique/ ; if [ $? -eq 0 ]; then echo "Rsync /srv/data/CalibreTechnique/* usernl@xoyaz.xyz:/home/usernl/backup/CalibreTechnique/ : Synchronisation OK" | systemd-cat -t rsync-cron -p info ; else echo "Rsync /srv/data/CalibreTechnique/* usernl@xoyaz.xyz:/home/usernl/backup/CalibreTechnique/ :Erreur Synchronisation" | systemd-cat -t rsync-cron -p emerg ; fi

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

Installer resolvconf

sudo -s
apt install resolvconf -y
echo "nameserver 127.0.0.1" >> /etc/resolvconf/resolv.conf.d/head

Une fois le paquet « resolvconf » installé, il ne faut plus modifier le fichier « /etc/resolv.conf », car le contenu de celui-ci sera automatiquement géré et remplacé par « resolvconf ».

Blocage des DMP avec Unbound (NON IMPLANTE)

Configuration nécessaire pour Unbound afin de bloquer certaines « Data Management Platforms » (DMP) utilisées par de plus en plus de sites (liberation.fr, oui.scnf, lemonde.fr, fnac.com…) et qui échappent – pour l’instant aux bloqueurs de traqueurs traditionnels (uBlock Origin ou uMatrix par exemple)https://gitea.cinay.xyz/yannick/blocage-dmp-unbound

Le cœur du problème
Dernièrement, une conjoncture d’éléments est venue semer le trouble chez nos aspirateurs :

  • L’entrée en vigueur du RGPD en Europe
  • La part de plus en plus grande d’internautes utilisant des bloqueurs de publicités
  • La volonté des éditeurs de navigateurs web (Chrome et Firefox – et donc leurs dérivés) de bloquer par défaut les traqueurs ou les cookies tiers.

Un mouchard est dit tiers – ou 3rd-party quand on est disruptif – quand il n’est pas chargé depuis le domaine (ou un de ses sous domaines) que vous visitez. Par exemple quand on visite https://liberation.fr/, le script chargé depuis www.google-analytics.com est tiers. Si le même mouchard est chargé depuis un sous-domaine de liberation.fr, il est dit 1st-party (primaire a priori en bon français). Le hic, pour nos amis start-uppers est que les mouchards/cookies tiers sont triviaux à bloquer. Ne pas charger les cookies tiers est d’ailleurs une option répandue dans les navigateurs depuis des années.

La fourberie
La technique développée par les marketeux pour ne pas voir les juteuses données personnelles leur échapper est à la fois techniquement très simple et redoutable. Il suffit de transformer les crasses 3rd-party en 1st-party afin de les cacher sous le cyber-tapis pour reprendre l’expression de Reflets. Et pour se faire passer par le DNS et ses possiblités.

Bloquer les indésirables avec Unbound
On entre dans la partie technique, pour faire court, on va décréter à Unbound que nous contrôlons les domaines indésirables (eulerian.net par exemple) afin de faire échouer la résolution DNS. La technique est développée plus en détail sur un blog.

Pour mémoire :

  • On crée un fichier de zone (blocked.zone) où l’on met un enregistrement SOA.
  • On l’associe à chaque domaine à bloquer dans la configuration d’Unbound (adblock-war.conf)

Cette technique sera valable, pour les versions d’Unbound supérieures à 1.7.0.

/var/lib/unbound/blocked.zone
$TTL 10800
@	IN SOA localhost. nobody.invalid. (
	1
	3600
	1200
	604800
	10800
	)
/etc/unbound/unbound.conf.d/adblock-war.conf
# À n'utiliser qu'avec une version d'Unbound supérieure à la 1.7.0
auth-zone:
	name: "eulerian.net."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "eulerian.fr."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "eulerian.com."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "dnsdelegation.io."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "a.20mn.fr."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "at-o.net."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "keyade.com."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "storetail.io."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "omtrdc.net."
	zonefile: "/var/lib/unbound/blocked.zone"

Redémarrer unbound

systemctl restart unbound

Vérifier

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: 23289
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;v.oui.sncf.			IN	A

;; ANSWER SECTION:
v.oui.sncf.		2822	IN	CNAME	voyages-sncf.eulerian.net.

;; AUTHORITY SECTION:
eulerian.net.		10021	IN	SOA	localhost. nobody.invalid. 1 3600 1200 604800 10800

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: ven. nov. 15 16:07:19 CET 2019
;; MSG SIZE  rcvd: 137

La requête n’est pas servie (NXDOMAIN)

Autorité de certification + Certificats clients

Création d’une autorité de certification

Autorité de certification et authentification par certificat client (OpenSSL,nginx)

On cherche le fichier CA.pl sudo find / -type f -name "CA.pl"
/usr/lib/ssl/misc/CA.pl

Créer une autorité de certification basée sur un certificat ayant une durée de validité de 10 ans dont la racine est « /etc/ssl/CertificateAuthority » , modifier les variables » CADAYS » et « CATOP » dans le fichier du script /usr/lib/ssl/misc/CA.pl

my $CADAYS = "-days 3650";	# 10 years
my $CATOP = "/etc/ssl/CertificateAuthority";

ainsi que la valeur de « dir » dans « /etc/ssl/openssl.cnf »

[ CA_default ]

dir		= /etc/ssl/CertificateAuthority		# Where everything is kept

Création

/usr/lib/ssl/misc/CA.pl -newca # Répondre aux différentes questions ,une "passphrase" sera demandée pour le fichier cakey.pem (conserver la "passphrase")

A la fin ,la structure

tree /etc/ssl/CertificateAuthority/
/etc/ssl/CertificateAuthority/
├── cacert.pem
├── careq.pem
├── certs
├── crl
├── crlnumber
├── index.txt
├── index.txt.attr
├── index.txt.old
├── newcerts
│   └── 0DDDBF9FF301DFEC10C1E57CEBB38DAD6E7A6251.pem
├── private
│   └── cakey.pem
└── serial

Le « hash » du certificat cacert.pem (hachage du DN) est retourné par :

openssl x509 -hash -noout -in /etc/ssl/CertificateAuthority/cacert.pem 
    ecd697ae

Créer le lien “/etc/ssl/CertificateAuthority/certs/ecd697ae.0” (.0, premier index) pointant vers “/etc/ssl/CertificateAuthority/cacert.pem”

ln -s /etc/ssl/CertificateAuthority/cacert.pem /etc/ssl/CertificateAuthority/certs/ecd697ae.0

Création certificat client

# Certificat client Yannick
sudo -s
cd /etc/ssl/CertificateAuthority/
openssl ecparam -out yannick.key -name prime256v1 -genkey
openssl req -new -key yannick.key -out yannick.csr -sha256    # Renseigner Common Name obligatoirement (Yannick)
openssl req -x509 -in yannick.csr -key yannick.key > admin-linux.crt
openssl ca -policy policy_anything -out yannick.crt -infiles yannick.csr # signature et valable 365 jours , mp cakey.pem demandé
openssl pkcs12 -export -out yannick.pfx -inkey yannick.key -in yannick.crt -certfile cacert.pem # il faut saisir un mot de passe d'exportation pour le certificat client (mp yannick)
cp yannick.pfx /srv/nfs/
chmod 775 /srv/nfs/yannick.pfx

# Certificat client Yann
sudo -s
cd /etc/ssl/CertificateAuthority/
openssl ecparam -out yann.key -name prime256v1 -genkey
openssl req -new -key yann.key -out yann.csr -sha256    # Renseigner Common Name obligatoirement (Yann)
openssl req -x509 -in yann.csr -key yann.key > admin-linux.crt
openssl ca -policy policy_anything -out yann.crt -infiles yann.csr # signature et valable 365 jours , mp cakey.pem demandé
openssl pkcs12 -export -out yann.pfx -inkey yann.key -in yann.crt -certfile cacert.pem # il faut saisir un mot de passe d'exportation pour le certificat client (mp yann)
cp yann.pfx /srv/nfs/
chmod 775 /srv/nfs/yann.pfx

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

lemp

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

Ce script bash compile et installe nginx ,le service nginx (systemd) pour le démarrage, PHP7.4 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-tls1.3-php7.4-MariaDB.sh" # Télécharger le script
chmod +x compil.sh  # Rendre le script exécutable  
./compil.sh     # Exécuter le script
#******** Patienter **********

Patienter de 5 à 10 minutes…
Résultat

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.22-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Mot de passe MySql/MariaDB : /etc/mysql/mdp
PHP 7.4.3 (cli) (built: Feb 24 2020 18:39:14) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

Les paramètres de compilation

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.1d  10 Sep 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 \
 --user=nginx \
 --group=nginx \
 --sbin-path=/usr/sbin/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 \
 --with-stream_ssl_module \
 --with-stream_ssl_preread_module \
 --with-http_ssl_module \
 --add-dynamic-module=../modules/nginx-auth-pam \
 --add-dynamic-module=../modules/ngx-fancyindex

On change le dossier racine

sudo mkdir -p /var/www/default-www
sudo mv /var/www/{index.html,info.php} /var/www/default-www/

Configuration nginx

/etc/nginx/nginx.conf

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
}

http {
  server_names_hash_bucket_size 64;
		upstream php-handler {
	  		server unix:/run/php/php7.4-fpm.sock;
		}

	
	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	# server_tokens off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;


	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;
	gzip_disable "msie6";

        ##
        # Authentification par certificat client
        # limité à certains utilisateurs
        ##

        map $ssl_client_s_dn $ssl_access {
            default 0;
            "~CN=Yannick" 1;
	    "~CN=Yann" 1;
            "~CN=Jean Dupondt Stagiaire" 1;
            # etc.
        }

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
}

Diffie-Hellman, ssl (tls1.2 tls1.3) Headers OCSP, certificats clients

Diffie-Hellman

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

Regroupement dans le fichier /etc/nginx/ssl_dh_header_ocsp → ssl (tls1.2 tls1.3) , Headers et OCSP

    ##
    # SSL Settings
    ##
    ssl_certificate /etc/ssl/private/xoyize.xyz-fullchain.pem;
    ssl_certificate_key /etc/ssl/private/xoyize.xyz-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/xoyize.xyz-fullchain.pem;
    ssl_trusted_certificate /etc/ssl/private/ocsp-certs.pem;
    resolver 127.0.0.1;

Accès par certificats clients

/etc/nginx/auth_certificat_client
# Certificat client 
ssl_client_certificate /etc/ssl/CertificateAuthority/cacert.pem; 
# rendre la vérification optionnelle
# afin de pouvoir afficher un message 403 
# à ceux qui échouent à l'authentification
ssl_verify_client optional;
    if ( $ssl_access = 0 ) {
        return 403 "<h2>Zone Interdite, absence de certificat client !!!</h2>" ; # => forbidden
    }

Pour activer le certificat client dans l’accès d’unsite ,il faut ajouter la directive include auth_certificat_client; dans le fichier de configuration .conf du vhost

xoyize.xyz

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

sudo nano /etc/nginx/conf.d/xoyize.xyz.conf
server {
    listen 80;
    listen [::]:80;

    ## redirect http to https ##
    server_name xoyize.xyz;
    return  301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name xoyize.xyz;

    ####    Locations
    # On cache les fichiers statiques
    location ~* \.(html|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; }
    # On interdit les dotfiles
    location ~ /\. { deny all; }

    

    root /var/www/default-www ;
    index index.php index.html index.htm;
        location ~ \.php$ {
           fastcgi_split_path_info ^(.+\.php)(/.+)$;
           fastcgi_pass unix:/run/php/php7.4-fpm.sock;   # PHP7.4
           fastcgi_index index.php;
           include fastcgi_params;
	   fastcgi_param SCRIPT_FILENAME $request_filename;
        }

    # if folder xoyize.xyz.d , uncomment the following directive
    #include conf.d/xoyize.xyz.d/*.conf;

    access_log /var/log/nginx/xoyize.xyz-access.log;
    error_log /var/log/nginx/xoyize.xyz-error.log;
}

Effacer ancien fichier de config

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

Vérifier

sudo nginx -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 nginx

sudo systemctl restart nginx

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

Development - devel.xoyize.xyz

 ____                 _                                  _   
|  _ \  _____   _____| | ___  _ __  _ __ ___   ___ _ __ | |_ 
| | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __|
| |_| |  __/\ V /  __/ | (_) | |_) | | | | | |  __/ | | | |_ 
|____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__|
                             |_|                             

Accès dossier “développement” /srv/data/devel/ouestline partagé avec PC1
Fichier de configuration nginx /etc/nginx/conf.d/devel.xoyize.xyz.conf

# /etc/nginx/conf.d/devel.xoyize.xyz.conf	
	##
	# Virtual Host devel.xoyize.xyz
	##

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

	    include ssl_dh_header_ocsp;
	
	    include auth_certificat_client;	   
	
	    #autoindex on;
	    fancyindex on;              # Enable fancy indexes.
	    fancyindex_exact_size off;  # Output human-readable file sizes.
	
	    root /srv/data/devel/ouestline/ ;
	    index index.php index.html index.htm;
	        location ~ \.php$ {
	           fastcgi_split_path_info ^(.+\.php)(/.+)$;
	           fastcgi_pass unix:/run/php/php7.4-fpm.sock;   # php7.4
	           fastcgi_index index.php;
	           include fastcgi_params;
		   fastcgi_param SCRIPT_FILENAME $request_filename;
	        }
	
	    # if folder devel.xoyize.xyz.d , uncomment the following directive
	    #include conf.d/devel.xoyize.xyz.d/*.conf;
	
	    access_log /var/log/nginx/develop-access.log;
	    error_log /var/log/nginx/develop-error.log;
	}

Vérifier et relancer nginx

sudo nginx -t
sudo systemctl reload nginx

Problème de compilation du module --add-dynamic-module=../modules/lua-nginx-module
NGINX as an OpenID Connect RP with WSO2 Identity Server — Part 2

Airsonic (streaming audio) - sub.xoyize.xyz

Airsonic, a Free and Open Source community driven media server, providing ubiquitous access to your music.

On utilise systemd
Pour aller un peu plus loin que le simple pilotage manuel de airsonic, on peut mettre en place une intégration avec Systemd. Systemd est un système init pour la plupart des systèmes linux. Il permet d’exécuter l’airsonic au démarrage. Les étapes ci-dessous ont été réalisées sur un hôte Fedora, mais les étapes devraient être similaires pour les autres distributions Linux.

En suivant ces instructions de configuration de Systemd, Airsonic sera disponible sur http://localhost:4040/airsonic.

Configuration de l’utilisateur dédié à Airsonic :

sudo useradd airsonic

Création des dossiers

sudo mkdir /var/airsonic
sudo chown airsonic /var/airsonic

Télécharger le “war”

sudo -s
wget -4 https://github.com/airsonic/airsonic/releases/download/v10.5.0/airsonic.war  --output-document=/var/airsonic/airsonic.war

Créer le service systemd

wget -4 https://raw.githubusercontent.com/airsonic/airsonic/master/contrib/airsonic.service -O /etc/systemd/system/airsonic.service
wget -4 https://raw.githubusercontent.com/airsonic/airsonic/master/contrib/airsonic-systemd-env -O /etc/default/airsonic

Modifier le service

nano /etc/systemd/system/airsonic.service
[...]
Environment="PORT=4040"
Environment="CONTEXT_PATH=/"
[...]

Lancer et activer

systemctl daemon-reload
systemctl start airsonic.service
systemctl enable airsonic.service

Fichier de configuration nginx /etc/nginx/conf.d/sub.xoyize.xyz.conf

sudo nano /etc/nginx/conf.d/sub.xoyize.xyz.conf
# /etc/nginx/conf.d/sub.xoyize.xyz.conf	
##
# Virtual Host sub.xoyize.xyz (Subsonic)
##

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

    include ssl_dh_header_ocsp;

    # Proxy to the Airsonic server
    location / {
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host  $http_host;
        proxy_set_header Host              $http_host;
        proxy_max_temp_file_size           0;
        proxy_pass                         http://127.0.0.1:4040;
        proxy_redirect                     http:// https://;
    }
	
}

Redémarrer nginx , sudo systemctl restart nginx
Accès https://sub.xoyize.xyz ,admin/admin

  • Changer le mot de passe administrateur
  • Définir le répertoire media : /srv/data/Musique
  • Changer le thème (facultatif)
  • Valider l’option accès au dossier media par admin
  • Scanner le dossier media

PhpMyadmin - sql.xoyize.xyz

phpMyAdmin (PMA) est une application Web de gestion pour les systèmes de gestion de base de données MySQL réalisée principalement en PHP et distribuée sous licence GNU GPL.Wikipedia

Installation
Prérequis : PHP mbstring zip et gd installés

sudo -s
# la dernière version en cours https://files.phpmyadmin.net/phpMyAdmin/
wget -4 https://files.phpmyadmin.net/phpMyAdmin/5.0.1/phpMyAdmin-5.0.1-all-languages.zip
unzip  phpMyAdmin-5.0.1-all-languages.zip
mv phpMyAdmin-5.0.1-all-languages /usr/share/phpmyadmin
#
mkdir -p /var/lib/phpmyadmin/tmp
chown -R www-data:www-data /var/lib/phpmyadmin
cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

Configurer /usr/share/phpmyadmin/config.inc.php
La base mysql

mysql -uroot -p$(cat /etc/mysql/mdp) < /usr/share/phpmyadmin/sql/create_tables.sql
mysql -uroot -p$(cat /etc/mysql/mdp) -e "GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'qzbXEHio0lwq';"
mysql -uroot -p$(cat /etc/mysql/mdp) -e "GRANT ALL PRIVILEGES ON *.* TO 'yanspm'@'localhost' IDENTIFIED BY 'DxShMzcc4v' WITH GRANT OPTION;" 
ln -s /usr/share/phpmyadmin /var/www/default-www/rienavoir

Ajouter à /usr/share/phpmyadmin/config.inc.php

<?php
[...]
$cfg['Servers'][$i]['AllowRoot'] = false;

passerelle d’authentification
Prérequis, le module nginx

sudo sh -c "echo -n 'yanspm:' >> /etc/nginx/.pma_pass"
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.pma_pass"  # même mot de passe yanspm
mkdir -p /etc/nginx/conf.d/xoyize.xyz.d/ # créer le dossier si inexistant

Créer le fichier passerelle /etc/nginx/conf.d//xoyize.xyz.d/phpadmin.conf

location /rienavoir {
    auth_basic "Admin Login";
    auth_basic_user_file /etc/nginx/.pma_pass;

    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;
        }

}

Vérifier et recharger nginx

sudo nginx -t
sudo systemctl reload nginx

Tester https://xoyize.xyz/rienavoir

Fichier de configuration nginx /etc/nginx/conf.d/sql.xoyize.xyz.conf avec accès clients autorisés

# /etc/nginx/conf.d/sql.xoyize.xyz.conf	
	##
	# Virtual Host sql.xoyize.xyz (PhpMyAdmin)
	##

	server {
	    listen 80;
	    listen [::]:80;
	
	    ## redirect http to https ##
	    server_name sql.xoyize.xyz;
	    return  301 https://$server_name$request_uri;
	}
	
	server {
	    listen 443 ssl http2;
	    listen [::]:443 ssl http2;
	    server_name sql.xoyize.xyz;
	
	    include ssl_dh_header_ocsp;
            # Authentification par certificat client
            include auth_certificat_client;

	    root /var/www/default-www/rienavoir/;
	    index index.php;

	
	        location ~ \.php$ {
	           fastcgi_split_path_info ^(.+\.php)(/.+)$;
	           fastcgi_pass unix:/run/php/php7.4-fpm.sock;   # PHP7.4
                   fastcgi_param SCRIPT_FILENAME $request_filename;
	           fastcgi_index index.php;
	           include fastcgi_params;
	        }
	
	
	    access_log /var/log/nginx/sql-access.log;
	    error_log /var/log/nginx/sql-error.log;
	}

Accès par https://sql.xoyize.xyz
Refuser l’accès par https://xoyize.xyz/phpmyadmin

sudo nano /etc/nginx/conf.d/xoyize.xyz.d/phpmyadmin.conf
location /phpmyadmin {
  return 403; # => forbidden
}

msmtp - envoi de message en ligne de commande

GPG - Chiffrer/Déchiffrer

On a notre paire de clés avec identifiant 900D4EF9 (les 8 derniers caractères) et une adresse de messagerie ** xoyize-xyz@cinay.xyz**,on peut chiffrer et déchiffrer des documents

CHIFFRER
fichier de message chiffré avec la méthode suivante (aucune trace dans l’historique)

gpg --encrypt -o .msmtp-xoyize-xyz.gpg -r xoyize-xyz@cinay.xyz - 

Saisir le mot de passe que l’on veut chiffrer puis tapez et enfin au clavier

Vérifier la présence du fichier

ls .msmtp-xoyize-xyz.gpg
.msmtp-xoyize-xyz.gpg

DECHIFFRER
Il faut saisir la phrase secrète de xoyize une fois

gpg --no-tty -q -d .msmtp-xoyize-xyz.gpg

Une resaisie de la phrase secrètetous les 12 heures (gpg-agent)

msmtp - configuration utilisateur ~/.msmtprc

Serveur smtp = cinay.xyz
Compte = yannick

On récupère l’empreinte du serveur smtp que l’on va utiliser

msmtp --serverinfo --tls --tls-certcheck=off --host=cinay.xyz  
...
    Empreintes:
        SHA256: 20:D3:6B:CD:B5:DA:90:06:B2:FF:B8:9D:C1:57:2D:1B:B8:FC:5E:6B:DF:C9:41:0A:CC:2C:C5:61:D0:02:F9:61
...
nano ~/.msmtprc
# fichier de configuration utilisateur ~/.msmtprc

# Définissez les valeurs par défaut pour tous les comptes suivants.
defaults

# Utilisez le port de soumission du courrier 587 au lieu du port SMTP 25.
port 587

# Utilisez toujours le TLS.
tls on

# Un service de courrier électronique gratuit
account cinay-xyz

# Nom d'hôte du serveur SMTP
host cinay.xyz

# Comme alternative au tls_trust_file/tls_crl_file, vous pouvez utiliser tls_fingerprint
# pour épingler un seul certificat. Vous devez mettre à jour l'empreinte digitale lorsque le
# le certificat du serveur change, mais un attaquant ne peut pas vous piéger pour que vous acceptiez
# un certificat frauduleux. Obtenez l'empreinte digitale avec
# msmtp --serverinfo --tls --tls-certcheck=off --host=smtp.freemail.example
tls_fingerprint 20:D3:6B:CD:B5:DA:90:06:B2:FF:B8:9D:C1:57:2D:1B:B8:FC:5E:6B:DF:C9:41:0A:CC:2C:C5:61:D0:02:F9:61

# Enveloppe - à partir de l'adresse
from yannick@cinay.xyz

# Authentification. 
auth on
user yannick

# le mot de passe est dans un fichier crypté, indiquer à msmtp la commande à utiliser pour le décrypter.
# Cette commande est généralement utilisée avec GnuPG
# Habituellement, gpg-agent demande une fois le mot de passe de décryptage.
passwordeval gpg --no-tty -q -d ~/.msmtp-cinay-xyz.gpg

# Définir un compte par défaut
account default : cinay-xyz

Test envoi message

L’option de compte ( --account=,-a ) indique quel compte utiliser comme expéditeur:

echo "hello there username." | msmtp -a default username@domain.com

Ou, avec les adresses dans un fichier test.mail:

To: username@domain.com
From: user12@gmail.com
Subject: A test

Hello there.
cat test.mail | msmtp -a default username@domain.com

INFORMATION sur la structure

Opérations effectuées sur serveur srvxo avec une clé bootable “Pmagic”

# Transfert du home
mkdir -p /mnt/{home,homeOld}
mount /dev/ssd-vg/home /mnt/home
mount /dev/hdd-2g/home /mnt/homeOld/
rm -r /mnt/homeOld/lost+found/
rm -r /mnt/home/lost+found/
rsync -av /mnt/homeOld/*
umount /mnt/{home,homeOld} 
lvremove /dev/hdd-2g/home 
# Transfert data nfs su /srv
mkdir /mnt/srv 
mount /dev/mapper/hdd--2g-lvhdd /mnt/srv/
rm -r /mnt/srv/lost+found/
mkdir -p /mnt/srv/{data,nfs}
mv /mnt/srv/{borg-backups,CalibreTechnique,devel,dplus,Musique,playlists,podcasts,virtuel} /mnt/srv/data/
mkdir /mnt/nfs 
mount /dev/hdd-2g/nfs /mnt/nfs/
rsync -av /mnt/nfs/*
umount /mnt/srv 
umount /mnt/nfs 
# supprime /dev/hdd-2g/nfs
lvremove /dev/hdd-2g/nfs 
# Vérification avant augmentation capacité volume
e2fsck -f /dev/hdd-2g/lvhdd
lvresize -l +100%FREE
resize2fs /dev/hdd-2g/lvhdd 
# Modifier fstab et exports
mkdir /mnt/root 
mount /dev/ssd-vg/rootb /mnt/root
nano /mnt/root/etc/fstab 
nano /mnt/root/etc/exports 

Résultats

root@srvxo:/home/xoyi# pvs
  PV         VG     Fmt  Attr PSize    PFree  
  /dev/sda4  ssd-vg lvm2 a--  <107,29g <67,29g
  /dev/sdb1  hdd-2g lvm2 a--    <1,82t      0 

root@srvxo:/home/xoyi# vgs
  VG     #PV #LV #SN Attr   VSize    VFree  
  hdd-2g   1   1   0 wz--n-   <1,82t      0 
  ssd-vg   1   2   0 wz--n- <107,29g <67,29g

root@srvxo:/home/xoyi# lvs
  LV    VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvhdd hdd-2g -wi-ao---- <1,82t                                                    
  home  ssd-vg -wi-ao---- 20,00g                                                    
  rootb ssd-vg -wi-ao---- 20,00g                                                    

root@srvxo:/home/xoyi# cat /etc/fstab 
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/ssd--vg-rootb /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda2 during installation
UUID=6ff909c4-5117-4b17-a571-54bde94fd6b5 /boot           ext2    defaults        0       2
/dev/mapper/ssd--vg-home /home           ext4    defaults        0       2
# swap was on /dev/sda3 during installation
UUID=4afbc634-a79f-47c2-a15f-6ea17e62ceb7 none            swap    sw              0       0

/dev/mapper/hdd--2g-lvhdd     /srv    ext4    defaults        0       2

root@srvxo:/home/xoyi# cat /etc/exports 
# /etc/exports: the access control list for filesystems which may be exported
#		to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
# exportfs -ar
#/srv/data	192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
/srv	192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)

root@srvxo:/home/xoyi# df -h
Sys. de fichiers          Taille Utilisé Dispo Uti% Monté sur
udev                        3,7G       0  3,7G   0% /dev
tmpfs                       741M    8,7M  733M   2% /run
/dev/mapper/ssd--vg-rootb    20G    2,7G   16G  15% /
tmpfs                       3,7G       0  3,7G   0% /dev/shm
tmpfs                       5,0M       0  5,0M   0% /run/lock
tmpfs                       3,7G       0  3,7G   0% /sys/fs/cgroup
/dev/sda2                   504M     84M  395M  18% /boot
/dev/mapper/ssd--vg-home     20G    2,0G   17G  11% /home
/dev/mapper/hdd--2g-lvhdd   1,8T    324G  1,4T  19% /srv
tmpfs                       741M       0  741M   0% /run/user/1000