Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)
Protection réseau du serveur Proxmox Beotos3
Protection réseau du serveur Proxmox Beotos3
Objectif
Le serveur physique Beotos3 est directement connecté à Internet et possède une adresse IPv4 publique.
Il héberge notamment des services Proxmox et fournit un stockage NFS utilisé par Saturne3.
Un contrôle du serveur a montré que plusieurs services système, notamment RPC/rpcbind, étaient directement accessibles depuis Internet et faisaient l'objet de très nombreuses connexions provenant d'adresses IP publiques inconnues.
L'objectif de cette configuration est donc :
- de conserver l'adresse IP publique de Beotos3 ;
- de conserver la possibilité d'utiliser Beotos3 comme serveur de secours d'Eole3 ;
- d'autoriser uniquement les flux réellement nécessaires ;
- de bloquer les services RPC/NFS inutiles depuis Internet ;
- de conserver les accès d'administration ;
- de conserver la supervision Centreon ;
- de conserver le montage NFS utilisé par Saturne3.
Configuration réseau
Beotos3 possède deux interfaces réseau principales.
Réseau public
Interface physique : enp9s0f0np0 Bridge Proxmox : vmbr0 IPv4 publique : 51.210.192.214/32 Passerelle : 100.64.0.1
Cette interface doit être conservée.
Elle permet l'administration de Beotos3 depuis Internet et sera également nécessaire en cas de bascule des services d'Eole3 vers Beotos3.
Réseau privé
Interface physique : enp9s0f1np1 Bridge Proxmox : vmbr1 IPv4 privée : 192.168.123.104/24
Le réseau privé utilisé entre les serveurs est :
192.168.123.0/24
Eole3 utilise notamment :
192.168.123.202
Pare-feu Proxmox
Beotos3 utilise le pare-feu historique Proxmox :
pve-firewall
Le moteur nftables « preview » de Proxmox VE 9 n'est pas utilisé.
Dans l'interface Proxmox :
Datacenter -> Firewall -> Options -> Firewall = Yes
et :
beotos3 -> Firewall -> Options -> Firewall = Yes -> nftables (preview) = No
La politique entrante est :
Input Policy : DROP
La politique sortante reste :
Output Policy : ACCEPT
Ainsi, Beotos3 peut continuer à initier librement ses sauvegardes, synchronisations, mises à jour, connexions vers Eole3, PBS4, etc.
En revanche, une connexion entrante doit être explicitement autorisée.
Règles entrantes autorisées
Les règles spécifiques du serveur sont enregistrées par Proxmox dans :
/etc/pve/nodes/beotos3/host.fw
Les autorisations mises en place sont les suivantes.
| Source | Protocole | Port | Utilisation |
|---|---|---|---|
| 109.190.129.96 | TCP | 22 | Administration SSH AJLSM |
| 109.190.129.96 | TCP | 8006 | Interface Web Proxmox AJLSM |
| 192.168.123.0/24 | TCP | 22 | SSH depuis le réseau privé |
| 192.168.123.0/24 | TCP | 8006 | Interface Proxmox depuis le réseau privé |
| 192.168.123.0/24 | TCP | 3128 | SPICE Proxmox depuis le réseau privé |
| 141.95.206.118 | TCP | 2049 | NFS Saturne3 |
| 51.83.117.105 | UDP | 161 | Supervision SNMP Centreon |
| 10.0.0.16 | UDP | 161 | Supervision SNMP Centreon réseau privé |
| Internet | ICMP | - | Ping / supervision, notamment monitoring OVH |
Tout autre trafic entrant est bloqué par défaut.
Accès SSH
L'accès SSH root est conservé mais l'authentification par mot de passe a été désactivée.
Configuration effective :
PermitRootLogin yes PubkeyAuthentication yes PasswordAuthentication no KbdInteractiveAuthentication no
L'accès SSH public est en plus limité par le pare-feu à :
109.190.129.96
La sécurité repose donc sur deux niveaux :
- filtrage de l'adresse IP source par le pare-feu ;
- authentification SSH par clé publique.
Protection de NFS et RPC
Saturne3 monte le stockage de Beotos3 en NFSv4.2 :
51.210.192.214:/data-backup/pbs/import-saturne3/vz/dump
La source autorisée est exclusivement :
141.95.206.118
et le port autorisé est :
TCP/2049
NFSv4.2 permet ce fonctionnement sans exposer rpcbind et les ports RPC dynamiques sur Internet.
Les services suivants peuvent continuer à écouter localement sur Beotos3, mais ils ne sont plus accessibles librement depuis Internet :
TCP/UDP 111 rpcbind rpc.mountd rpc.statd nlockmgr ports RPC dynamiques
Avant l'activation du pare-feu, environ 200 connexions TCP étaient simultanément établies depuis différentes adresses Internet vers rpcbind sur TCP/111.
Les nouvelles connexions sont désormais bloquées par la politique INPUT DROP.
Vérifications réalisées après activation
Le fonctionnement du pare-feu a été contrôlé avec :
pve-firewall status systemctl is-active pve-firewall
Résultat attendu :
Status: enabled/running active
Une nouvelle connexion SSH a été ouverte après activation du pare-feu.
L'interface Web Proxmox sur TCP/8006 a également été testée.
Test NFS
Depuis Saturne3 :
touch /mnt/pve/beotos3-import-saturne3/.fw-test rm /mnt/pve/beotos3-import-saturne3/.fw-test
Le test de lecture/écriture NFS a réussi.
Les connexions observées sur Beotos3 sont :
51.210.192.214:2049 -> 141.95.206.118
Test SNMP
Une capture réseau a confirmé une interrogation Centreon :
51.83.117.105 -> 51.210.192.214:161/UDP
ainsi que la réponse SNMP de Beotos3.
Test du filtrage
Les compteurs iptables de la chaîne PVEFW-HOST-IN ont montré une augmentation rapide des paquets rejetés après activation du pare-feu.
Cela confirme que les nouvelles tentatives de connexion provenant d'Internet sont effectivement filtrées.
ICMP et monitoring OVH
Après la première activation du pare-feu, OVH a signalé Beotos3 comme inaccessible car les requêtes ICMP utilisées par son monitoring étaient bloquées.
Une règle ICMP entrante a donc été ajoutée.
La compilation du pare-feu doit contenir :
-A PVEFW-HOST-IN -p icmp -j RETURN
Le ping public reste donc autorisé sans ouvrir de service TCP ou UDP supplémentaire.
Vérification de la configuration avant modification
Avant toute modification importante, il est possible de vérifier les règles que Proxmox va réellement appliquer avec :
pve-firewall compile
Pour contrôler les principales adresses autorisées :
pve-firewall compile | grep -E \ '109\.190\.129\.96|192\.168\.123\.0/24|141\.95\.206\.118|51\.83\.117\.105|10\.0\.0\.16'
Il est recommandé de toujours effectuer cette vérification avant une modification susceptible de couper l'accès SSH.
Procédure de sécurité lors d'une modification du pare-feu
Lors d'une modification importante :
- conserver une session SSH déjà ouverte ;
- vérifier la compilation avec
pve-firewall compile; - prévoir si nécessaire un rollback automatique ;
- appliquer la modification ;
- ouvrir une nouvelle connexion SSH pour tester ;
- tester l'interface Proxmox ;
- tester NFS Saturne3 ;
- vérifier Centreon ;
- seulement ensuite supprimer le rollback.
Cette précaution est particulièrement importante car Beotos3 est un serveur physique distant directement connecté à Internet.
PRA Eole3 vers Beotos3
Beotos3 conserve volontairement son interface publique et son adresse :
51.210.192.214
En fonctionnement normal :
eole3.ajlsm.com -> 51.178.110.230 -> Eole3
En cas de défaillance d'Eole3, le principe du PRA est de pouvoir modifier le DNS afin d'orienter les services vers Beotos3 :
eole3.ajlsm.com -> 51.210.192.214 -> Beotos3
Le pare-feu ne doit donc jamais être utilisé pour supprimer l'interface publique de Beotos3.
En revanche, les ports nécessaires au PRA ne doivent pas être ouverts inutilement en permanence.
Lors d'une bascule :
- démarrer ou activer les services de secours sur Beotos3 ;
- activer les règles firewall correspondant aux services à publier ;
- tester les services directement via l'adresse 51.210.192.214 ;
- modifier le DNS de
eole3.ajlsm.com; - vérifier le fonctionnement via le nom DNS.
Il est possible de préparer à l'avance des règles Proxmox désactivées portant par exemple le commentaire :
PRA Eole3
Elles pourront être activées uniquement lors d'une bascule.
Les ports du PRA devront être déterminés précisément à partir des services Eole3 avant de créer ces règles.
Commandes de diagnostic
État du firewall :
pve-firewall status systemctl status pve-firewall
Règles effectivement chargées :
iptables -S PVEFW-HOST-IN
Règles avec compteurs :
iptables -L PVEFW-HOST-IN -n -v --line-numbers
Connexions NFS Saturne3 :
ss -tn | grep '141\.95\.206\.118.*:2049\|:2049.*141\.95\.206\.118'
Connexions TCP encore établies vers rpcbind :
ss -nt state established '( sport = :111 )'
Capture SNMP Centreon :
tcpdump -ni any 'udp port 161 and (host 51.83.117.105 or host 10.0.0.16)'