Files
live-campus-mcs-p-2027.2/Semaine_03/Esteban-Gauvain-Floren.md
2025-12-19 14:14:02 +01:00

20 KiB

Esteban, Floren, Gauvain

Projet 1

Génèse

1. Préparation du projet

  • Floren : l'architecte
  • Esteban : le soutien moral
  • Gauvain : la petite secrétaire

Notes

Il se peut que les lignes de code affichées dans les captures d'écran ne soient pas 100% conformes avec les blocs de code tapés au-dessus. C'est normal : nous expérimentons au fur et à mesure, et quand la capture d'écran est faite, il se peut que nous ne nous apercevions d'une coquille ou d'un oubli que bien plus tard. Et qu'un paquet installé (genre NMAP) soit désinstallé plus tard, faute d'usage. Règle du "moins de paquet = moins de surface d'attaque".

Le résultat est normalement affiché en capture d'écran, mais en cas de discordance, les blocs de code commentés font foi.

2. Définir l'architecture

A. Les Machines Virtuelles

ROCKY_LINUX - Installation

  • Rocky Linux sur Hyperviseur
  • Deux connexions réseau : en Accès par Pont ou Réseau NAT
  • Pas de GUI

Nous avons décidé d'utiliser :

  • 3 VMs Rocky Linux 9.7 (version Boot), les infos sur la version 10 faisant état d'une version peu stabilisée
  • sur VirtualBox (par simplicité)
  • En réseau NAT (pour avoir une plage réseau vraiment isolée)
  • Pas de GUI
sudo dnf update -y
sudo dnf install -y firewalld nano curl wget

sudo systemctl enable --now firewalld

Synchronisation des serveurs avec chrony : Sur MON/MR

nano /etc/chrony.conf

  allow 10.0.10.0/24

Sur OSD1

nano /etc/chrony.conf
  
  server 10.0.10.11 iburst
  peer 10.0.10.13 iburst

Sur OSD2

nano /etc/chrony.conf
  
  server 10.0.10.11 iburst
  peer 10.0.10.12 iburst

Et on change les noms des machines :

sudo hostnamectl set-hostname ['monmgr', 'osd1', 'osd2']

B. Configuration du bonding

REDHAT - Configure Network Bonding

Bonding in Rocky Linux

  • Mode active-backup
  • Bridge dédié au bond active-backup dans le Ceph

Ajouter le bond :

sudo nmcli connection add type bond con-name bond0 ifname bond0 mode active-backup

sudo nmcli connection add type ethernet ifname enp0s3 master bond0
sudo nmcli connection add type ethernet ifname enp0s8 master bond0

sudo nmcli connection modify bond0 \
ipv4.method manual \
ipv4.addresses 10.0.10.[11,12,13]/24 \
ipv4.gateway 10.0.10.1 \
ipv4.dns 1.1.1.1

sudo nmcli connection up bond0

Vérifications :

cat /proc/net/bonding/bond0

sudo nmcli device
sudo nmcli connection

Vérification de la redondance en débranchant une NIC dans la VM :

C. Réglages du pare-feu

REDHAT - Using and configurind firewalld

sudo firewall-cmd --permanent --new-zone=ceph-mcs2025

# Pour vérifier
sudo firewall-cmd --reload
sudo firewall-cmd --get-zones

sudo firewall-cmd --permanent --zone=ceph-mcs2025 --add-interface=bond0
sudo firewall-cmd --permanent --zone=ceph-mcs2025 --add-service=ssh

sudo firewall-cmd --permanent --zone=ceph-mcs2025 --add-port=80/tcp
sudo firewall-cmd --permanent --zone=ceph-mcs2025 --add-port=443/tcp
sudo firewall-cmd --permanent --zone=ceph-mcs2025 --add-port=3300-3303/tcp
sudo firewall-cmd --permanent --zone=ceph-mcs2025 --add-port=6789/tcp
sudo firewall-cmd --permanent --zone=ceph-mcs2025 --add-port=6800-7300/tcp
sudo firewall-cmd --permanent --zone=ceph-mcs2025 --add-port=7480/tcp
sudo firewall-cmd --permanent --zone=ceph-mcs2025 --add-port=8443/tcp

sudo firewall-cmd --permanent --zone=ceph-mcs2025 --add-port=123/udp
sudo firewall-cmd --permanent --zone=ceph-mcs2025 --add-port=6800-7300/udp

sudo firewall-cmd --reload

Et on vérifie :

sudo firewall-cmd --info-zone=ceph-mcs2025

3. Installer et configurer Ceph

A. Choix du Ceph

On a décidé d'utiliser RGW pour diverses raisons :

  1. c'est celui que nous connaissons le moins (raison éducative)
  2. c'est un système basé sur une technologie qui devient un standard nuagique (avec AWS S3 repris même par les concurrents)
  3. parce que pourquoi pas

B. Préparation des noeuds

CEPH - cephadm | CEPH - Host Management

  • Installer cephadm version squid (les deux dernières, latest et tentacles étant non stabilisées)
  • Déployer le moniteur MON et gestionnaire MGR sur le premier noeud, ajout des deux autres comme OSD

Sur les trois noeuds :

sudo dnf install -y centos-release-ceph-squid
sudo dnf install -y cephadm

# Pour les dépendances liées au déploiement de configurations
sudo dnf install -y python3-yaml python3-jinja2

Sur les deux noeuds OSD :

sudo cephadm add-repo --release squid
sudo cephadm install ceph-common

Bootstrap du cluster sur le noeud principal :

sudo cephadm bootstrap \
--mon-ip 10.0.10.11 \
--allow-fqdn-hostname \
--initial-dashboard-user admin \
--initial-dashboard-password 'Dashboard123!'

  # Copie de la clef publique du MON/MGR sur les OSD
ssh-copy-id -f -i /etc/ceph/ceph.pub root@10.0.10.12
ssh-copy-id -f -i /etc/ceph/ceph.pub root@10.0.10.13

  # Vérification
sudo ceph orch host ls

Copie de la configuration du MON/MGR sur les OSD :

scp /etc/ceph/ceph.conf root@10.0.10.12:/etc/ceph/
scp /etc/ceph/ceph.conf root@10.0.10.13:/etc/ceph/
scp /etc/ceph/ceph.client.admin.keyring root@10.0.10.12:/etc/ceph/
scp /etc/ceph/ceph.client.admin.keyring root@10.0.10.13:/etc/ceph/
ssh root@10.0.10.12 "chmod 600 /etc/ceph/*.keyring && chmod 644 /etc/ceph/ceph.conf"
ssh root@10.0.10.13 "chmod 600 /etc/ceph/*.keyring && chmod 644 /etc/ceph/ceph.conf"

Ajout des hôtes dans le cluster Ceph :

sudo ceph orch host add osd1 10.0.10.12
sudo ceph orch host add osd2 10.0.10.13

Ajout des OSD dans le cluster :

sudo ceph orch device ls

# Si on veut tout asservir sans distinction
sudo ceph orch apply osd --all-available-devices

# Si on veut asservir un panel précis de volumes
sudo ceph orch daemon add osd monmgr:/dev/sdb
sudo ceph orch daemon add osd osd1:/dev/sdb
sudo ceph orch daemon add osd osd2:/dev/sdb

C. Déployer le service RGW

https://docs.ceph.com/en/squid/radosgw/ https://docs.ceph.com/en/squid/radosgw/s3/

  • Créer un daemon RGW avec ceph orch apply rgw
  • Configurer le domaine S3, clefs d'accès et politiques des seaux

Déploiement du service RGW :

sudo ceph orch apply rgw rgw-mcs \
--realm=realm-mcs \
--zone=zone-mcs \
--placement="2 osd1 osd2"

# Ou en version "triviale"
sudo ceph orch apply rgw rgw-mcs

Vérifier l'intégrité du cluster RGW :

sudo ceph orch ps --daemon_type rgw

Créer un admin S3 :

sudo dnf install -y epel-release
sudo dnf install -y ceph-radosgw

sudo radosgw-admin user create --uid=egf2025 --display-name="EstGauFlo 2025"

Modifier le ceph.conf :

sudo nano /etc/ceph/ceph.conf
  [client.radosgw.gateway]
    host = [monmgr, osd1, osd2]
    keyring = /etc/ceph/ceph.client.radosgw.gateway.keyring
    rgw_frontends = "beast port=7480"
  
sudo systemctl start ceph-radosgw@rgw.gateway

sudo nano /etc/ceph/ceph.client.radosgw.keyring
  [client.admin]
    key = *******
    caps mds = "allow *"
    caps mgr = "allow *"
    caps mon = "allow *"
    caps osd = "allow *"

Vérifier la santé du cluster Ceph :

sudo ceph -s
sudo ceph health detail

Configurer l'accès S3 :

sudo dnf install -y awscli

aws configure set aws_access_key_id XXOKHTFX8OUAW4YEFBVT
aws configure set aws_secret_access_key b3Cn2vYARkbnGWlPVdCg16ZYUZ3IczXC4SvtBBMy
aws s3 ls --endpoint-url http://10.0.10.11:7480
Notes sur le précédent bloc

Ca ne sert à rien de copier le couple ID-Clef, ce sont des utilisateurs locaux, mais ce sont bien des vraies. On sait ce qu'on fait présentement, mais il est évident qu'on ne fait jamais ça en production.

La solution de niveau 1 c'est d'utiliser une variable d'environnement temporaire (AWS_ID="XXOKHTFX8OUAW4YEFBVT" et ensuite appeler avec un $AWS_ID dans le shell pour une expiration à déconnexion), et la solution de niveau 2 serait de déployer un serveur Consul/Vault sur le réseau pour gérer des secrets.

Vérifications :

Et ensuite faire un test de téléversement dans un seau S3 avec la documentation officielle

aws s3 cp ./fichier s3://bucket/ --endpoint-url http://10.0.10.11:7480

D. (Bonus) Vérifier sur le Dashboard

Nous avons rajouté dans le réseau NAT (mais pas le Ceph) une machine tierce avec interface graphique, Rocky Linux ou Debian pour se connecter sur le dashboard :

4. Cisco Packet Tracer

A. Créer la topologie en GUI

  • VLAN unique pour les 3
  • Switchs Layer 2 (un ou plusieurs)

B. Créer la topologie en CLI

Création des LAGs :

enable
  conf t
    interface range fa0/[1-7]-[3-9]
      channel-group [1,2,3] mode active
      no shutdown
      end
write memory

Créer les VLAN :

enable
  conf t
    vlan 10
      name CephCluster
      exit
    interface fa0/24
      switchport mode access
      switchport access vlan 10
      no shutdown
      exit
    interface port-channel [1,2,3]
      switchport mode trunk
      switchport trunk native vlan 1
      switchport trunk allowed vlan 1,10
      no shutdown
      end
write memory

Créer la passerelle HSRP sur les routeurs :

enable
  conf t
    ip routing
    interface Gig0/0/1.10
      encapsulation dot1q 10
      ip address 10.0.10.[2,3] 255.255.255.0
      standby 1 ip 10.0.10.1
      standby 1 priority [100, 150]
      standby 1 preempt
      no shutdown
      end
show standby
write memory

Et on vérifie par un PING d'un OSD à un autre :

Et on teste avec un routeur éteint :

C. Sécurisation

https://www.cisco.com/c/deleteme/sec/b_1710_sec_9300_cg/port_security.html

  • Limiter le MAC-address learning
  • Activer port-security en mettant 1 dresse MAC maximum
  • Configurer les ports d'administration (console/VTY) avec authentification locale
  • Activer le SSH sur les switchs avec restriction aux adresses du VLAN
  • Autoriser le trafic Ceph, IMCP et SNMP uniquement depuis les adresses de gestion

Sécurité des ports :

enable
  conf t
    interface range fa0/#-#       // ports non utilisés
      shutdown
      exit
    interface range fa0/#-#       // ports en usage
      switchport port-security
      switchport port-security maximum 1
      switchport port-security violation restrict
      switchport port-security mac-address sticky

Activer le SSH :

ip domain-name mcs2025.local
username admin secret mcs2025
crypto key generate rsa general-keys modulus 2048
ip ssh version 2

Protection par mot de passe :

enable
  conf t
    enable password encryption
    line console 0
      password CisCanne
      login local
    line vty 0 4
      login local
      transport input ssh
    enable secret Conf-Iture
    end
write memory

ACL pour le trafic Ceph :

ip access-list extended CEPH-ALLOW
  permit tcp any any eq 80
  permit tcp any any eq 443
  permit tcp any any eq 6789
  permit tcp any any eq 7480
  permit tcp any any eq 8443
  permit tcp any any range 3300 3303
  permit tcp any any range 6800 7300
  permit udp any any range 6800 7300
  permit icmp any any
  permit udp any any eq 161
  deny ip any any

Liens utiles

Bibliographie

Ceph

Tutoriel Scaleway d'un cluster Ceph

Tutoriel d'installer Ceph sur Rocky Linux

Configuration RGW sur RedHat

Cephadm pour RGW

Déployer Ceph sur Rocky Linux 9

Pare-feu Rocky

Mettre en place FirewallD

Ports pour cluster Ceph

FirewallD par Stéphane Robert

Détails sur la configuration

"Beast" pour RadosGW

Ressources

Rocky Linux