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 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
- 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
- Zone personnalisée :
ceph-mcs2025 - Associée à l'interface du bond0
- Autorisation des ports nécessaires à CEPH et associés
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 :
- c'est celui que nous connaissons le moins (raison éducative)
- c'est un système basé sur une technologie qui devient un standard nuagique (avec AWS S3 repris même par les concurrents)
- parce que pourquoi pas
B. Préparation des noeuds
CEPH - cephadm | CEPH - Host Management
- Installer
cephadmversionsquid(les deux dernières,latestettentaclesé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
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
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
Déployer Ceph sur Rocky Linux 9