====== Serveur Hentoù chez OVH ======
Chemin de mise en place d'un serveur chez OVH pour 4 ou 5 petites structures.
Cela fait suite aux ateliers et pad en rapport:
* https://semestriel.ramapad.org/p/chatoyant-a349 {{ :ressources:chatoyant-a349.txt |}}
* https://semestriel.framapad.org/p/chatoyant-couches {{ :ressources:chatoyant-couches.txt |}}
* https://semestriel.framapad.org/p/chatoyantes {{ :ressources:chatoyantes.txt |}}
* https://semestriel.framapad.org/p/chatoyant-hentou {{ :ressources:chatoyant-hentou.txt |}}
Je préfère pour le moment donner la démarche petit à petit plutôt qu'un gros script pour être plus pédagogique...
Pour commencer des tests de mise en place nous avons louer une solution So You Start chez OVH: un serveur avec 2 SSD raid 500Go, 1 Sata 1To, 16Go RAM, une IP sur 100Mb/s et un bon CPU.\\
Cette solution donne la possibilité d'installer un système sur la machine pour la mise en route, on reçoit le mot de passe root avec l'ip. Il n'y pas de console, juste l'entrée donnée par le système installé.\\
On y installe l'hyperviseur proxmox 8. (pas de détaille pour l'instant)
===== Partie Réseaux =====
* Tout rentre par une IP fixe avec l'interface physique ino0 déjà renseignée à l'initialisation de PVE 8.
* une interface réseau virtuelle vmbr0 à aussi été crée automatiquement dans le PVE, c'est elle qu'on doit utiliser
* les DNS sont aussi déjà renseignés
- Nous ferons une première zone: le reseau vmbr1 10.0.0.1/32 connectée à vmbr0 vers un firewall IPFire (qui semble le plus simple a mettre en place), reseau 10.0.0.0/24 (pourrait etre 10.0.0.0/29 pour ne servir que 6 machines (tailscale,autre?)
- c'est la **zone rouge** de IPFire (entrée Internet)
- une 2me zone avec vmbr2 192.168.9.1/32 derrière le firewall pour y connecter toutes les machines
- **zone verte**
**le schéma des réseaux**
Machine OVH
.------------. .----------------------------------------------------.
|[1] | | .--Proxmox--------------------------------------. |
| | | | | |
| Net OVH +------------>+-+ino0+- vmbr0 xx.xx.xx.xx | |
| | | | | iptable http;https;ssh | |
| | | | | #--------------# | |
| |IP V4/V6 | | | |[IPFire] | | |
| |xx.xx.xx.xx | | +-- vmbr1 10.0.0.1---+ 10.0.0.2 | | |
| | | | | | filtres | | |
'------------' | | | | 80;443;22~ | | |
| | '-- vmbr2------+-----+ 192.168.9.254| | |
| | 192.168.9.1 | #--------------# | |
| | | #--------------# | |
| | | |[2] LXC | | |
| | +-+ Reverseproxy | | |
| | | | 192.168.9.2 | | |
| | | #--------------# | |
| | | #-------# | |
| | | |[2] | | |
| | +---+ VM xx | | |
| | | #-------# | |
| | | #--------# | |
| | | |[2] | | |
| | +-----+ LXC xx | | |
| | #--------# | |
| .-----------------------------------------------. |
'----------------------------------------------------'
[1]: {"fill":"#ff0000","a2s:type":"cloud","a2s:delref":true}
[IPFire]: {"fill":"#ff0000"}
[2]: {"fill":"#008000","a2s:delref":true}
Les accès se feront ensuite par des tunnels ssh, on pourra utiliser la mise en place de VPN mais la technique des tunnel ssh est déjà en place sans paramétrage ni applications supplémentaire et très fonctionnelle.
==== fichier /etc/network/interfaces ====
Cela nous fait écrire le fichier /etc/network/interfaces avec un accès console PVE
auto lo
iface lo inet loopback
iface eno1 inet manual
auto vmbr0
iface vmbr0 inet static
address 37.187.XX.XX/24
gateway 37.187.XX.254
bridge-ports eno1
bridge-stp off
bridge-fd 0
hwaddress 00:25:90:AC:8F:6E
auto vmbr1
iface vmbr1 inet static
address 10.0.0.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
#WAN
auto vmbr2
iface vmbr2 inet static
address 192.168.9.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
#LAN
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/24' -o vmbr0 -j SNAT --to-source 37.187.XX.XX
post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/24' -o vmbr0 -j SNAT --to-source 37.187.XX.XX
post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1
#
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2:80
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to-destination 10.0.0.2:443
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2:80
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 443 -j DNAT --to-destination 10.0.0.2:443
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 7422 -j DNAT --to-destination 10.0.0.2:7422
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 7422 -j DNAT --to-destination 10.0.0.2:7422
Ce qui affiche sur notre PVE : {{:ressources:capture_d_ecran_du_2024-01-18_14-46-06.png?400|}}
En gros pour ces règles iptables: tout ce qui entre/sort de http;https;ssh;pve_ui passe par vmbr1 - IPFire 10.0.0.2\\
quand tout fonctionnera on pourra fermer le port 8006 pour l'exterieure puisqu'il sera délivré par le firewall, idem ssh qu'on passe de 22 a 7422
script pour ecrire tout ça [[hentou_iptable]]
==== DNS nom de domaine ====
Il faut aussi s'occuper de déclarer un domaine qui va facilité l'accès... nous avons acheté hentou.ovh (pas cher) et fait pointer ce domaine sur notre ip 37.187.XX.XX\\
37.187.XX.XX:8006 donne accès au PVE en attendant de sécuriser le réseau.\\
On ne s'occupera pour le moment que de l'IP V4.
===== Première manip post-installation ====
en ouvrant une console dans l'interface de Proxmox directement sur notre node hentou:\\
Mises à jour des dépots
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/post-pve-install.sh)"
===== Tailscale LXC =====
Installation d'un filet de protection contre les fausses manip nous coupant de notre PVE ...
faire une LXC ubuntu, en prenant le bridge vmbr1, param mini par défaut ok pour le reste, prendre un nom correcte pour s'y retrouver genre hentou-tailscale pour cette LXC 666\\
Dans la console du node hentou:
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/ubuntu.sh)"
y installer tailscale, sur la même console :
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/misc/add-tailscale-lxc.sh)"
choisir le bon contenaire LXC ex 666 pour nous, relancer la lxc \\
paramètres: hentoutailscale 10.0.0.3/24 gateway 10.0.0.1 , template sur SD4T, container sur local storage (ssd)\\
dans ce contenair ouvrir une console et faire
tailscale up
pour obtenir la page d'autentification tailscale et prendre en compte le réseau, il faut s'inscrire sur https://tailscale
on reboot
pour mon pc fedora/gnome j'ai installé ensuite https://extensions.gnome.org/extension/6139/tailscale-qs/
avec ensuite sudo tailscale set --operator=$USER pour valider le tout
https://login.tailscale.com/admin/machines donne la liste des machines de mon réseau
on pourra utiliser ce contenair LXC pour les différents tunnels ssh qu'on établira plus tard avec les autres composant.
==== tailscale et les accès aux sous-réseaux ====
de https://tailscale.com/kb/1019/subnets pour acceder a notre reseau et a ses machine 192.168.9.0/24
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
sudo tailscale up --advertise-routes=10.0.0.0/24,192.168.9.0/24
Qui permet dans la page de gestion https://login.tailscale.com/admin/machines dans la partie .../edit route setting de valider ces accès.\\
On doit voir dans le manager notre LXC "Hentoutailscale" avec une ip qu'on peut ping (**si on a activer le plugin tailscale sur sa machine**)
on vérifie en faisant par exemple un tunnel vers PVE apres avoir lancé tailscale :
ssh root@hentoutailsscale -L 7806:192.168.9.1:8006
Donne https://localhost:7806 l'interface du PVE
==== backup ====
Faire une sauvegarde de cette machine et la récupérer pour la re-déposer sur une nouvelle installation...
creating vzdump archive '/mnt/SD4T/dump/vzdump-lxc-666-2024_01_18-14_35_47.tar.zst'
===== Deuxième manip post-installation ====
==== Création d'utilisateur ====
Pour donner accès à l'administration ciblée, certaine VM/LXC par ex
apt install sudo
# création de l'utilisateur
useradd -m USERNAME
# mot de passe
passwd USERNAME
# ajout dans le groupe sudo
gpasswd -a USERNAME sudo
# ssh
mkdir /home/USERNAME/.ssh
touch /home/USERNAME/.ssh/authorized_keys
chmod 600 /home/USERNAME/.ssh/authorized_keys
chown USERNAME:USERNAME /home/USERNAME/.ssh/authorized_keys
# Placer ensuite le contenu de vos clés publiques SSH dans ce fichier
# ou avec: sur mon pc linux
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub user@ip
ssh 'user@ip ' # fonctionne
==== Restriction de l'accès proxmox ====
pour n'accéder qu'a travers le réseau local , ssh ou tailscale:\\
Création du fichier de configuration pour restreindre l'accès à l'interface Web de Proxmox, on autorise seulement vmbr2 192.168.9.xx ou une entrée locale 127.0.0.1 . Mais on garde le port 8006\\
vi /etc/default/pveproxy
Insérer le contenu suivant:
ALLOW_FROM="127.0.0.1,192.168.9.0/24"
DENY_FROM="all"
POLICY="allow"
Relancer le service\\
sudo service pveproxy restart
==== No root login ====
On change le port du ssh vers un port non standard, 7422 pour nous.\\
On fera le transfert de port dans IPFire pour passer.\\
Faire la modification du fichier /etc/ssh/sshd_config , vi ou nano pour invalider l'accès root et ouvrir le ssh sur un autre port que le 22, pour nous 7422
vi /etc/ssh/sshd_config # vi ou autre éditeur nano ?
# Modifier ensuite les lignes suivantes du fichier
Port 7422
PermitRootLogin no
Relancer ensuite le service SSH qui sera maintenant accessible avec notre utilisateur : USERNAME
service ssh restart
ou mieux un reboot de Proxmox complet pour voir si tout est bon... penser qu'au cas ou on a plus le ssh en directe sur ce nouveau port:...
ssh -p7422 USERNAMEt@hentou.ovh -L 8006:127.0.0.1:8006
cad un ssh port 7422 passe à travers vmbr0/vmbr1 sur IPFire (regle iptable du Proxmox) qui fait un tunnel vers le Proxmox (regle de transfert de port de ce firewall)
ou avec tailscale
ssh USERNAME@hentoutailsscale -L 8006:192.168.9.1:8006
cad ssh a travers tailscale vers la machine hentoutailscale qui fait le tunnel sur l'interface web du Proxmox
https://localhost:8006 # pour firefox et l'accès au PVE
===== Firewall IPFire =====
Tout doit entrer sur le firewall...\\
Après tests, IPFire semble le plus simple à mettre en place... suivre ses documention d'install
* https://www.zenarmor.com/docs/network-security-tutorials/ipfire-installation
Pour l’installation:
Le réseau GREEN/Vert est la vmbr2 ip=192.168.9.254/24
Le réseau RED/rouge est la vmbr1 ip=10.0.0.2/24 gateway 10.0.0.1
On y accède ensuite avec un tunnel ssh: (root ou l'utilisateur admin principal, sur le port 444 d'IPFIre)
ssh root@37.187.XX.XX -L 8445:192.168.9.254:444
https://localhost:8445 # firefox
On y fera la création de règles de transfert de ports:
* http:80 et https:443 vers le LXC 192.168.9.2: reverse-proxy manager
* 7422 vers le ssh 7422 de Proxmox
==== backup ====
Faire une sauvegarde de cette machine et la récupérer pour la re-déposer sur une nouvelle installation…
===== ReverseProxyManager =====
Le reverse-proxy permet la déclaration des certificats Let'sEncrypt, des noms de domaines de nos machines;services (et future) pour ventiler les renvois http;https sur le réseau interne (192.168.9.0/24 vmbr2)
Doc: https://nginxproxymanager.com/guide/
Installation de https://tteck.github.io/Proxmox/, on installe une LXC avec Nginx Proxy Manager\\
Dans une console sur le node hentou
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/nginxproxymanager.sh)"
Choisir vmbr2, une ip fixe 192.168.9.2/24 gateway 192.168.9.254
le premier accès sera sur 192.168.9.2:81 \\
Email: admin@example.com\\
Password: changeme
ssh -p7422 root@hentou.ovh -L 8081:192.168.9.2:81
ou avec tailscale
ssh root@hentoutailsscale -L 8081:192.168.9.2:81
https://localhost:8081 # pour firefox
==== petit ménage ====
oublié par le paramétrage de la LXC? pour ma version en tout cas faire:
yarn cache clean
pkg clean
nvm cache clear
J'ai eu la surprise de voir le disque alloué a la LXC revereproxymanager fondre …les log dans /data/logs prenant tout l'espace.. et provocant des bugs dans toutes les transactions genre NS_ERROR_NET_PARTIAL_TRANSFERT dans les navigateurs, ceux-ci ne recevant que des bouts de page.
La solution pour faire et garder de la place sur ce disque LXC est
- de vider ce répertoire /data/logs
- modifier /etc/logrotate.d/nginx-proxy-manager en commentant “su npm npm” et en changeant le weekly par “daily” et “rotate 2” (il est appelé tous les 2 jours…)
- de supprimer aussi le journal system /var/log/journal et de le limiter en parametrant /etc/systemd/journal.conf avec “SystemMaxUse=1M” et “SystemMaxFileSize=1M”
- de modifier les fichier nginx.conf pour changer les log de “warm” en “alert”
==== Ajout d'un utilisateur sudo/admin ====
pour ne pas avoir d'utilisateur root
adduser USERNAME # valider et donner un pass (qu'on sauvegarde!!) (penser keepass)
usermod -aG sudo USERNAME
ensuite les access à l'interface web de la machine reverseproxymanager seront
ssh -p7422 USERNAME@hentou.ovh -L 8081:192.168.9.2:81
ou avec tailscale
ssh USERNAME@hentoutailsscale -L 8081:192.168.9.2:81
https://localhost:8081 # pour firefox
==== Paramétrage ====
- création des certificats hentou.ovh, ynh1.hentou.ovh wiki1.hentou.ovh etc
- juste en chalenge DNS, pas besoin d'autre chose
- création des hôtes
- ynh1.hentou.ovh pour pointer vers 192.168.9.201
- wiki1.hentou.ovh pointe vers 192.168.9.201 (géré par YNH1)
- etc
==== backup ====
Faire une sauvegarde de cette machine et la récupérer pour la re-déposer sur une nouvelle installation…
===== Yunohost du premier groupe =====
Déclaration d'un premier groupe d'administration de service, d'administrateur⋅ice\\
Ouverture d'un wiki sur une url en sous domaine, ex wiki1.hentou.ovh
En résumé du coté des noms de domaine
Machine OVH
.------------. .----------------------------------------------------.
|[1] | | .--Proxmox--------------------------------------. |
| |*.hentou.ovh | | #-----------------------------# | |
| | | | |[1] ipfire.hentou.ovh | | |
| Net OVH +------------>+-+----+--> FIREWALL (192.168.9.254) | | |
| | | | | Passerelle | | |
| | | | #-----+-----------------------# | |
| | | | | | |
'------------' | | #-----+---------# | |
| | | Reverseproxy | | |
| | | (192.168.9.2) | | |
| | #---------------# | |
| | | | |
| | | #--------------------# | |
| | | |[2] ynh1.hentou.ovh | | |
| | +-+ 192.168.9.201 #-----------------. | |
| | | | wiki1.hentou.ovh | | |
| | | | truc1.hentou.ovh | | |
| | | | applixxgroupe1.domain.xx | | |
| | | | autreapli.autredomain.xx | | |
| | | #--------------------------------------' | |
| | | #--------------------# | |
| | | |[2] ynh2.hentou.ovh | | |
| | +-+ 192.168.9.202 #-----------------. | |
| | | | wiki2.hentou.ovh | | |
| | | | truc2.hentou.ovh | | |
| | | | applixxgroupe2.domain.xx | | |
| | | | autreapli.autredomain.xx | | |
| | I #--------------------------------------' | |
| .-----------------------------------------------. |
'----------------------------------------------------'
[1]: {"fill":"#ff0000","a2s:type":"cloud","a2s:delref":true}
[2]: {"fill":"#008000"}
On installe une LXC, console sur pve hentou:
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/yunohost.sh)"
Les paramètres par défaut, 2 VCPU,RAM 2go, DD 20go...\\
numérotons la 201 (202,20x,... pour les YNH suivant)\\
ynh1.hentou.ovh, sera l'accès général, peut être prévoir un⋅e admin par groupe?
Dans chaque YNH on installera les applications sans se soucier des certificats puisque gérés par ReverseProxyManager.\\
**On ne chargera pas non plus YNH de mettre à jour le DNS *.hentou.ovh ! ** mais seulement les domaines du groupe
Chaque YNH, groupe, se chargera de la gestion de ses propres utilisateurs⋅trices, des accès aux différents services.
Si il est besoin de port particulier,il faudra les ajouter aux regles du Proxmox et à IPFire.\\
Par exemple prévoir le routage des messageries/mail MX et autres
==== backup ====
Faire une sauvegarde de cette machine et la récupérer pour la re-déposer sur une nouvelle installation…
======= Récapitulatif des accès =====
Interface Proxmox:(192.168.9.1)
ssh -p7422 USERNAME@hentou.ovh -L 8006:localhost:8006
ou
ssh USERNAME@hentoutailsscale -L 8006:192.168.9.1:8006
https://localhost:8006 # pour firefox
Interface IPFire:(192.168.9.254)
ssh -p7422 USERNAME@hentou.ovh -L 7444:192.168.9.254:444
ou
ssh USERNAME@hentoutailsscale -L 7444:192.168.9.254:444
https://localhost:7444 # pour firefox
Interface ReverseProxyManager:(192.168.9.2)
ssh -p7422 USERNAME@hentou.ovh -L 8081:192.168.9.2:81
ou
ssh USERNAME@hentoutailsscale -L 8081:192.168.9.2:81
https://localhost:8081 # pour firefox
ssh Yunohost1: (192.168.9.201)
ssh -p7422 USERNAME@hentou.ovh -L 7022:192.168.9.201:22
o
ssh USERNAME@hentoutailsscale -L 7022:192.168.9.201:22
https://localhost:7022 # pour firefox
sinon de toute façon
https://ynh1.hentou.ovh # pour accès au dashboard
======= Ensuite =====
* récupérer les backup IPFire, reverseproxymanager, ynh-1, ynh-xx pour d'éventuelle remise en route plus rapide
* ils sont dans /mnt/SD4T/dump/
* utiliser Garage sur un serveur pour offrir de l'espace disque de type S3 pour les backup et en offrir aussi