Serveur Lenovo ThinkCentre M700 Tiny Debian 12 (bookworm), Ram 12 Go et SSD M.2 2280 500 Go
- Serveur Debian 12
- Bridge Ip V4 V6 statiques
- OpenSSH, clé et script
- Utilitaires
- Motd
- Parefeu UFW
- Fail2ban
- Créer volume logique lvssd
- Partage disque externe
- NFS
- Envoi message via postfix
- Historique ligne de commande
- Erreurs
- DNS et Certificats
- ACL - Multimedia
- Serveur de messagerie
- Nextcloud
- rnmkcy.eu
- Dossier racine
- static site diceware et cartes
- Shaarli
- Traduction
- Calibre web
- OnlyOffice Docs community
- Envoi notification (ntfy)
- Audio
- HomeGallery
- ouestline.xyz
- BorgBackup
- Développement
- Virtualisation
- Maintenance
- Réduire la partion LVM thinkshare
- Renouvellement Certificats SSL
- Liaison SSH avec serveur externe
- Synchronisation des backup borg
- Augmenter taille SWAP
- Ajout SSD Nvme USB3 (INACTIF)
- Authentification unique (SSO Authelia + LLdap)
Serveur Debian 12
Installer avec clé USB contenant image ISO debian-12.1.0-amd64-netinst.iso
Machine : think
root : root49600
leno : leno49600
Disque SSD 500Go M.2
Partitions LVM avec home séparé et 100Go utilisé
La machine reboot à la fin de l’installation
Se connecter avec l’utilisateur “leno”
Relever l’adresse ip : ip a
, exemple 192.168.0.11
Serveur SSH Utilitaires usuels du système
On peut également se connecter via ssh : ssh leno@192.168.0.11
Passer en su
, installer sudo
su
apt install sudo
echo "leno ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
Installer le module iwlwifi pour éviter les messages d’erreur dans le bios
sudo apt install firmware-iwlwifi
Modifier les lignes suivantes le grub /etc/default/grub
# ajout loglevel=0
GRUB_CMDLINE_LINUX_DEFAULT="quiet loglevel=0"
# désactiver la recherche des autres OS
GRUB_DISABLE_OS_PROBER=true
Un redémarrage de la machine est obligatoire
Structure volume LVM
VG #PV #LV #SN Attr VSize VFree
think-vg 1 4 0 wz--n- 464,78g 221,65g
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home think-vg -wi-ao---- <64,24g
root think-vg -wi-ao---- <27,94g
swap_1 think-vg -wi-ao---- 976,00m
Bridge Ip V4 V6 statiques
Adresse mac interface eno1
ip address show dev eno1 | awk '$1=="link/ether" {print $2}'
00:23:24:c9:06:86
Installer le logiciel bridge-utils
apt install bridge-utils
FreeBox DMZ 192.168.0.215
pour un accès IPV4 depuis l’extérieur
FreeBox nexthop IPV6
ip a |grep "inet6 fe80"
inet6 fe80::223:24ff:fec9:686/64 scope link
Passage en ip statique 192.168.0.215 et 2a01:e0a:9c8:2081::1 (nexthop fe80::223:24ff:fec9:686
)
lien local box : fe80::8e97:eaff:fe39:66d6
Modifier l’interface
nano /etc/network/interfaces
auto lo
iface lo inet loopback
iface eno1 inet manual
auto br0
iface br0 inet static
address 192.168.0.215
netmask 255.255.255.0
gateway 192.168.0.254
bridge_ports eno1
bridge_stp off # disable Spanning Tree Protocol
bridge_waitport 0 # no delay before a port becomes available
bridge_fd 0 # no forwarding delay
#iface br0 inet6 static
# address 2a01:e0a:9c8:2081::1
# netmask 64
# gateway fe80::8e97:eaff:fe39:66d6
# autoconf 0
Vérifier le dns
/etc/resolv.conf
nameserver 1.1.1.1
nameserver 192.168.0.254
Un redémarrage de la machine pour la prise en compte : systemctl reboot
Connexion sur l’adresse ip fixe
# IPV6
ssh leno@2a01:e0a:9c8:2081::1
# IPV4
ssh leno@192.168.0.215
Vérification des adresses IP
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 noprefixroute
valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether 00:23:24:c9:06:86 brd ff:ff:ff:ff:ff:ff
altname enp0s31f6
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 66:de:1e:0e:f3:eb brd ff:ff:ff:ff:ff:ff
inet 192.168.0.215/24 brd 192.168.0.255 scope global br0
valid_lft forever preferred_lft forever
inet6 2a01:e0a:9c8:2080:64de:1eff:fe0e:f3eb/64 scope global dynamic mngtmpaddr
valid_lft 86106sec preferred_lft 86106sec
inet6 fe80::64de:1eff:fe0e:f3eb/64 scope link
valid_lft forever preferred_lft forever
Hostname
sudo hostnamectl set-hostname rnmkcy.eu
hostnamectl
Static hostname: rnmkcy.eu
Icon name: computer-desktop
Chassis: desktop 🖥️
Machine ID: 11ae731552174ae5b2dd4c60ac8fa88c
Boot ID: e59a1b2d79d040fab620c797a19a636e
Operating System: Debian GNU/Linux 12 (bookworm)
Kernel: Linux 6.1.0-16-amd64
Architecture: x86-64
Hardware Vendor: Lenovo
Hardware Model: ThinkCentre M700
Firmware Version: FWKTBCA
Date et heure
timedatectl
Local time: ven. 2023-12-15 16:20:37 CET
Universal time: ven. 2023-12-15 15:20:37 UTC
RTC time: ven. 2023-12-15 15:20:36
Time zone: Europe/Paris (CET, +0100)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Vérifier si utilsateur appartient au groupe “users” : id leno
uid=1000(leno) gid=1000(leno) groupes=1000(leno),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),100(users),106(netdev)
Si non appartenance, exécuter : sudo usermod -a -G users $USER
Pour visualiser tous les messages de journal, ajouter l’utilisateur au groupe existant adm
sudo usermod -a -G adm $USER
OpenSSH, clé et script
Générer une paire de clé sur l'ordinateur de bureau PC1
Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) pour une liaison SSH avec le serveur.
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/lenovo-ed25519
Envoyer les clés publiques sur le serveur lenovo
ssh-copy-id -i ~/.ssh/lenovo-ed25519.pub leno@192.168.0.215
On se connecte sur le serveur debian 12
ssh leno@192.168.0.215
Modifier la configuration serveur SSH
sudo nano /etc/ssh/sshd_config
Modifier
Port = 55215
PasswordAuthentication no
Relancer le serveur
sudo systemctl restart sshd
Test connexion
ssh -p 55215 -i ~/.ssh/lenovo-ed25519 leno@192.168.0.215
Utilitaires
Installer utilitaires
sudo apt install rsync curl tmux jq figlet git
Motd
Effacer et créer motd
sudo rm /etc/motd && sudo nano /etc/motd
_ __ __ ____ __ __
| | ___ _ _ ___ __ __ ___ | \/ ||__ |/ \ / \
| |__ / -_)| ' \ / _ \\ V // _ \ | |\/| | / /| () || () |
|____|\___||_||_|\___/ \_/ \___/ |_| |_| /_/ \__/ \__/
_____ _ _ _ ___ _
|_ _|| |_ (_) _ _ | |__ / __| ___ _ _ | |_ _ _ ___
| | | ' \ | || ' \ | / /| (__ / -_)| ' \| _|| '_|/ -_)
|_| |_||_||_||_||_||_\_\ \___|\___||_||_|\__||_| \___|
_ ___ ___ _ __ ___ __ ___ _ ___
/ |/ _ \|_ ) / | / / ( _ ) / \ |_ )/ || __|
| |\_, / / / _ | |/ _ \/ _ \ _| () |_ / / | ||__ \
|_| /_/ /___|(_)|_|\___/\___/(_)\__/(_)/___||_||___/
Script ssh_rc_bash
ATTENTION!!! Les scripts sur connexion peuvent poser des problèmes pour des appels externes autres que ssh
wget https://static.xoyize.xyz/files/ssh_rc_bash
chmod +x ssh_rc_bash # rendre le bash exécutable
./ssh_rc_bash # exécution
Parefeu UFW
UFW, ou pare - feu simple , est une interface pour gérer les règles de pare-feu dans Arch Linux, Debian ou Ubuntu. UFW est utilisé via la ligne de commande (bien qu’il dispose d’interfaces graphiques disponibles), et vise à rendre la configuration du pare-feu facile.
Installation Debian / Ubuntu
sudo apt install ufw
Par défaut, les jeux de règles d’UFW sont vides, de sorte qu’il n’applique aucune règle de pare-feu, même lorsque le démon est en cours d’exécution.
Les règles
sudo ufw allow 55215/tcp # port SSH
sudo ufw allow https # port 443
Activer le parefeu
sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Status
sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
55215/tcp ALLOW IN Anywhere
443 ALLOW IN Anywhere
55215/tcp (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
désactiver la journalisation
sudo ufw logging off
Fail2ban
Installer et configurer Fail2ban + UFW sur Debian 11
sudo apt install fail2ban
Configuration /etc/fail2ban/jail.local
[DEFAULT]
# Debian 12 has no log files, just journalctl
backend = systemd
logtarget = SYSTEMD-JOURNAL
bantime = 720m # How long to block an abusive IP
findtime = 120m # Time period to check the connections
maxretry = 3 # Within the above time period, block the abusive IP if the number of the abusive IP connections reaches the maxretry
banaction = ufw
banaction_allports = ufw
destemail = rnmkcy@rnmkcy.eu
sender = rnmkcy@rnmkcy.eu
ignoreip = 127.0.0.1/8 ::1 192.168.0.0/24 # Ignore these IP, Hosts, IP ranges during operation
[sshd]
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode = normal
enabled = true
port = 55215
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 60h
maxretry = 3
Relancer
sudo systemctl restart fail2ban
Tester fail2ban
Using Fail2Ban for SSH Brute-force Protection
Depuis un VPS, on va essayer de se connecter sur rnmkcy.eu via ssh
yann@xoyaz:~$ ssh riri@rnmkcy.eu -p 55215
riri@rnmkcy.eu: Permission denied (publickey).
yann@xoyaz:~$ ssh riri@rnmkcy.eu -p 55215
riri@rnmkcy.eu: Permission denied (publickey).
yann@xoyaz:~$ ssh riri@rnmkcy.eu -p 55215
riri@rnmkcy.eu: Permission denied (publickey).
yann@xoyaz:~$ ssh riri@rnmkcy.eu -p 55215
ssh: connect to host rnmkcy.eu port 55215: Connection refused
Comme vous pouvez le voir dans la sortie ci-dessus, après trois échecs consécutifs, Fail2Ban bloque activement la connexion SSH. Après trois échecs consécutifs, la connexion est interrompue et l’utilisateur est bloqué pendant la durée spécifiée. Si vous essayez de vous connecter à nouveau pendant la période de blocage, vous obtenez une erreur “Connexion refusée” et vous n’êtes pas en mesure d’établir une connexion SSH au serveur.
Pour afficher l’état et les informations concernant une prison particulière comme sshd, vous pouvez utiliser la commande suivante
sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 3
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 4
|- Total banned: 4
`- Banned IP list: 109.123.254.249 2a02:7b40:c3b5:f29c::1 2a02:c206:2108:3749::1 195.181.242.156
Créer volume logique lvssd
Créer volume logique LVM
# sudo lvcreate -l 100%FREE -n thinkshare think-vg # Tout le reste du volume
sudo lvcreate -L 100G -n extension think-vg # Attribue 100G
sudo mkfs.ext4 /dev/mapper/think--vg-extension
Dossier
sudo mkdir -p /lvssd
Relever UUID : sudo blkid |grep /dev/mapper/think--vg-extension
Ajouter ce qui suit au fichier /etc/fstab
# /dev/mapper/think--vg-extension
UUID=ebfe3ce0-ed5a-4091-852f-84fd7696b802 /lvssd ext4 defaults 0 2
montage
sudo systemctl daemon-reload
sudo mount -a
Partage disque externe
Partage disque USB 2To monté sur FreeboX
Résumé
Partage : //192.168.0.254/FreeUSB2To
Point de montage local : sudo mkdir -p /mnt/FreeUSB2To
Outil cifs : sudo apt install cifs-utils
Utlisateur mot de passe: /root/.smbcredentials
Deux options de montage, via fstab ou systemd.mount
A-Montage via fstab (Défaut)
Ajout de la ligne suivante au fichier /etc/fstab
//192.168.0.254/FreeUSB2To /mnt/FreeUSB2To cifs _netdev,x-systemd.after=network-online.target,noexec,nosuid,vers=3.0,uid=1000,gid=1000,credentials=/root/.smbcredentials 0 0
Recharger
sudo systemctl daemon-reload
sudo mount -a
B-Montage avec systemd automount, /etc/systemd/system/mnt-FreeUSB2To.mount
[Unit]
Description=cifs mount script
Requires=network-online.target
After=network-online.service
[Mount]
What=//192.168.0.254/FreeUSB2To
Where=/mnt/FreeUSB2To
Options=credentials=/root/.smbcredentials,rw,uid=1000,gid=1000,vers=3.0
Type=cifs
[Install]
WantedBy=multi-user.target
/etc/systemd/system/mnt-FreeUSB2To.automount
[Unit]
Description=cifs mount script
Requires=network-online.target
After=network-online.service
[Automount]
Where=/mnt/FreeUSB2To
TimeoutIdleSec=10
[Install]
WantedBy=multi-user.target
Lancement et activation
sudo systemctl enable mnt-FreeUSB2To.automount --now
Vérifier : ls /mnt/FreeUSB2To/
NFS
NFS (Network File System), partages réseau linux
Envoi message via postfix
NE PAS UTILISER CETTE SOLUTION SI UN SERVEUR DE MESSAGERIE DOIT ETRE INSTALLE
On va configurer Postfix afin qu’il puisse être utilisé pour envoyer des notifications par e-mail uniquement par les applications locales installées sur le même serveur que Postfix
Installer mailutils sudo apt install mailutils
et postfix sudo apt install postfix
Les modifications dans le fichier /etc/postfix/main.cf
redémarrez Postfix.
sudo systemctl restart postfix
Test
echo "Test envoi via postfix smtp" | mail -s "serveur debian 12" leno@yanfi.net
Historique ligne de commande
Ajoutez la recherche d’historique de la ligne de commande au terminal
Se connecter en utilisateur debian
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
Erreurs
Les erreurs dans le journal de boot
Montage CIFS
Erreur relevée
oct. 09 16:27:12 rnmkcy.eu kernel: CIFS: VFS: Error connecting to socket. Aborting operation.
oct. 09 16:27:12 rnmkcy.eu kernel: CIFS: VFS: cifs_mount failed w/return code = -111
oct. 09 16:27:12 rnmkcy.eu systemd[1]: Failed to mount mnt-FreeUSB2To.mount - cifs mount script.
Il faut remplacer allow-hotplug eno1
par auto eno1
pour le réseau dans le fichier /etc/network/interfaces
DNS et Certificats
Domaine rnmkcy.eu
$TTL 3600
@ IN SOA dns110.ovh.net. tech.ovh.net. (2023112301 86400 3600 3600000 300)
IN NS ns110.ovh.net.
IN NS dns110.ovh.net.
IN A 82.64.18.243
IN AAAA 2a01:e0a:9c8:2080:64de:1eff:fe0e:f3eb
IN CAA 128 issue "letsencrypt.org"
* IN A 82.64.18.243
* IN AAAA 2a01:e0a:9c8:2080:64de:1eff:fe0e:f3eb
Valider la DMZ sur la freebox
Domaine ouestline.xyz
$TTL 3600
@ IN SOA dns111.ovh.net. tech.ovh.net. (2024022709 86400 3600 3600000 300)
IN NS ns111.ovh.net.
IN NS dns111.ovh.net.
IN AAAA 2a01:e0a:9c8:2080:64de:1eff:fe0e:f3eb
IN A 82.64.18.243
* IN AAAA 2a01:e0a:9c8:2080:64de:1eff:fe0e:f3eb
* IN A 82.64.18.243
Certificats Let’s Encrypt
Les dossiers
sudo mkdir -p /etc/ssl/private/
sudo chown $USER -R /etc/ssl/private/
Installer acme
cd ~
sudo apt install socat -y # prérequis
#git clone https://github.com/Neilpang/acme.sh.git
git clone https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install
# déconnexion et reconnexion utilisateur
La création des certificats pour le domaine rnmkcy.eu Exporter les clés OVH
acme.sh --dns dns_ovh --server letsencrypt --issue --keylength ec-384 -d 'rnmkcy.eu' -d '*.rnmkcy.eu'
L’installation dans les dossiers locaux
acme.sh --ecc --install-cert -d rnmkcy.eu --key-file /etc/ssl/private/rnmkcy.eu-key.pem --fullchain-file /etc/ssl/private/rnmkcy.eu-fullchain.pem
La création des certificats pour le domaine ouestline.xyz Exporter les clés OVH
acme.sh --dns dns_ovh --server letsencrypt --issue --keylength ec-384 -d 'ouestline.xyz' -d '*.ouestline.xyz'
L’installation dans les dossiers locaux
acme.sh --ecc --install-cert -d ouestline.xyz --key-file /etc/ssl/private/ouestline.xyz-key.pem --fullchain-file /etc/ssl/private/ouestline.xyz-fullchain.pem
ACL - Multimedia
Installation acl
sudo apt install acl
Création groupe et dossier multimedia
# Script de création des dossiers multimédia
GROUPE_MEDIA=multimedia
DOSSIER_MEDIA=/sharenfs/multimedia
## Création du groupe multimedia
sudo groupadd -f $GROUPE_MEDIA
## Création des dossiers génériques
sudo mkdir -p "$DOSSIER_MEDIA"
sudo mkdir -p "$DOSSIER_MEDIA/Music"
sudo mkdir -p "$DOSSIER_MEDIA/Picture"
sudo mkdir -p "$DOSSIER_MEDIA/Video"
sudo mkdir -p "$DOSSIER_MEDIA/eBook"
sudo mkdir -p "$DOSSIER_MEDIA/Divers"
## Application des droits étendus sur le dossier multimedia.
# Droit d'écriture pour le groupe et le groupe multimedia en acl et droit de lecture pour other:
sudo setfacl -RnL -m g:$GROUPE_MEDIA:rwX,g::rwX,o:r-X "$DOSSIER_MEDIA"
# Application de la même règle que précédemment, mais par défaut pour les nouveaux fichiers.
sudo setfacl -RnL -m d:g:$GROUPE_MEDIA:rwX,g::rwX,o:r-X "$DOSSIER_MEDIA"
# Réglage du masque par défaut. Qui garantie (en principe...) un droit maximal à rwx. Donc pas de restriction de droits par l'acl.
sudo setfacl -RL -m m::rwx "$DOSSIER_MEDIA"
Ajout utilisateurs + nextcloud au groupe multimedia
sudo usermod -a -G multimedia leno
sudo usermod -a -G multimedia yann
sudo usermod -a -G multimedia nextcloud
Les droits
getfacl --omit-header /sharenfs/multimedia/
getfacl : suppression du premier « / » des noms de chemins absolus
user::rwx
group::rwx
group:multimedia:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:multimedia:rwx
default:mask::rwx
default:other::r-x
Serveur de messagerie
maddy
Suivre la procédure détaillée dans ce lien Serveur de messagerie IMAP SMTP en utilisant le domaine rnmkcy.eu
Configuration /etc/maddy/maddy.conf
# ----------------------------------------------------------------------------
# Base variables
$(hostname) = rnmkcy.eu
$(primary_domain) = rnmkcy.eu
$(local_domains) = $(primary_domain)
tls file /etc/maddy/certs/$(hostname)/fullchain.pem /etc/maddy/certs/$(hostname)/privkey.pem
# ----------------------------------------------------------------------------
certificats
Les modifications de la procédure
Pour éviter un problème d’accès aux certificats, on exécute un script qui sera ensuite ajouté dans le script de renouvellement des certificats
sudo mkdir -p /etc/maddy/certs/rnmkcy.eu
sudo cp /etc/ssl/private/rnmkcy.eu-fullchain.pem /etc/maddy/certs/rnmkcy.eu/fullchain.pem
sudo cp /etc/ssl/private/rnmkcy.eu-key.pem /etc/maddy/certs/rnmkcy.eu/privkey.pem
sudo chown maddy:maddy -R /etc/maddy/certs
Arrêter et désactiver postfix
sudo systemctl stop postfix && sudo systemctl disable postfix
lancer et activer maddy
sudo systemctl enable maddy --now
DNS
DKIM /var/lib/maddy/dkim_keys/rnmkcy.eu_default.dns
default._domainkey.rnmkcy.eu. IN TXT "v=DKIM1;k=rsa;p=MIIBIjANBgkqZuislR85jSpyVpe1jjvnNI8nf8GRPM0RR9uEPQIDAQAB;"
DMARC
_dmarc.rnmkcy.eu. TXT "v=DMARC1; p=quarantine; rua=mailto:postmaster@rnmkcy.eu"
MTA-STS
Enable MTA-STS in 5 Minutes with NGINX
mkdir -p /var/www/mta-sts/.well-known
nano /var/www/mta-sts/.well-known/mta-sts.txt
version : STSv1
mode : enforce
max_age : 604800
mx : rnmkcy.eu
Configuration nginx /etc/nginx/conf.d/mta-sts.rnmkcy.eu.conf
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name mta-sts.rnmkcy.eu;
include /etc/nginx/conf.d/security.conf.inc;
root /var/www/mta-sts/;
location = /.well-known/mta-sts.txt {
default_type text/plain;
return 200 "version: STSv1\r\nmode: enforce\r\nmx: rnmkcy.eu\r\nmax_age: 604800\r\n";
}
}
Vérifier et relancer
nginx -t
systemctl reload nginx
MTA-STS
_mta-sts.xoyaz.xyz. TXT "v=STSv1; id=1"
_smtp._tls.xoyaz.xyz. TXT "v=TLSRPTv1;rua=mailto:postmaster@rnmkcy.eu"
TLSA (DANE)
Il est également recommandé de définir un enregistrement TLSA (DANE). Utilisez https://www.huque.com/bin/gen_tlsa pour en générer un.
Copier/coller le contenu du certificat /etc/maddy/certs/rnmkcy.eu/fullchain.pem, port sur 25, le protocole de transport sur “tcp” et le nom de domaine sur le nom d’hôte MX.
_25._tcp.rnmkcy.eu. IN TLSA 3 1 1 c363d0a6f3c307648d4a825dbd6dbcb4df6046696f578138948ac1e7fb7a81d3
DNS complet rnmkcy.eu
$TTL 3600
@ IN SOA dns110.ovh.net. tech.ovh.net. (2023122606 86400 3600 3600000 300)
IN NS dns110.ovh.net.
IN NS ns110.ovh.net.
IN MX 10 rnmkcy.eu.
IN AAAA 2a01:e0a:9c8:2080:64de:1eff:fe0e:f3eb
IN A 82.64.18.243
IN CAA 128 issue "letsencrypt.org"
* IN AAAA 2a01:e0a:9c8:2080:64de:1eff:fe0e:f3eb
* IN A 82.64.18.243
_25._tcp IN TLSA 3 1 1 c363d05dbd6dbcb4df6046696fa6f3c307648d4a82578138948ac1e7fb7a81d3
_dmarc IN TXT "v=DMARC1; p=quarantine; rua=mailto:postmaster@rnmkcy.eu"
_mta-sts IN TXT "v=STSv1; id=1"
_smtp._tls IN TXT "v=TLSRPTv1;rua=mailto:postmaster@rnmkcy.eu"
default._domainkey IN TXT ( "v=DKIM1; k=rsa; p=MIIBIjA41VF6hPGxVzHZQJJzR7M0arFDYvu8jdQIDAQAB" )
Utilisateurs
Gestion manuelle
Contrairement à des logiciels comme postfix et dovecot, maddy utilise par défaut des “utilisateurs virtuels”, ce qui signifie qu’il ne se préoccupe pas des utilisateurs du système et n’en a pas connaissance.
En mode su
Pour enregistrer les informations d’identification d’un utilisateur, utilisez la commande maddy creds create
.
Utilisateur + mot de passe
maddy creds create postmaster@rnmkcy.eu
Créer utilisateur localement
useradd postmaster
créer un compte de stockage local
maddy imap-acct create postmaster@rnmkcy.eu
Utilisateur linux existant + compte
maddy creds create leno@rnmkcy.eu
maddy imap-acct create leno@rnmkcy.eu
Liste des utilisateurs
maddy creds list
Ce qui donne
leno@rnmkcy.eu
postmaster@rnmkcy.eu
Gestion LLDAP
maddy prend en charge l’authentification via LDAP en utilisant la liaison DN. Les mots de passe sont vérifiés par le serveur LDAP.
Maddy a besoin de connaître le DN à utiliser pour la liaison. Il peut être obtenu soit par recherche de répertoire ou template
Notez que les backends de stockage utilisent traditionnellement des adresses e-mail, si vous utilisez des identifiants non-email comme nom d’utilisateur, vous devez les mapper sur les e-mails de livraison en utilisant auth_map (voir la page de documentation pour le backend de stockage utilisé).
auth.ldap peut également être utilisé comme module de table. De cette façon, vous pouvez vérifier si le compte existe. Il fonctionne seulement si le modèle DN n’est pas utilisé.
Exemple de configuration Maddy avec LLDAP
Vous pouvez remplacer local_authdb par un autre nom si vous voulez utiliser plusieurs backends auth.
Si vous voulez seulement utiliser un backend de stockage assurez-vous de désactiver auth.pass_table local_authdb
dans votre configuration si elle est toujours active.
#auth.pass_table local_authdb {
# table sql_table {
# driver sqlite3
# dsn credentials.db
# table_name passwords
# }
#}
auth.ldap local_authdb {
urls ldap://192.168.0.218:3890
bind plain "cn=admin,ou=people,dc=rnmkcy,dc=eu" "admin_password"
base_dn "dc=rnmkcy,dc=eu"
filter "(&(|(uid={username})(mail={username}))(objectClass=person))"
starttls off
debug off
connect_timeout 1m
}
Après les modifications, on redémarre le serveur de messagerie
sudo systemctl restart maddy
Vérification
mars 28 16:52:52 rnmkcy.eu maddy[974]: signal received (terminated), next signal will force immediate shutdown.
mars 28 16:52:52 rnmkcy.eu systemd[1]: Stopping maddy.service - maddy mail server...
mars 28 16:52:52 rnmkcy.eu systemd[1]: maddy.service: Deactivated successfully.
mars 28 16:52:52 rnmkcy.eu systemd[1]: Stopped maddy.service - maddy mail server.
mars 28 16:52:52 rnmkcy.eu systemd[1]: maddy.service: Consumed 20.941s CPU time.
mars 28 16:52:52 rnmkcy.eu systemd[1]: Starting maddy.service - maddy mail server...
mars 28 16:52:52 rnmkcy.eu maddy[47395]: smtp: listening on tcp://0.0.0.0:25
mars 28 16:52:52 rnmkcy.eu maddy[47395]: submission: listening on tls://0.0.0.0:465
mars 28 16:52:52 rnmkcy.eu maddy[47395]: submission: listening on tcp://0.0.0.0:587
mars 28 16:52:52 rnmkcy.eu maddy[47395]: imap: listening on tls://0.0.0.0:993
mars 28 16:52:52 rnmkcy.eu maddy[47395]: imap: listening on tcp://0.0.0.0:143
mars 28 16:52:52 rnmkcy.eu systemd[1]: Started maddy.service - maddy mail server.
Parefeu
Si un parefeu est utilisé, il faut ouvrir les ports 25,587 et 993
Smtp acme
Définir les paramètres dnas acme pour une notification par smtp
export SMTP_FROM="postmaster@rnmkcy.eu"
export SMTP_TO="vpn@cinay.eu"
export SMTP_HOST="rnmkcy.eu"
export SMTP_PORT="587"
export SMTP_SECURE="tls"
export SMTP_USERNAME="postmaster@rnmkcy.eu"
export SMTP_PASSWORD="xxxxxxxxxxxxxxx"
export SMTP_BIN="/usr/bin/python3"
exécutez la commande suivante pour activer la notification smtp pour votre Let’s Encrypt lorsqu’un certificat est ignoré, renouvelé ou erroné. Par exemple :
acme.sh --set-notify --notify-hook smtp
Résultat de la commande
[mar. 26 déc. 2023 14:46:06 CET] Set notify hook to: smtp
[mar. 26 déc. 2023 14:46:06 CET] Sending via: smtp
[mar. 26 déc. 2023 14:46:06 CET] smtp Success
Modifier le script echeance_certificat.sh
pour y inclure les paramètres --set-notify --notify-hook smtp
msmtp client SMTP
msmtp est un client SMTP très simple et facile à configurer pour l’envoi de courriels
Message en ligne de commande
Simple message avec sujet
printf "Subject:De Quoi On Parle\n\nLe Corps Du Message" | msmtp yack@cinay.eu
message html
Le message sample.html
From: postmaster@rnmkcy.eu
To: yack@cinay.eu
Subject: This is the Subject
Mime-Version: 1.0
Content-Type: text/html
<html>
<head>This is Email Head</head>
<body>
<h2>This is the Main Title</h2>
<p>This is the body text</p>
</body>
</html>
Envoi du message via msmtp
cat sample.html | msmtp yack@cinay.eu
alias de messagerie
Les alias de messagerie sont stockés dans le fichier /etc/maddy/aliases
sous le format suivant
# adresse mail alias: adresse mail destinataire
alias@rnmkcy.eu: leno@rnmkcy.eu
Redémarrer le service
sudo systemctl restart maddy
Nextcloud
Installer nextcloud hub
Installation version compilée nginx obligatoire
Le dossier data nextcloud : /lvssd/nextcloud/data
mkdir -p /lvssd/nextcloud/data
chown -R nextcloud:nextcloud /lvssd/nextcloud/data
chmod -R o-rwx /lvssd/nextcloud/data
nginx version: nginx/1.24.0
OpenSSL 3.0.11 19 Sep 2023 (Library: OpenSSL 3.0.11 19 Sep 2023)
PHP 8.2.10 (cli) (built: Sep 4 2023 08:12:29) (NTS)
mariadb Ver 15.1 Distrib 10.11.3-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
Vhost nextcloud nginx
Le fichier de configuration pool PHP /etc/php/8.2/fpm/pool.d/nextcloud.conf
Etendre Réduire
Le fichier de configuration web cloud.rnmkcy.eu /etc/nginx/conf.d/cloud.rnmkcy.eu.conf
Etendre Réduire
Vérifier et recharger nginx : nginx -t && systemctl reload nginx
cloud.rnmkcy.eu
Premier lancement nextcloud
- Ouvrir le lien https://cloud.rnmkcy.eu
- Créer un compte administrateur et son mot de passe
Le dossier data nextcloud : /lvssd/nextcloud/data - Renseigner les éléments de la base mysql
Quitter nextcloud pour finaliser la configuration
Activer la tâche cron, utilisateur nextcloud
sudo -u nextcloud crontab -e
# m h dom mon dow command
*/5 * * * * php -f /var/www/nextcloud/cron.php
Modifier config.php
Modifier en mode su le fichier /var/www/nextcloud/config/config.php
Ajouter 'default_phone_region' => 'FR',
et les lignes suivantes dans le fichier /var/www/nextcloud/config/config.php
avant le tag de fin de fichier );
'default_locale' => 'fr_FR',
'default_phone_region' => 'FR',
'filelocking.enabled' => true,
'memcache.locking' => '\\OC\\Memcache\\Redis',
'memcache.local' => '\\OC\\Memcache\\APCu',
'redis' =>
array (
'host' => 'localhost',
'port' => 6379,
'timeout' => 0.0,
'password' => '',
),
'maintenance' => false,
'maintenance_window_start' => 1,
'mail_from_address' => 'postmaster',
'mail_smtpmode' => 'smtp',
'mail_sendmailmode' => 'smtp',
'mail_domain' => 'rnmkcy.eu',
'mail_smtphost' => 'rnmkcy.eu',
'mail_smtpport' => '587',
'mail_smtpauth' => 1,
'mail_smtpname' => 'postmaster@rnmkcy.eu',
'mail_smtppassword' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
Renseigner adresse de messagerie de destination pour l’utilisateur dans “Personnel” -> “Informations personnelles”
Choix cron
Vérification
Stockage externe
KB450312 – Connecting SMB Share to Nextcloud
Installer le client samba
sudo apt install smbclient
Activer application External storage support
Accès FreeUSB2To ,disque samba connecté sur la freebox
Accès thinkshare ,disque local /sharenfs
Quand on sélectionne le dossier Home, le readme.md est affiché et on peut le modifier ou le supprimer
Authentification
Matériel - Sans mot de passe
Utilisation de clés Yubico - YubiKey 5 NFC
Nextcloud sans mot de passe (FIDO2)
LLdap
Nextcloud - authentification ldap
Gestion Mail
Mail Nextcloud
Si vous avez installé un serveur mail, installer at activer l’application mail de nextcloud
Paramétrage en “Manuel”
Cliquer sur “Connecter”
SnappyMail Nextcloud
Fail2ban Nextcloud
Hardening and security guidance
L’exposition de votre serveur à l’internet conduira inévitablement à l’exposition des services fonctionnant sur les ports exposés à l’internet à des tentatives de connexion par force brute.
Configurer un filtre et une prison pour Nextcloud
Un filtre définit des règles regex pour identifier les utilisateurs qui ne parviennent pas à s’authentifier sur l’interface utilisateur de Nextcloud, WebDAV, ou qui utilisent un domaine non fiable pour accéder au serveur.
Créer un fichier /etc/fail2ban/filter.d/nextcloud.conf
avec le contenu suivant :
[Definition]
_groupsre = (?:(?:,?\s“\w+”:(?:”[^”]+”|\w+)))
failregex = ^{%(_groupsre)s,?\s*“remoteAddr”:”
Le fichier jail définit la manière de traiter les tentatives d’authentification échouées détectées par le filtre Nextcloud.
Créez un fichier /etc/fail2ban/jail.d/nextcloud.local
avec le contenu suivant :
[nextcloud]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = nextcloud
maxretry = 3
bantime = 86400
findtime = 43200
logpath = /lvssd/nextcloud/data/nextcloud.log
Veillez à remplacer logpath par l’emplacement nextcloud.log de votre installation. Si vous utilisez des ports autres que 80 et 443 pour votre serveur Web, vous devez également les remplacer. Les paramètres bantime et findtime sont définis en secondes.
Redémarrez le service fail2ban.
sudo systemctl restart fail2ban
Vous pouvez vérifier l’état de votre prison Nextcloud en exécutant :
sudo fail2ban-client status nextcloud
Etat relevé
Status for the jail: nextcloud
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /lvssd/nextcloud/data/nextcloud.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
rnmkcy.eu
Dossier racine
Création sur le disque partagé
mkdir -p /sharenfs/multimedia/Divers/{diceware,img,osm-new,site,static}
Les droits
sudo chown leno:leno -R /sharenfs/multimedia/
sudo chmod 775 -R /sharenfs/multimedia/
La topologie
Déplacer le root du site rnmkcy.eu
Création dossier : mkdir /sharenfs/rnmkcy.eu
Déplacement : sudo mv /var/www/default-www /sharenfs/rnmkcy.eu/racine/
Le fichier nginx /etc/nginx/conf.d/rnmkcy.eu.conf
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name rnmkcy.eu;
include /etc/nginx/conf.d/security.conf.inc;
root /sharenfs/rnmkcy.eu/racine/ ;
location / {
index index.htm index.html index.php;
}
location ~ \.php(?:$|/) {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
fastcgi_param front_controller_active true; # Enable pretty urls
fastcgi_param HTTP_ACCEPT_ENCODING ""; # Disable encoding of nextcloud response to inject ynh scripts
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
include /etc/nginx/conf.d/rnmkcy.eu.d/*.conf;
}
Recharger : sudo systemctl reload nginx
static site diceware et cartes
Regroupe static site diceware et cartes
/etc/nginx/conf.d/static.rnmkcy.eu.conf
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name static.rnmkcy.eu;
include /etc/nginx/conf.d/security.conf.inc;
root /sharenfs/multimedia/Divers/static/;
location / {
index index.htm index.html index.php;
location ~ \.php(?:$|/) {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
fastcgi_param front_controller_active true; # Enable pretty urls
fastcgi_param HTTP_ACCEPT_ENCODING ""; # Disable encoding of nextcloud response to inject ynh scripts
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name site.rnmkcy.eu;
include /etc/nginx/conf.d/security.conf.inc;
root /sharenfs/rnmkcy.eu/site/;
location / {
index index.html index.php /_h5ai/public/index.php;
location ~ \.php(?:$|/) {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
fastcgi_param front_controller_active true; # Enable pretty urls
fastcgi_param HTTP_ACCEPT_ENCODING ""; # Disable encoding of nextcloud response to in>
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name dice.rnmkcy.eu;
include /etc/nginx/conf.d/security.conf.inc;
root /sharenfs/multimedia/Divers/diceware/;
location / {
index index.htm index.html;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name osm.rnmkcy.eu;
include /etc/nginx/conf.d/security.conf.inc;
root /sharenfs/multimedia/Divers/osm-new/;
location / {
index index.htm index.html index.php;
location ~ \.php(?:$|/) {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
fastcgi_param front_controller_active true; # Enable pretty urls
fastcgi_param HTTP_ACCEPT_ENCODING ""; # Disable encoding of nextcloud response to inject ynh scripts
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
}
}
Recharger : sudo systemctl reload nginx
Accès
Shaarli
Shaarli, le service personnel, minimaliste, super rapide, sans base de données, signet.
Installer Shaarli
Pour installer Shaarli, il suffit de placer les fichiers de la dernière archive .zip sous la racine du document de votre serveur web (directement à la racine du document, ou dans un sous-répertoire). Téléchargez l’archive shaarli-vX.X.X-full pour y inclure les dépendances.
wget https://github.com/shaarli/Shaarli/releases/download/v0.13.0/shaarli-v0.13.0-full.zip
unzip shaarli-v0.13.0-full.zip
sudo rsync -avP Shaarli/ /var/www/shaarli.rnmkcy.eu/
Définir les permissions de fichier
Quelle que soit la méthode d’installation, les autorisations de fichiers appropriées doivent être définies:
sudo chown -R root:www-data /var/www/shaarli.rnmkcy.eu
sudo chmod -R g+rX /var/www/shaarli.rnmkcy.eu
sudo chmod -R g+rwX /var/www/shaarli.rnmkcy.eu/{cache/,data/,pagecache/,tmp/}
nginx php-fpm
Installer si nécessaire nginx et php-fpm
sudo apt install nginx php-fpm
Extensions PHP nécessaires
Installer
sudo apt install php8.2-xml php8.2-common php8.2-gd php8.2-intl php8.2-curl php8.2-mbstring
Le fichier php fpm /etc/php/8.2/fpm/pool.d/shaarli.conf
[shaarli]
user = www-data
group = www-data
listen = /var/run/php/php8.2-fpm-shaarli.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
; Default Value: current directory or / when chroot
chdir = /var/www/shaarli.rnmkcy.eu
Modifier le fichier de configuration de virtualhost
sudo nano /etc/nginx/conf.d/shaarli.rnmkcy.eu.conf
server {
listen 80;
listen [::]:80;
server_name shaarli.rnmkcy.eu;
# redirect all plain HTTP requests to HTTPS
return 301 https://shaarli.rnmkcy.eu$request_uri;
}
server {
# ipv4 listening port/protocol
listen 443 ssl http2;
# ipv6 listening port/protocol
listen [::]:443 ssl http2;
server_name shaarli.rnmkcy.eu;
root /var/www/shaarli.rnmkcy.eu;
# log file locations
# combined log format prepends the virtualhost/domain name to log entries
access_log /var/log/nginx/access.log combined;
error_log /var/log/nginx/error.log;
include /etc/nginx/conf.d/security.conf.inc;
# increase the maximum file upload size if needed: by default nginx limits file upload to 1MB (413 Entity Too Large error)
client_max_body_size 100m;
# relative path to shaarli from the root of the webserver
# if shaarli is installed in a subdirectory of the main domain, edit the location accordingly
location / {
# default index file when no file URI is requested
index index.php;
try_files _ /index.php$is_args$args;
}
location ~ (index)\.php$ {
try_files $uri =404;
# slim API - split URL path into (script_filename, path_info)
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# pass PHP requests to PHP-FPM
fastcgi_pass unix:/var/run/php/php8.2-fpm-shaarli.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ /doc/html/ {
default_type "text/html";
try_files $uri $uri/ $uri.html =404;
}
location = /favicon.ico {
# serve the Shaarli favicon from its custom location
alias /var/www/shaarli/images/favicon.ico;
}
# allow client-side caching of static files
location ~* \.(?:ico|css|js|gif|jpe?g|png|ttf|oet|woff2?)$ {
expires max;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
# HTTP 1.0 compatibility
add_header Pragma public;
}
}
Vérifier
sudo nginx -t
Recharger les configurations php-fpm nginx
sudo systemctl reload php8.2-fpm nginx
Configurer Shaarli
Ouvrir le lien https://shaarli.rnmkcy.eu
Après avoir cliqué sur “Install” on arrive sur la page de connexion
Pour une utilisation avec Lldap(A VERIFIER)
IP_SRV_LLDAP=192.168.0.218
Si utilisation serveur LLDAP, ajouter les lignes suivantes au fichier /data/config.json.php
"ldap": {
"host": "ldap://192.168.0.218:3890",
"dn": "uid=%s,ou=people,dc=domain,dc=com"
}
Traduction
LibreTranslate API de traduction
Une API pour la traduction accessible sur le lien https://traduction.rnmkcy.eu
Calibre web
https://github.com/janeczku/calibre-web
Environnement python
Vérifier python3
python3 -V
Python 3.11.2
Prérequis, installer pip et aussi venv pour votre version de python
sudo apt install python3-venv python3-dev
Création dossier puis un environnement virtuel pour calibre-web
sudo mkdir /lvssd/calibreweb
sudo chown $USER:$USER /lvssd/calibreweb
python3 -m venv /lvssd/calibreweb
Activer l’environnement
source /lvssd/calibreweb/bin/activate
On arrive sur le prompt ((calibreweb) leno@rnmkcy:~$
Installer calibre-web
pip3 install --upgrade pip
pip3 install wheel
pip3 install cmake
pip3 install calibreweb
Service calibreweb
Utilisation fichier systemd pour le lancement automatique
sudo nano /etc/systemd/system/calibreweb.service
Contenu du fichier
[Unit]
Description=Service calibreweb
After=network.target
[Service]
Type=simple
User=leno
ExecStart=/lvssd/calibreweb/bin/cps
[Install]
WantedBy=multi-user.target
ATTENTION! , User est l’utilisateur connecté ($USER)
Recharger et lancer le service calibreweb et vérifier
sudo systemctl daemon-reload
sudo systemctl start calibreweb
Vérifier et activer
sudo systemctl status calibreweb
sudo systemctl enable calibreweb
Proxy nginx
Si vous voulez utiliser nginx comme proxy , fichier de configuration /etc/nginx/conf.d/calibre.ouestline.xyz.conf
server {
listen 80;
listen [::]:80;
server_name calibre.ouestline.xyz;
# redirect all plain HTTP requests to HTTPS
return 301 https://calibre.ouestline.xyz$request_uri;
}
server {
# ipv4 listening port/protocol
listen 443 ssl http2;
# ipv6 listening port/protocol
listen [::]:443 ssl http2;
server_name calibre.ouestline.xyz;
include /etc/nginx/conf.d/security-ouestline.xyz.conf.inc;
# connexion nginx fermée si sous domaine inexistant
if ($http_host != "calibre.ouestline.xyz") {
return 444;
}
location / {
proxy_pass http://127.0.0.1:8083;
}
}
Ouvrir le lien https://calibre.ouestline.xyz
Par défaut admin admin123
Cliquer sur Admin avec un grand A, pusi clic “Edit Users”
Clic sur “Back”, le menu s’affiche en français
Configuration de l’interface utilisateur
Thème sombre puis clic “Sauvegarder”
Afficher champ lu/non lu
Authentification ldap
LDAP peut être utilisé comme fournisseur de connexion pour Calibre-Web. En fonction de votre distribution, certains paquets doivent être installés. Vous devez également installer les dépendances listées dans le fichier optional-requirements.txt dans la section LDAP.
Il faut installer des modules complémentaires
# ldap login
python-ldap>=3.0.0,<3.5.0
Flask-SimpleLDAP>=1.4.0,<1.5.0
Prérequis
sudo apt install libsasl2-dev python3-dev libldap2-dev libssl-dev
activer l’environnement
source /lvssd/calibreweb/bin/activate
On arrive sur le prompt ((calibreweb) leno@rnmkcy:~$
Installer python ldap
pip3 install python-ldap
pip3 install Flask-SimpleLDAP
Redémarrer le service
sudo systemctl restart calibreweb
Se connecter en admin sur le lien https://calibre.rnmkcy.eu
Après un redémarrage de Calibre-Web, vous devriez voir Flask_SimpleLDAP dans la section “A propos”.
Dans la section Admin -> Editer la configuration principale -> Configuration des options, une nouvelle option “Type de connexion” apparaît. Après avoir sélectionnée “Utiliser l’authentification LDAP” , vous devez configurer votre connexion LDAP :
Configuration lldap
Remplacer dc=rnmkcy,dc=eu
avec le domaine configuré dans LLDAP
Version Anglaise
Login type : Use LDAP Authentication
LDAP Server Host Name or IP Address : 192.168.0.218
LDAP Server Port : 3890
LDAP Encryption : none
LDAP Authentication : simple
LDAP Administrator Username : uid=admin,ou=people,dc=rnmkcy,dc=eu
LDAP Administrator Password : MOT_PASSE_ADMIN_LDAP
LDAP Distinguished Name (DN) : dc=rnmkcy,dc=eu
LDAP User Object Filter : (&(objectclass=person)(uid=%s))
LDAP Server is OpenLDAP? : yes
LDAP Group Object Filter : (&(objectclass=groupOfUniqueNames)(cn=%s))
LDAP Group Name : calibre_web
Note: Créez un groupe dans lldap et ajoutez-y les utilisateurs qui auront accès à votre instance Calibre-Web.
LDAP Group Members Field : uniqueMember
LDAP Member User Filter Detection : Custom Filter
LDAP Member User Filter : (&(objectclass=person)(uid=%s))
Note: mettre en minuscule le mot “person” jusqu’à ce que ce bug soit corrigé
Version Française
Type de connexion : Utiliser l'authentificationLDAP
Nom d’hôte ou Adresse IP du serveur LDAP : 192.168.0.218
Port du serveur LDAP : 3890
Chiffrement LDAP : Aucun
Authentification LDAP : Simple
Nom d’utilisateur de l’administrateur LDAP : uid=admin,ou=people,dc=rnmkcy,dc=eu
Mot de passe de l’administrateur LDAP : MOT_PASSE_ADMIN_LDAP
LDAP Distinguished Name (DN) : dc=rnmkcy,dc=eu
Filtre objet de l’utilisateur LDAP : (&(objectclass=person)(uid=%s))
Est-ce que le serveur LDAP est OpenLDAP? Cocher la case
Les paramètres suivant sont nécessaires pour importer un utilisateur
Filtre objet de groupe LDAP : (&(objectclass=groupOfUniqueNames)(cn=%s))
Nom de groupe LDAP : calibre_web
Note: Créez un groupe dans lldap et ajoutez-y les utilisateurs qui auront accès à votre instance Calibre-Web.
Champ des membres de groupe LDAP : uniqueMember
Filtre de détection des utilisateurs membres LDAP : Filtre personnalisé
Filtre utilisateur des membres LDAP : (&(objectclass=person)(uid=%s))
Images de la configuration
Cliquer sur SAUVEGARDER
Pour se connecter à Calibre-Web via LDAP, les utilisateurs doivent être créés ou importés dans Calibre-Web (le compte utilisateur doit être visible dans la section d’administration de Calibre-Web). Si vous entrez un mot de passe dans la section “Modifier l’utilisateur” pour votre compte administrateur, vous pouvez vous connecter en tant que solution de repli si le serveur LDAP n’est pas accessible (ou si la connexion est mal configurée). Dans le cas contraire, il n’est pas possible de se connecter à Calibre-Web et de modifier les paramètres. Si le serveur LDAP est hors service, aucun utilisateur sans mot de passe de secours ne peut se connecter à Calibre-Web. Les mots de passe des utilisateurs ne sont pas mis à jour/stockés dans la base de données de Calibre-Web. Tant que le serveur LDAP fonctionne, les utilisateurs avec le mot de passe de secours ne peuvent se connecter qu’avec leur mot de passe LDAP et non avec le mot de passe de secours.
OnlyOffice Docs community
Créer un serveur ONLYOFFICE sur un debian virtuel, voir OnlyOffice Debian Document Server
Accès via proxy adresse 192.168.0.217
Lien only.rnmkcy.eu avec jeton accès
Configuration /etc/nginx/conf.d/only.rnmkcy.eu.conf
server {
listen 80;
listen [::]:80;
server_name only.rnmkcy.eu;
# redirect all plain HTTP requests to HTTPS
return 301 https://only.rnmkcy.eu$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name only.rnmkcy.eu;
include /etc/nginx/conf.d/security.conf.inc;
more_set_headers "Strict-Transport-Security : max-age=63072000; includeSubDomains; preload";
location / {
proxy_pass http://192.168.0.217/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection $proxy_connection;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
more_set_headers "X-Frame-Options : ALLOW-FROM https://cloud.rnmkcy.eu always";
client_max_body_size 10M;
}
access_log /var/log/nginx/only.rnmkcy.eu-access.log;
error_log /var/log/nginx/only.rnmkcy.eu-error.log;
}
Envoi notification (ntfy)
On va créer jeton d’accès (tokens) pour l’utilisateur “leno”
sudo ntfy token add leno
token tk_xxxxxxxxxxxxxxxxxxxx created for user leno, never expires
Test envoi message depuis la ligne de commande
ntfy publish \
--token tk_xxxxxxxxxxxxxxxxxxxx \
https://noti.rnmkcy.eu/yan_infos \
"Accès avec jeton (token)"
Audio
Navidrome
Audio Navidrome, installation sur debian
Version 051.1 au 24/03/2024
wget https://github.com/navidrome/navidrome/releases/download/v0.51.1/navidrome_0.51.1_Linux_amd64.tar.gz -O Navidrome.tar.gz
sudo tar -xvzf Navidrome.tar.gz -C /opt/navidrome/
sudo chown -R navidrome:navidrome /opt/navidrome
créer un nouveau fichier nommé /var/lib/navidrome/navidrome.toml
avec les paramètres suivants.
# Dossier où est stockée votre bibliothèque musicale
MusicFolder = "/sharenfs/multimedia/Music/musicyan"
# Définir la langue par défaut
DefaultLanguage="fr"
Créer une unité Système /etc/systemd/system/navidrome.service
avec les données suivantes.
[Unit]
Description=Navidrome Music Server and Streamer compatible with Subsonic/Airsonic
After=remote-fs.target network.target
AssertPathExists=/var/lib/navidrome
[Install]
WantedBy=multi-user.target
[Service]
User=navidrome
Group=navidrome
Type=simple
ExecStart=/opt/navidrome/navidrome --configfile "/var/lib/navidrome/navidrome.toml"
WorkingDirectory=/var/lib/navidrome
TimeoutStopSec=20
KillMode=process
Restart=on-failure
# See https://www.freedesktop.org/software/systemd/man/systemd.exec.html
DevicePolicy=closed
NoNewPrivileges=yes
PrivateTmp=yes
PrivateUsers=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictNamespaces=yes
RestrictRealtime=yes
SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
ReadWritePaths=/var/lib/navidrome
# You can uncomment the following line if you're not using the jukebox This
# will prevent navidrome from accessing any real (physical) devices
#PrivateDevices=yes
# You can change the following line to `strict` instead of `full` if you don't
# want navidrome to be able to write anything on your filesystem outside of
# /var/lib/navidrome.
ProtectSystem=full
# You can uncomment the following line if you don't have any media in /home/*.
# This will prevent navidrome from ever reading/writing anything there.
#ProtectHome=true
# You can customize some Navidrome config options by setting environment variables here. Ex:
#Environment=ND_BASEURL="/navidrome"
Rechargez le démon de service, lancez le nouveau service et vérifiez
sudo systemctl daemon-reload
sudo systemctl enable navidrome.service --now
sudo systemctl status navidrome.service
Si le service a démarré correctement, vérifiez que vous pouvez accéder à http://localhost:4533.
Ouvrir un terminal sur le client linux qui dispose des clés ssh et lancer la commande
ssh -L 9500:localhost:4533 leno@192.168.0.215 -p 55215 -i /home/yann/.ssh/lenovo-ed25519
Créer un compte administrateur : yann
Proxy nginx /etc/nginx/conf.d/zic.rnmkcy.eu
server {
listen 80;
listen [::]:80;
server_name zic.rnmkcy.eu;
# redirect all plain HTTP requests to HTTPS
return 301 https://zic.rnmkcy.eu$request_uri;
}
server {
# ipv4 listening port/protocol
listen 443 ssl http2;
# ipv6 listening port/protocol
listen [::]:443 ssl http2;
server_name zic.rnmkcy.eu;
include /etc/nginx/conf.d/security.conf.inc;
location / {
proxy_pass http://127.0.0.1:4533;
proxy_set_header Host $host;
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 $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
proxy_buffering off;
}
}
Lien https://zic.rnmkcy.eu
HomeGallery
Création du dossier photos
sudo mkdir /sharenfs/photos
sudo chown $USER:$USER /sharenfs/photos
Installer HomeGallery sur le serveur virtuel “debsrv01” (Lenovo KVM - Serveur virtuel Debian 12 + Jekyll)
Création fichier de configuration nginx /etc/nginx/conf.d/photo.rnmkcy.eu.conf
server {
listen 80;
listen [::]:80;
server_name photo.rnmkcy.eu;
# redirect all plain HTTP requests to HTTPS
return 301 https://photo.rnmkcy.eu$request_uri;
}
server {
# ipv4 listening port/protocol
listen 443 ssl http2;
# ipv6 listening port/protocol
listen [::]:443 ssl http2;
server_name photo.rnmkcy.eu;
include /etc/nginx/conf.d/security.conf.inc;
# connexion nginx fermée si sous domaine inexistant
if ($http_host != "photo.rnmkcy.eu") {
return 444;
}
location / {
proxy_pass http://192.168.0.219:3000;
}
}
Recharger nginx
sudo systemctl reload nginx
Le lien https://photo.rnmkcy.eu
ouestline.xyz
Dossier + Nginx
Création des dossiers
sudo mkdir -p /sharenfs/ouestline.xyz
sudo chown $USER:$USER /sharenfs/ouestline.xyz
mkdir -p /sharenfs/ouestline.xyz/racine
sudo mkdir /etc/nginx/conf.d/ouestline.xyz.d
La configuration de sécurité nginx domaine ouestline.xyz /etc/nginx/conf.d/security-ouestline.xyz.conf.inc
ssl_certificate /etc/ssl/private/ouestline.xyz-fullchain.pem;
ssl_certificate_key /etc/ssl/private/ouestline.xyz-key.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
# modern configuration
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers off;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
#add_header Strict-Transport-Security "max-age=63072000" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
# verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /etc/ssl/private/ouestline.xyz-fullchain.pem;
# replace with the IP address of your resolver
resolver 1.1.1.1 9.9.9.9 valid=300s;
resolver_timeout 5s;
Acceuil
Le fichier nginx /etc/nginx/conf.d/ouestline.xyz.conf
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ouestline.xyz;
include /etc/nginx/conf.d/security-ouestline.xyz.conf.inc;
root /sharenfs/ouestline.xyz/racine/ ;
location / {
index index.htm index.html index.php;
}
location ~ \.php(?:$|/) {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
fastcgi_param front_controller_active true; # Enable pretty urls
fastcgi_param HTTP_ACCEPT_ENCODING ""; # Disable encoding of nextcloud response to inject ynh scripts
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
include /etc/nginx/conf.d/ouestline.xyz.d/*.conf;
}
Recharger : sudo systemctl reload nginx
BorgBackup
BorgBackup Lenovo
Service /etc/systemd/system/navidrome.service
Développement
Go + Node
-
Installer la dernière version de Go
- go version go1.21.4 linux/amd64
-
Installer Node.js
- Now using node v20.10.0 (npm v10.2.3)
Creating default alias: default -> 20.10.0 (-> v20.10.0)
- Now using node v20.10.0 (npm v10.2.3)
Php composer
Composer est un outil de gestion de dépendance populaire pour PHP, créé principalement pour faciliter l’installation et les mises à jour pour les dépendances du projet.
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
sudo chmod +x /usr/local/bin/composer
wg-webui-fr
Gestion clients et serveur wireguard (go+nodejs)
Dossier : ~/wg-webui-fr/
Créer le service wgweb
Créer le service /etc/systemd/system/wgweb.service
[Unit]
Description=Wireguard web
After=network.target
[Service]
Type=simple
Restart=on-failure
RestartSec=10
WorkingDirectory=/opt/appwg
ExecStart=/opt/appwg/wg-ui
[Install]
WantedBy=multi-user.target
Environnement fichier .env
Modifier le fichier environnement ~/wg-webui-fr/.env
SERVER=127.0.0.1
PORT=8090
GIN_MODE=debug
WG_CONF_DIR=/opt/appwg/wireguard
WG_INTERFACE_NAME=wg0.conf
SMTP_HOST=127.0.0.1
SMTP_PORT=587
SMTP_USERNAME=""
SMTP_PASSWORD=""
SMTP_FROM="wg-web-ui <wg-web-ui@wg-web-ui.xyz>"
ATTENTION: Pour exécuter l'application un fichier wg0.conf doit être présent dans le dossier ./wireguard
Première construction wg-webui-fr
Pour éviter le message suivant lors de la première construction
core/client.go:13:2: no required module provides package gopkg.in/gomail.v2; to add it:
go get gopkg.in/gomail.v2
Exécuter
go get gopkg.in/gomail.v2
Exécuter les commandes suivantes
cd ~/wg-webui-fr/
go mod tidy
go build -o wg-ui main.go
cd ui
export NODE_OPTIONS=--openssl-legacy-provider
export VUE_APP_API_BASE_URL=http://localhost:8080/api/v1.0
npm install
npm run build
cd ~/wg-webui-fr/
sudo mkdir -p /opt/appwg/ui
sudo cp ~/wg-webui-fr/wg-ui /opt/appwg
sudo cp -r ~/wg-webui-fr/ui/dist /opt/appwg/ui/
sudo cp ~/wg-webui-fr/.env /opt/appwg/
Premier lancement du service et activation
sudo systemctl daemon-reload
sudo systemctl enable wgweb.service --now
Wireguard ui est accessible sur localhost:8080
Pour une mise è jour wg-webui-fr
Exécuter les commandes suivantes
#sudo systemctl stop wgweb.service
cd ~/wg-webui-fr/
go build -o wg-ui main.go
cd ui
export NODE_OPTIONS=--openssl-legacy-provider
export VUE_APP_API_BASE_URL=http://localhost:8080/api/v1.0
npm install
npm run build
cp ~/wg-webui-fr/wg-ui /opt/appwg
cp -r ~/wg-webui-fr/ui/dist /opt/appwg/ui/
#sudo cp ~/wg-webui-fr/wg-ui /opt/appwg
#sudo cp -r ~/wg-webui-fr/ui/dist /opt/appwg/ui/
#sudo systemctl start wgweb.service
Tests
ssh -L 9500:localhost:8090 leno@192.168.0.215 -p 55215 -i /home/yann/.ssh/lenovo-ed25519
Cockpit Web
Installation application → Cockpit
Domaine : cockpit.rnmkcy.eu
Fichier de configuration nginx /etc/nginx/conf.d/cockpit.rnmkcy.eu.conf
server {
listen 80;
listen [::]:80;
server_name cockpit.rnmkcy.eu;
return 301 https://cockpit.rnmkcy.eu$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cockpit.rnmkcy.eu;
include /etc/nginx/conf.d/security.conf.inc;
location / {
# Required to proxy the connection to Cockpit
proxy_pass https://127.0.0.1:9090;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
# Required for web sockets to function
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Pass ETag header from Cockpit to clients.
# See: https://github.com/cockpit-project/cockpit/issues/5239
gzip off;
}
}
Vérification et rechargement nginx
nginx -t
systemctl reload nginx
Radiolise
https://www.radio-browser.info/
Radio-li-se
Prérequis: Node.js (LTS recommandé)
Installer Radiolise à l’échelle globale
npm install -g radiolise
Puis démarrez le serveur à chaque fois en tapant simplement
radiolise
Démarrage auto de l’application node
Comment mettre en place une application Node.js pour la production
Nous allons installer PM2, un gestionnaire de processus pour les applications Node.js. PM2 permet de démoniser les applications afin qu’elles s’exécutent en arrière-plan comme un service.
Utilisez npm pour installer la dernière version de PM2 sur votre serveur :
npm install pm2@latest -g
Commençons par utiliser la commande pm2 start1 pour exécuter votre application, radiolise, en arrière-plan :
pm2 start radiolise
Cela ajoute également votre demande à la liste de processus de PM2, qui est produite chaque fois que vous lancez une demande
Comme indiqué ci-dessus, PM2 attribue automatiquement un nom d’application (basé sur le nom de fichier, sans l’extension .js) et un identifiant PM2. PM2 conserve également d’autres informations, telles que le PID du processus, son état actuel et l’utilisation de la mémoire.
Les applications qui tournent sous PM2 seront redémarrées automatiquement si l’application crashe ou est arrêtée, mais nous pouvons prendre une mesure supplémentaire pour que l’application soit lancée au démarrage du système en utilisant la sous-commande startup. Cette sous-commande génère et configure un script de démarrage pour lancer PM2 et ses processus gérés aux démarrages du serveur
pm2 startup systemd
La dernière ligne de la sortie résultante comprendra une commande à exécuter avec les privilèges de superuser afin de configurer PM2 pour qu’il démarre au démarrage
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/home/leno/.nvm/versions/node/v20.10.0/bin /home/leno/.nvm/versions/node/v20.10.0/lib/node_modules/pm2/bin/pm2 startup systemd -u leno --hp /home/leno
Exécutez la commande à partir de la sortie
sudo env PATH=$PATH:/home/leno/.nvm/versions/node/v20.10.0/bin /home/leno/.nvm/versions/node/v20.10.0/lib/node_modules/pm2/bin/pm2 startup systemd -u leno --hp /home/leno
Vous avez maintenant créé une unité systemd qui exécute pm2 pour votre utilisateur au démarrage. Cette instance pm2, à son tour, lance radiolise
Démarrer le service avec systemctl:
sudo systemctl start pm2-leno
Un redémarrage de la machine est souhaitable
systemctl status pm2-leno
● pm2-leno.service - PM2 process manager
Loaded: loaded (/etc/systemd/system/pm2-leno.service; enabled; preset: enabled)
Active: active (running) since Fri 2024-01-05 18:47:50 CET; 1min 6s ago
Docs: https://pm2.keymetrics.io/
Process: 941 ExecStart=/home/leno/.nvm/versions/node/v20.10.0/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
Main PID: 1368 (PM2 v5.3.0: God)
Tasks: 15 (limit: 14162)
Memory: 71.5M
CPU: 6.445s
CGroup: /system.slice/pm2-leno.service
└─1368 "PM2 v5.3.0: God Daemon (/home/leno/.pm2)"
janv. 05 18:47:50 rnmkcy.eu pm2[941]: [PM2] PM2 Successfully daemonized
janv. 05 18:47:50 rnmkcy.eu pm2[941]: [PM2] Resurrecting
janv. 05 18:47:50 rnmkcy.eu pm2[941]: [PM2] Restoring processes located in /home/leno/.pm2/dump.pm2
janv. 05 18:47:50 rnmkcy.eu pm2[941]: [PM2] Process /home/leno/.nvm/versions/node/v20.10.0/bin/radiolise restored
janv. 05 18:47:50 rnmkcy.eu pm2[941]: ┌────┬──────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
janv. 05 18:47:50 rnmkcy.eu pm2[941]: │ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
janv. 05 18:47:50 rnmkcy.eu pm2[941]: ├────┼──────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
janv. 05 18:47:50 rnmkcy.eu pm2[941]: │ 0 │ radiolise │ default │ 0.39.6 │ fork │ 1436 │ 0s │ 0 │ online │ 0% │ 30.0mb │ leno │ disabled │
janv. 05 18:47:50 rnmkcy.eu pm2[941]: └────┴──────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
janv. 05 18:47:50 rnmkcy.eu systemd[1]: Started pm2-leno.service - PM2 process manager.
Votre application fonctionne et écoute sur localhost, mais vous devez mettre en place un moyen pour que vos utilisateurs y accèdent. Pour cela, nous allons mettre en place le serveur web Nginx comme proxy inverse.
/etc/nginx/conf.d/radio.rnmkcy.eu.conf
server {
listen 80;
listen [::]:80;
server_name radio.rnmkcy.eu;
return 301 https://cockpit.rnmkcy.eu$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name radio.rnmkcy.eu;
include /etc/nginx/conf.d/security.conf.inc;
location / {
proxy_pass http://127.0.0.1:56225;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Vérifier et recharger nginx
sudo nginx -t && sudo systemctl reload nginx
webauthn (NON INSTALLE)
standard pour l’authentification sur le web utilisant la cryptographie asymétrique
Dossier de travail /sharenfs/rnmkcy/
avec les droits utilisateur (leno ID=1000)
cd /sharenfs/rnmkcy/
Cloner le git
git clone https://github.com/davidearl/webauthn.git
accessible en lecture/écriture sur pc1 ~/media/sharenfs/rnmkcy/webauthn/
Cela nécessite
- Bibliothèque PHP CBOR: peut être installé en utilisant l’installation de compositeur dans le répertoire du projet
- phpseclib, ditto
- Un récent openssl inclus dans PHP (openssl_vérify en particulier)
- PHP 5.6.1 ou ultérieur (de préférence PHP 7.4 ou 8.1; non testé avec PHP 8.2, qui a quelques modifications significatives aux déclarations de propriétés)
Exemple
Le code d’exemple est en direct à https://webauthn.davidearl.uk
Pour accueillir l’exemple vous-même,
- placer le code dans la hiérarchie des documents pour votre serveur (par exemple https://example.com/webauthn),
- installer CBOR etc. en utilisant l’installation de composer
- Visiter url https://exemple.com/webauthn/exemple
Si vous mettez tous les répertoires dans webauthn à votre racine de document et ajoutez un index. php comme suit, vous pouvez l’exécuter au niveau supérieur comme par exemple. https://exemple.com (utilisez votre nom de domaine, évidemment).
<?php chdir('exemple'); include_once('index.php');
Installer PHP 8.1
sudo apt install php8.1 php8.1-fpm
Créer un pool php spécifique
cp /etc/php/8.1/fpm/pool.d/www.conf /etc/php/8.1/fpm/pool.d/webauth.conf
Modifier le fichier /etc/php/8.1/fpm/pool.d/webauth.conf
[webauth]
; Default Values: The user is set to master process running user by default.
; If the group is not set, the user's group is used.
user = leno
group = leno
; Default Values: The user is set to master process running user by default.
; If the group is not set, the user's group is used.
user = leno
group = leno
; Note: This value is mandatory.
listen = /run/php/php8.1-fpm-webauth.sock
Relancer php-fpm
sudo systemctl restart php8.1-fpm
Installer CBOR et phpseclib
composer install
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Package operations: 5 installs, 0 updates, 0 removals
- Downloading atoum/atoum (4.1)
- Downloading phpseclib/phpseclib (3.0.17)
- Installing 2tvenom/cborencode (1.0.2): Extracting archive
- Installing atoum/atoum (4.1): Extracting archive
- Installing paragonie/random_compat (v9.99.100): Extracting archive
- Installing paragonie/constant_time_encoding (v2.6.3): Extracting archive
- Installing phpseclib/phpseclib (3.0.17): Extracting archive
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!
Le fichier nginx /etc/nginx/conf.d/webauth.rnmkcy.eu.conf
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name webauth.rnmkcy.eu;
include /etc/nginx/conf.d/security.conf.inc;
root /sharenfs/rnmkcy/webauthn/;
location / {
index index.php;
}
location ~ \.php(?:$|/) {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice
fastcgi_param front_controller_active true; # Enable pretty urls
fastcgi_param HTTP_ACCEPT_ENCODING ""; # Disable encoding of nextcloud response to inject ynh scripts
fastcgi_pass unix:/var/run/php/php8.1-fpm-webauth.sock;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
}
Vérifier et recharger nginx
sudo nginx -t && sudo systemctl reload nginx
Créer un fichier /sharenfs/rnmkcy/webauthn/index.php
Etendre Réduire index.php
Virtualisation
KVM
Installer KVM (Kernel Virtual Machine) sur un serveur
Modifier le pool par défaut après avoir ajouté un disque /lvssd
Créer un dossier kvm
sudo mkdir -p /lvssd/kvm/pool
Pour indiquer le chemin d’accès au pool de stockage pour le type (Dir), nous avons besoin du dernier argument, “target”, bien que nous puissions omettre les autres arguments en utilisant le symbole “-“.
sudo virsh pool-define-as --name poolk --type dir --target /lvssd/kvm/libvirt/images
pool poolk défini
Utilisez la commande suivante pour inspecter chaque pool de stockage que vous avez dans l’environnement
sudo virsh pool-list --all
Nom État Démarrage automatique
--------------------------------------------
boot actif Oui
images actif Oui
poolk inactif no
Démarrer le pool de stockage et le charger lors du démarrage
sudo virsh pool-autostart poolk
Le pool poolk démarrera automatiquement
Supprimer les pool boot, images et default
sudo virsh pool-destroy boot # Pool boot détruit
sudo virsh pool-undefine boot # Le pool boot a été supprimé
sudo virsh pool-destroy images # Pool images détruit
sudo virsh pool-undefine images # Le pool images a été supprimé
Vérification
sudo virsh pool-list --all
Nom État Démarrage automatique
----------------------------------------
poolk actif Oui
Pour manipuler les “pool” en xml
Edition : virsh pool-edit poolk
Edition : virsh pool-dumpxml poolk
Créer un second pool nommé “poolb” dossier /lvssd/kvm/libvirt/boot
Liste des “pool” : sudo virsh pool-list --all
Nom État Démarrage automatique
----------------------------------------
poolb actif Oui # /lvssd/kvm/libvirt/boot
poolk actif Oui # /lvssd/kvm/libvirt/images
VM Alpine Linux
Alpine Linux dans un environnement virtuel KVM Lenovo
VM Debian 12
Image cloud virtuelle Debian 12 dans un environnement KVM Lenovo
Arrêt VM avant reboot Hôte
Il faut arrêter proprement toutes les machines virtuelles en cours d’exécution anvnt de stopper ou redémarrer la machine hôte”
Script qui s’exécute avant arrêt/redémarrage machine hôte
nano /home/leno/run_before_shutdown.sh
#!/bin/bash
# Identifiants machines virtuelles en cours d'exécution
while read vmid
do
virsh shutdown $vmid
done <<< "$(virsh list --id --state-running)"
# Le triple chevron <<< permet de prendre la sortie de commande en entrée de boucle.
Droits en exécution
chmod +x /home/leno/run_before_shutdown.sh
Le service systemd
nano /etc/systemd/system/run-before-shutdown.service
[Unit]
Description=shutdown vm
DefaultDependencies=no
Before=shutdown.target
[Service]
Type=oneshot
ExecStart=/home/leno/run_before_shutdown.sh
TimeoutStartSec=0
[Install]
WantedBy=shutdown.target
Rechargement et activation service
systemctl daemon-reload
systemctl enable run-before-shutdown.service
Maintenance
Réduire la partion LVM thinkshare
Réduction à 120Go
en mode su
Arrêt samba
systemctl stop smb
On démonte et on force le check de la partition :
umount /sharenfs/
fsck.ext4 -fy /dev/mapper/think--vg-thinkshare
On regarde la taille de la partition à réduire :
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lvssd think-ssd -wi-ao---- 100,00g
home think-vg -wi-ao---- <64,24g
root think-vg -wi-ao---- <27,94g
swap_1 think-vg -wi-ao---- 976,00m
thinkshare think-vg -wi-a----- 371,65g
Ici je veux réduire à 120G, on va donc réduire à 119G. C’est pour être certain de ne perdre aucune donnée lorsque l’on va réduire le LV. Une fois le LV réduit à 120Go, on augmentera la taille du système de fichiers à celui du LV pour avoir nos 120G.
resize2fs /dev/mapper/think–vg-thinkshare 119G
On réduit le logical volume :
lvreduce -L 120G -v /dev/mapper/think–vg-thinkshare
On vérifie :
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lvssd think-ssd -wi-ao---- 100,00g
home think-vg -wi-ao---- <64,24g
root think-vg -wi-ao---- <27,94g
swap_1 think-vg -wi-ao---- 976,00m
thinkshare think-vg -wi-a----- 120,00g
On adapte la taille de notre système de fichiers pour atteindre les 120G :
resize2fs /dev/mapper/think–vg-thinkshare
Remontage
mount -a
Relance samba
systemct start smb
Renouvellement Certificats SSL
Renouvellement auto des certificats par acme n’exécute pas le --reloadcmd
, il faut exécuter un script dans une tâche cron
Les service de messagerie est assuré par msmtp
Le script de renouvellement ~/echeance_certificat.sh
~/echeance_certificat.sh
#!/bin/bash
# Domaine
_domain=$1
# Forcer le renouvellement par un 2ième argument , exemple 'force'
# Test expiration certificats
PEM="/etc/ssl/private/$_domain-fullchain.pem"
# 2 days in seconds
DAYS="172800"
_openssl="/usr/bin/openssl"
$_openssl x509 -enddate -noout -in "$PEM" -checkend "$DAYS" | grep -q 'Certificate will expire'
if [ $? -eq 0 -o ! -z "$2" ]
then
# certificat expire dans 2 jours , on renouvelle
echo "Force renouvellement des certificats Lets Encrypt"
"$HOME/.acme.sh"/acme.sh --force --cron --home "$HOME/.acme.sh" --renew-hook "$HOME/.acme.sh/acme.sh --ecc --install-cert -d $_domain --key-file /etc/ssl/private/$_domain-key.pem --fullchain-file /etc/ssl/private/$_domain-fullchain.pem --set-notify --notify-hook smtp"
#
echo "Recharge service nginx"
sudo systemctl reload nginx
#
echo "Mise à niveau des certificats maddy"
sudo cp /etc/ssl/private/$_domain-fullchain.pem /etc/maddy/certs/$_domain/fullchain.pem
sudo cp /etc/ssl/private/$_domain-key.pem /etc/maddy/certs/$_domain/privkey.pem
sudo chown maddy:maddy -R /etc/maddy/certs
echo "Recharge service maddy"
sudo systemctl reload maddy
#
# Envoi message
resul="Le certificat TLS/SSL ("$PEM") a été renouvellé sur "$_domain" ["$(date)"]"
# Si anomalie , ajout option --debug à msmtp
echo -e "Subject: Renouvellement certificat\r\nMIME-Version: 1.0\nContent-Type: text/html; charset=utf-8\r\n\r\n"$resul |msmtp --from=postmaster@rnmkcy.eu -t yani@xoyize.net
else
echeance=$($_openssl x509 -enddate -noout -in "$PEM" |grep "notAfter=" |awk -F'=' '{print $2}')
echo "Echéance Certificat Domaine "$_domain" : "$echeance
fi
Le rendre exécutable
chmod +x ~/echeance_certificat.sh
Créer la tâche
crontab -e
18 0 * * * "$HOME/echeance_certificat.sh rnmkcy.eu" > /dev/null
28 0 * * * "$HOME/echeance_certificat.sh ouestline.xyz" > /dev/null
Les certificats seront renouvellés 7 jours avant l’échéance
Liaison SSH avec serveur externe
Créer une liaison SSH avec le serveur xoyaz.xyz qui n’accepte que les connexions avec clé sur le port 55156
- Serveur distant: xoyaz.xyz
- Utilisateur: ian
- Port : 55156
Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) pour une liaison SSH avec le serveur.
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/xoyaz_xyz
Copier la clé publique ~/.ssh/xoyaz_xyz.pub
dans le presse papier
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFzVuzJY77wG5oTeatGgNOLmySGbRDNvj/PWLeQK+X9B leno@rnmkcy.eu
Depuis un poste ayant accès au serveur xoyaz.xyz , se connecter et coller la clé publique en fin du fichier ~/.ssh/authorized_keys
Depuis un terminal du serveur rnmkcy.eu, première connexion au serveur xoyaz.xyz via ssh
ssh -i ~/.ssh/xoyaz_xyz -p 55156 ian@xoyaz.xyz
The authenticity of host '[xoyaz.xyz]:55156 ([2a02:7b40:c3b5:f29c::1]:55156)' can't be established.
ED25519 key fingerprint is SHA256:El3TQ8AgwSSmxHKo30O0Q80KBKbmQK1CyNIRgR75d6w.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[xoyaz.xyz]:55156' (ED25519) to the list of known hosts.
Linux xoyaz.xyz 6.1.0-16-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.67-1 (2023-12-12) x86_64
_____ ___ __ __ ___ _ _ __ __ ___ ___
|_ _||_ _|| \/ || __|| | |\ \ / /| _ \/ __|
| | | | | |\/| || _| |_ _|\ V / | _/\__ \
|_| |___||_| |_||___| |_| \_/ |_| |___/
___ _ _ _ ___
| \ ___ | |__ (_) __ _ _ _ / ||_ )
| |) |/ -_)| '_ \| |/ _` || ' \ | | / /
|___/ \___||_.__/|_|\__,_||_||_| |_|/___|
You have mail.
Last login: Mon Jan 1 17:12:48 2024 from 2a02:6ea0:d406:1::a18e
Synchronisation des backup borg
Synchronisation des backup borg entre le serveur de stockage (storage box) et le disque USB partagé monté sur la freebox en utilisant systemd timer
Le script à exécuter en mode su /root/.borg/synchro-backup.sh
#!/bin/bash
servers=("e6230" "xoyize.xyz" "rnmkcy.eu" "asus-xh51" "xoyize.net")
for hote in "${servers[@]}"
do
rsync -avz --delete --rsync-path='rsync' -e 'ssh -p 23 -i /root/.ssh/id_borg_ed25519' u326239@u326239.your-storagebox.de:backup/borg/$hote /mnt/FreeUSB2To/sauvegardes/borgbackup/
done
Script exécutable
chmod +x /root/.borg/synchro-backup.sh
Le service /etc/systemd/system/storage-freedisk.service
[Unit]
Description=Rsync storagebox vers FreeUSB2To
[Service]
Type=oneshot
ExecStart=/usr/bin/bash /root/.borg/synchro-backup.sh
Le timer /etc/systemd/system/storage-freedisk.timer
[Unit]
Description=Rsync storagebox vers FreeUSB2To
[Timer]
OnCalendar=*-*-* 04:05
Persistent=true
[Install]
WantedBy=timers.target
Exécution tous les jours à 4h05 du matin
Activez/démarrez le timer, puis vérifiez qu’il est chargé et actif
sudo systemctl enable storage-freedisk.timer
sudo systemctl start storage-freedisk.timer
systemctl status storage-freedisk.timer
Vérifiez qu’il a été démarré en vérifiant s’il apparaît dans la liste des minuteries :
systemctl list-timers
Augmenter taille SWAP
en mode su
Désactiver swap
swapoff -a
Augmenter taille swap LVM à 8Go
lvextend -L 8G /dev/think-vg/swap_1
Réactiver swap
swapon
Ajout SSD Nvme USB3 (INACTIF)
Le nouveau SSD Nvme 1To est connecté USB 3 sur /dev/sdb Effacer tout
sgdisk --zap-all /dev/sdb
Créer les nouvelles partitions
gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.9
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries in memory.
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):
First sector (34-1953525134, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-1953525134, default = 1953523711) or {+-}size{KMGTP}: +512M
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): EF00
Changed type of partition to 'EFI system partition'
Command (? for help): n
Partition number (2-128, default 2):
First sector (34-1953525134, default = 1050624) or {+-}size{KMGTP}:
Last sector (1050624-1953525134, default = 1953523711) or {+-}size{KMGTP}: +490M
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): n
Partition number (3-128, default 3):
First sector (34-1953525134, default = 2054144) or {+-}size{KMGTP}:
Last sector (2054144-1953525134, default = 1953523711) or {+-}size{KMGTP}:
Current type is 8300 (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/sdb.
The operation has completed successfully.
Les partitions
gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.9
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/sdb: 1953525168 sectors, 931.5 GiB
Model: RTL9210B-CG
Sector size (logical/physical): 512/16384 bytes
Disk identifier (GUID): 07047AF9-A1CC-4E5F-B267-3DE4BE7B9F80
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 1953525134
Partitions will be aligned on 2048-sector boundaries
Total free space is 3437 sectors (1.7 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 1050623 512.0 MiB EF00 EFI system partition
2 1050624 2054143 490.0 MiB 8300 Linux filesystem
3 2054144 1953523711 930.5 GiB 8E00 Linux LVM
Création des volumes LVM
pvcreate /dev/sdb3
vgcreate lenosrv /dev/sdb3
lvcreate -L 30G -n root lenosrv
lvcreate -L 70G -n home lenosrv
lvcreate -L 1G -n swap_1 lenosrv
lvcreate -L 100G -n extension lenosrv
lvcreate -L 150G -n nfs-share lenosrv
Format des partitions
Partition EFI
mkfs.fat -F32 /dev/sdb1
Partition boot
mkfs.ext2 /dev/sdb2
Swap
mkswap /dev/mapper/lenosrv-swap_1
Les autres partitions ext4
mkfs.ext4 /dev/mapper/lenosrv-root
mkfs.ext4 /dev/mapper/lenosrv-home
mkfs.ext4 /dev/mapper/lenosrv-extension
mkfs.ext4 /dev/mapper/lenosrv-nfs--share
Les UUID des partitions du nouveau SSD
/dev/sdb1: UUID="637A-1355" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="a430ea2c-4b08-4249-b1d3-cebbf7aa7538"
/dev/sdb2: UUID="62613026-2749-4a4a-b5f3-7e0c0ac58db3" BLOCK_SIZE="1024" TYPE="ext2" PARTLABEL="Linux filesystem" PARTUUID="8be3dc9a-af57-4aad-953b-5c03565d13f5"
/dev/mapper/lenosrv-root: UUID="51ac6324-f6cc-44e5-a8b4-4369c6638aa0" BLOCK_SIZE="4096" TYPE="ext4"
/dev/mapper/lenosrv-home: UUID="071d2c85-35d9-4646-a5ce-545a777db829" BLOCK_SIZE="4096" TYPE="ext4"
/dev/mapper/lenosrv-swap_1: UUID="3582dafa-9ed7-4a68-b804-9faf88633c86" TYPE="swap"
/dev/mapper/lenosrv-extension: UUID="6b292cd9-6584-4aa1-850b-75989ef32cb5" BLOCK_SIZE="4096" TYPE="ext4"
/dev/mapper/lenosrv-nfs--share: UUID="495c54e6-10cb-49ec-a04b-80b40b0cb0ac" BLOCK_SIZE="4096" TYPE="ext4"
Le nouveau fstab /etc/fstab.new
# <file system> <mount point> <type> <options> <dump> <pass>
# /dev/mapper/lenosrv-root
UUID=51ac6324-f6cc-44e5-a8b4-4369c6638aa0 / ext4 errors=remount-ro 0 1
# /boot was on /dev/sda2
UUID=62613026-2749-4a4a-b5f3-7e0c0ac58db3 /boot ext2 defaults 0 2
# /boot/efi was on /dev/sda1 during installation
UUID=637A-1355 /boot/efi vfat umask=0077 0 1
# /dev/mapper/lenosrv-home
UUID=071d2c85-35d9-4646-a5ce-545a777db829 /home ext4 defaults 0 2
# /dev/mapper/lenosrv-swap_1
UUID=3582dafa-9ed7-4a68-b804-9faf88633c86 none swap sw 0 0
# /dev/mapper/lenosrv-extension
UUID=6b292cd9-6584-4aa1-850b-75989ef32cb5 /lvssd ext4 defaults 0 2
# /dev/mapper/lenosrv-nfs--share
UUID=495c54e6-10cb-49ec-a04b-80b40b0cb0ac /sharenfs ext4 defaults 0 2
# Montage permanent des pseudo-systèmes de fichiers
/home /exports/home none bind
/sharenfs/rnmkcy /exports/rnmkcy none bind
/sharenfs/alpine /exports/alpine none bind
/sharenfs/e6230 /exports/e6230 none bind
/sharenfs/pc1 /exports/pc1 none bind
/sharenfs/multimedia /exports/multimedia none bind
Authentification unique (SSO Authelia + LLdap)
L’authentification unique, souvent désignée par le sigle anglais SSO (de single sign-on) est une méthode permettant à un utilisateur d’accéder à plusieurs applications informatiques (ou sites web sécurisés) en ne procédant qu’à une seule authentification.(Authentification unique )
Light Lightweight Directory Access Protocol (LLDAP) est à l’origine un protocole permettant l’interrogation et la modification des services d’annuaire. Ce protocole repose sur TCP/IP. Il a cependant évolué pour représenter une norme pour les systèmes d’annuaires, incluant un modèle de données, un modèle de nommage, un modèle fonctionnel basé sur le protocole LDAP, un modèle de sécurité et un modèle de réplication. C’est une structure arborescente dont chacun des nœuds est constitué d’attributs associés à leurs valeurs
Avec une solution SSO, le login est redirigé vers une seule application et l’utilisateur se verra toujours présenter la même page de connexion quelque soient les applications finales qu’il utilisera.
LLdap - Gestionnaire web
Gestion de l’annuaire lldap des utilisateurs
Création proxy nginx pour le gestionnaire web LLdap
/etc/nginx/conf.d/lldap.rnmkcy.eu.conf
server {
listen 80;
listen [::]:80;
server_name lldap.rnmkcy.eu;
# redirect all plain HTTP requests to HTTPS
return 301 https://lldap.rnmkcy.eu$request_uri;
}
server {
# ipv4 listening port/protocol
listen 443 ssl http2;
# ipv6 listening port/protocol
listen [::]:443 ssl http2;
server_name lldap.rnmkcy.eu;
include /etc/nginx/conf.d/security.conf.inc;
# connexion nginx fermée si sous domaine inexistant
if ($http_host != "lldap.rnmkcy.eu") {
return 444;
}
location / {
proxy_pass http://192.168.0.218:17170;
}
}
Vérifier et recharger nginx: sudo nginx -t && sudo systemctl reload nginx
Accès par le lien https://lldap.rnmkcy.eu/
Authelia SSO+Nginx
Authelia pour gérer les autorisations d’accès à des applications en s’appuyant sur l’annuaire lldap
Modifier authentication_backend dans le fichier de configuration authelia pour communiquer avec le serveur lldap
authentication_backend:
# Password reset through authelia works normally.
password_reset:
disable: false
# How often authelia should check if there is an user update in LDAP
refresh_interval: 1m
ldap:
implementation: custom
# Pattern is ldap://HOSTNAME-OR-IP:PORT
# Port de saut normal est 389, standard dans LLDAP est 3890
url: ldap://192.168.0.218:3890
# The dial timeout for LDAP.
timeout: 5s
# Utilisez StartTLS avec la connexion LDAP, TLS est non supporté maintenant
start_tls: false
#tls:
# skip_verify: false
# minimum_version: TLS1.2
# Set base dn, like dc=google,dc.com
base_dn: dc=rnmkcy,dc=eu
username_attribute: uid
# Vous devez configurer cela à ou=people, parce que tous les utilisateurs sont stockés dans cette ou!
additional_users_dn: ou=people
# Pour permettre la connexion avec le nom d'utilisateur et l'email
# on peut utiliser un filtre comme
# (&(|({username_attribute}={input})({mail_attribute}={input}))(objectClass=person))
users_filter: "(&({username_attribute}={input})(objectClass=person))"
# Définir ceci à ou=groups, parce que tous les groupes sont stockés dans cette ou
additional_groups_dn: ou=groups
# Les groupes ne sont pas affichés dans l'interface utilisateur, mais ce filtre fonctionne.
groups_filter: "(member={dn})"
# L'attribut tenant le nom du groupe.
group_name_attribute: cn
# Attribut email
mail_attribute: mail
# L'attribut tenant le nom d'affichage de l'utilisateur.
# Cela sera utilisé pour accueillir un utilisateur authentifié.
display_name_attribute: displayName
# Le nom d'utilisateur et mot de passe de l'utilisateur admin.
# "admin" devrait être le nom d'utilisateur administrateur que vous définissez dans la configuration LLDAP
user: uid=admin,ou=people,dc=rnmkcy,dc=eu
# Le mot de passe peut également être défini en utilisant un secret:
# https://www.authelia.com/docs/configuration/secrets.html
password: '<Mot de passe administrateur ldap>'
Le fichier complet de configuration authelia /etc/authelia/configuration.yml
Etendre Réduire configuration.yml
Les fichiers de configuration nginx pour authelia
Etendre Réduire authelia-authrequest.conf
Etendre Réduire authelia-location.conf
Etendre Réduire proxy.conf
Le sso est en place , il faut modifier les fichiers de configuration nginx des applications concernées
Protection des applications
- Ne pas oublier de recharger nginx après chaque modification des fichiers de configuration :
sudo systemctl reload nginx
- Ajouter le site dans le fichier de configuration
/etc/authelia/configuration.yml
entre domain et policy: one_factor de la balise acces_control entre - Relancer le service authelia :
sudo systemctl restart authelia
Etendre Réduire calibre.rnmkcy.eu.conf
Etendre Réduire cockpit.rnmkcy.eu.conf
Erreur au reboot
Le service authelia est en erreur car le serveur virtuel LLDAP n’est pas encore opérationnel !
On va ajouter un délai de 90 secondes au lancement du service authelia /lib/systemd/system/authelia.service
Il faut ajouter la ligne suivante après la balise [Service]
ExecStartPre=/bin/sleep 90
Procédure pour ajout utilisateur
Créer un utilisateur avec son email dans LLDAP
Ajouter utilisateur au serveur de messagerie
Rafraichir Nextcloud
Modifier authelia.service
A chaque reboot une erreur de lancement du service authelia.
level=error msg="Error occurred running a startup check" error="dial failed with error: LDAP Result Code 200 \"Network Error\": dial tcp 192.168.0.218:3890: connect: no route to host"
Pour éviter l’erreur il faut retarder le lancement du service authelia avec un timer
/lib/systemd/system/authelia.timer
[Unit]
Description="Run authelia after 1 minutes of boot"
[Timer]
OnBootSec=1min
[Install]
WantedBy=default.target
Désactiver le service authelia et activer le timer
sudo systemctl disable authelia.service
sudo systemctl enable authelia.timer