Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteProchaine révisionLes deux révisions suivantes | ||
tech:hypervisor-01 [03/03/2021 12:00] – [Système d'exploitation] LibertAdmin | tech:hypervisor-01 [04/03/2021 13:27] – LibertAdmin | ||
---|---|---|---|
Ligne 32: | Ligne 32: | ||
==== Système d' | ==== Système d' | ||
Debian stable (Debian 10 « Buster » au moment de la rédaction de cette page) | Debian stable (Debian 10 « Buster » au moment de la rédaction de cette page) | ||
+ | |||
+ | ==== Adressage IP ==== | ||
+ | Hetzner offre une IP publique. Nous avons modifié l' | ||
+ | |||
+ | L' | ||
+ | |||
+ | < | ||
+ | root@hypervisor-01 ~ # cat / | ||
+ | ### Hetzner Online GmbH installimage | ||
+ | |||
+ | source / | ||
+ | |||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | iface lo inet6 loopback | ||
+ | |||
+ | #auto enp0s31f6 | ||
+ | #iface enp0s31f6 inet static | ||
+ | # address 159.69.59.13 | ||
+ | # netmask 255.255.255.192 | ||
+ | # gateway 159.69.59.1 | ||
+ | # # route 159.69.59.0/ | ||
+ | # up route add -net 159.69.59.0 netmask 255.255.255.192 gw 159.69.59.1 dev enp0s31f6 | ||
+ | |||
+ | auto br0 | ||
+ | iface br0 inet static | ||
+ | bridge_ports enp0s31f6 | ||
+ | bridge_fd 5 | ||
+ | bridge_stp off | ||
+ | bridge_maxwait 1 | ||
+ | address | ||
+ | netmask | ||
+ | gateway | ||
+ | pre-up / | ||
+ | up route add -net 159.69.59.0 netmask 255.255.255.192 gw 159.69.59.1 dev enp0s31f6 | ||
+ | |||
+ | # Management | ||
+ | auto br1 | ||
+ | iface br1 inet static | ||
+ | bridge_ports none | ||
+ | bridge_fd 5 | ||
+ | bridge_stp off | ||
+ | address 10.X.X.X | ||
+ | netmask 255.X.X.X | ||
+ | |||
+ | # VM-LAN | ||
+ | auto br2 | ||
+ | iface br2 inet static | ||
+ | bridge_ports none | ||
+ | bridge_fd 5 | ||
+ | bridge_stp off | ||
+ | address 192.168.10.1 | ||
+ | netmask 255.255.255.0 | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Routage et filtrage avec iptables ==== | ||
+ | |||
+ | Nous avons dû ensuite router et rediriger tout ça avec iptables afin de communiquer depuis l' | ||
+ | |||
+ | L' | ||
+ | Le paquet '' | ||
+ | Le port SSH a été masqué. | ||
+ | |||
+ | Il est bien sûr extrêmement important de sécuriser SSH : interdire le login root avec mot de passe, utiliser de bons algorithmes de chiffrement, | ||
+ | |||
+ | Les règles concernant le réseau d' | ||
+ | |||
+ | <code bash> | ||
+ | root@hypervisor-01 ~ # cat / | ||
+ | # Router le Web vers le proxy Nginx : | ||
+ | -A PREROUTING -d 159.69.59.13/ | ||
+ | # Router le mail envoi/ | ||
+ | -A PREROUTING -d 159.69.59.13/ | ||
+ | # Router le 9000 vers le serveur peertube : | ||
+ | -A PREROUTING -d 159.69.59.13/ | ||
+ | # Router le 4443 et les 10000-20000 | ||
+ | -A PREROUTING -d 159.69.59.13/ | ||
+ | -A PREROUTING -d 159.69.59.13/ | ||
+ | -A PREROUTING -d 159.69.59.13/ | ||
+ | # Ne pas appliquer le masquerading sur le broadcast/ | ||
+ | -A POSTROUTING -s 192.168.10.0/ | ||
+ | -A POSTROUTING -s 192.168.10.0/ | ||
+ | # Masquerading sur tous les ports dans le sens sortant (VM -> Internet) | ||
+ | -A POSTROUTING -s 192.168.10.0/ | ||
+ | -A POSTROUTING -s 192.168.10.0/ | ||
+ | -A POSTROUTING -s 192.168.10.0/ | ||
+ | |||
+ | # Accepter le trafic basique : ICMP, boucle locale et connexions établies, en entrée : | ||
+ | -A INPUT -m conntrack --ctstate RELATED, | ||
+ | -A INPUT -i lo -j ACCEPT | ||
+ | -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT | ||
+ | # Accepter le SSH : | ||
+ | -A INPUT -p tcp -m tcp --syn -m conntrack --ctstate NEW --dport XXXX -j ACCEPT | ||
+ | # Accepter Spice et VNC (console virtuelle de virt-manager) : | ||
+ | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5900 -j ACCEPT | ||
+ | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5900 -j ACCEPT | ||
+ | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5901 -j ACCEPT | ||
+ | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5901 -j ACCEPT | ||
+ | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5902 -j ACCEPT | ||
+ | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5902 -j ACCEPT | ||
+ | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5903 -j ACCEPT | ||
+ | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5903 -j ACCEPT | ||
+ | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5904 -j ACCEPT | ||
+ | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5904 -j ACCEPT | ||
+ | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5905 -j ACCEPT | ||
+ | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5905 -j ACCEPT | ||
+ | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5906 -j ACCEPT | ||
+ | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5906 -j ACCEPT | ||
+ | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5907 -j ACCEPT | ||
+ | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5907 -j ACCEPT | ||
+ | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5908 -j ACCEPT | ||
+ | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5908 -j ACCEPT | ||
+ | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5909 -j ACCEPT | ||
+ | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5909 -j ACCEPT | ||
+ | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5910 -j ACCEPT | ||
+ | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5910 -j ACCEPT | ||
+ | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5911 -j ACCEPT | ||
+ | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5911 -j ACCEPT | ||
+ | # Accepter les requêtes DNS (port 53) depuis les VM : | ||
+ | -A INPUT -i br2 -p udp -m udp -m multiport --dports 53 -j ACCEPT | ||
+ | -A INPUT -i br2 -p tcp -m tcp -m multiport --dports 53 -j ACCEPT | ||
+ | # Bloquer les requêtes rpcbind/ | ||
+ | -A INPUT -i br2 -p tcp -m multiport --dport 2049 -j ACCEPT | ||
+ | -A INPUT -i br2 -p tcp -m multiport --dport 111 -j ACCEPT | ||
+ | -A INPUT -p tcp -s 127.0.0.1 --dport 111 -j ACCEPT | ||
+ | -A INPUT -p udp --dport 111 -j DROP | ||
+ | -A INPUT -p tcp --dport 111 -j DROP | ||
+ | |||
+ | # On refuse tout le reste : | ||
+ | -A INPUT -m conntrack --ctstate INVALID -j DROP | ||
+ | -A INPUT -p tcp -m tcp -j REJECT --reject-with tcp-reset | ||
+ | -A INPUT -j REJECT --reject-with icmp-port-unreachable | ||
+ | |||
+ | # Accepter les connexions établies sur le LAN : | ||
+ | -A FORWARD -d 192.168.10.0/ | ||
+ | # Accepter le trafic sortant depuis le LAN : | ||
+ | -A FORWARD -s 192.168.10.0/ | ||
+ | # Accepter le trafic interne entre les VM : | ||
+ | -A FORWARD -i br2 -o br2 -j ACCEPT | ||
+ | # Accepter les paquets redirigés vers des ports particuliers pour le Web vers le proxy : | ||
+ | -A FORWARD -d 192.168.10.2/ | ||
+ | # Accepter les paquets redirigés vers des ports particuliers pour le mail vers le serveur mail : | ||
+ | -A FORWARD -d 192.168.10.7/ | ||
+ | # Accepter les paquets redirigés vers des ports particuliers pour peertube service 9000 vers le serveur video : | ||
+ | -A FORWARD -d 192.168.10.8/ | ||
+ | # Accepter les paquets redirigés vers des ports particuliers pour funkwhale service 5000 vers le serveur video : | ||
+ | -A FORWARD -d 192.168.10.9/ | ||
+ | # Accepter les paquets redirigés vers des ports particuliers pour jitsi meet service tcp 10000-20000 vers le serveur visio : | ||
+ | -A FORWARD -d 192.168.10.10/ | ||
+ | # Accepter les paquets redirigés vers des ports particuliers pour jitsi meet service udp 10000-20000 vers le serveur visio : | ||
+ | -A FORWARD -d 192.168.10.10/ | ||
+ | # Accepter les paquets redirigés vers des ports particuliers pour jitsi meet service tcp 4443 vers le serveur visio : | ||
+ | -A FORWARD -d 192.168.10.10/ | ||
+ | |||
+ | # Rejeter tout le reste : | ||
+ | -A FORWARD -i br2 -j REJECT --reject-with icmp-port-unreachable | ||
+ | -A FORWARD -o br2 -j REJECT --reject-with icmp-port-unreachable | ||
+ | </ | ||
+ | |||
==== Paquets installés ==== | ==== Paquets installés ==== | ||
+ | |||
Pour virtualiser, | Pour virtualiser, | ||
La liste des paquets : | La liste des paquets : | ||
Ligne 960: | Ligne 1121: | ||
</ | </ | ||
- | ==== Adressage IP ==== | + | ==== Stockage ZFS ==== |
- | Hetzner offre une IP publique. Nous avons modifié l' | + | |
- | + | ||
- | L' | + | |
- | + | ||
- | < | + | |
- | root@hypervisor-01 ~ # cat / | + | |
- | ### Hetzner Online GmbH installimage | + | |
- | + | ||
- | source / | + | |
- | + | ||
- | auto lo | + | |
- | iface lo inet loopback | + | |
- | iface lo inet6 loopback | + | |
- | + | ||
- | #auto enp0s31f6 | + | |
- | #iface enp0s31f6 inet static | + | |
- | # address 159.69.59.13 | + | |
- | # netmask 255.255.255.192 | + | |
- | # gateway 159.69.59.1 | + | |
- | # # route 159.69.59.0/ | + | |
- | # up route add -net 159.69.59.0 netmask 255.255.255.192 gw 159.69.59.1 dev enp0s31f6 | + | |
- | + | ||
- | auto br0 | + | |
- | iface br0 inet static | + | |
- | bridge_ports enp0s31f6 | + | |
- | bridge_fd 5 | + | |
- | bridge_stp off | + | |
- | bridge_maxwait 1 | + | |
- | address | + | |
- | netmask | + | |
- | gateway | + | |
- | pre-up / | + | |
- | up route add -net 159.69.59.0 netmask 255.255.255.192 gw 159.69.59.1 dev enp0s31f6 | + | |
- | # Management | ||
- | auto br1 | ||
- | iface br1 inet static | ||
- | bridge_ports none | ||
- | bridge_fd 5 | ||
- | bridge_stp off | ||
- | address 10.X.X.X | ||
- | netmask 255.X.X.X | ||
- | |||
- | # VM-LAN | ||
- | auto br2 | ||
- | iface br2 inet static | ||
- | bridge_ports none | ||
- | bridge_fd 5 | ||
- | bridge_stp off | ||
- | address 192.168.10.1 | ||
- | netmask 255.255.255.0 | ||
- | </ | ||
- | |||
- | ==== Routage et filtrage avec iptables ==== | ||
- | Nous avons dû ensuite router et rediriger tout ça avec iptables afin de communiquer depuis l' | ||
- | |||
- | L' | ||
- | Le paquet '' | ||
- | Le port SSH a été masqué. | ||
- | |||
- | Il est bien sûr extrêmement important de sécuriser SSH : interdire le login root avec mot de passe, utiliser de bons algorithmes de chiffrement, | ||
- | |||
- | Les règles concernant le réseau d' | ||
- | |||
- | <code bash> | ||
- | root@hypervisor-01 ~ # cat / | ||
- | # Router le Web vers le proxy Nginx : | ||
- | -A PREROUTING -d 159.69.59.13/ | ||
- | # Router le mail envoi/ | ||
- | -A PREROUTING -d 159.69.59.13/ | ||
- | # Router le 9000 vers le serveur peertube : | ||
- | -A PREROUTING -d 159.69.59.13/ | ||
- | # Router le 4443 et les 10000-20000 | ||
- | -A PREROUTING -d 159.69.59.13/ | ||
- | -A PREROUTING -d 159.69.59.13/ | ||
- | -A PREROUTING -d 159.69.59.13/ | ||
- | # Ne pas appliquer le masquerading sur le broadcast/ | ||
- | -A POSTROUTING -s 192.168.10.0/ | ||
- | -A POSTROUTING -s 192.168.10.0/ | ||
- | # Masquerading sur tous les ports dans le sens sortant (VM -> Internet) | ||
- | -A POSTROUTING -s 192.168.10.0/ | ||
- | -A POSTROUTING -s 192.168.10.0/ | ||
- | -A POSTROUTING -s 192.168.10.0/ | ||
- | |||
- | # Accepter le trafic basique : ICMP, boucle locale et connexions établies, en entrée : | ||
- | -A INPUT -m conntrack --ctstate RELATED, | ||
- | -A INPUT -i lo -j ACCEPT | ||
- | -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT | ||
- | # Accepter le SSH : | ||
- | -A INPUT -p tcp -m tcp --syn -m conntrack --ctstate NEW --dport XXXX -j ACCEPT | ||
- | # Accepter Spice et VNC (console virtuelle de virt-manager) : | ||
- | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5900 -j ACCEPT | ||
- | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5900 -j ACCEPT | ||
- | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5901 -j ACCEPT | ||
- | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5901 -j ACCEPT | ||
- | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5902 -j ACCEPT | ||
- | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5902 -j ACCEPT | ||
- | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5903 -j ACCEPT | ||
- | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5903 -j ACCEPT | ||
- | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5904 -j ACCEPT | ||
- | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5904 -j ACCEPT | ||
- | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5905 -j ACCEPT | ||
- | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5905 -j ACCEPT | ||
- | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5906 -j ACCEPT | ||
- | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5906 -j ACCEPT | ||
- | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5907 -j ACCEPT | ||
- | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5907 -j ACCEPT | ||
- | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5908 -j ACCEPT | ||
- | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5908 -j ACCEPT | ||
- | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5909 -j ACCEPT | ||
- | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5909 -j ACCEPT | ||
- | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5910 -j ACCEPT | ||
- | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5910 -j ACCEPT | ||
- | -A INPUT -p tcp -m tcp -m conntrack --ctstate NEW --dport 5911 -j ACCEPT | ||
- | -A INPUT -p udp -m udp -m conntrack --ctstate NEW --dport 5911 -j ACCEPT | ||
- | # Accepter les requêtes DNS (port 53) depuis les VM : | ||
- | -A INPUT -i br2 -p udp -m udp -m multiport --dports 53 -j ACCEPT | ||
- | -A INPUT -i br2 -p tcp -m tcp -m multiport --dports 53 -j ACCEPT | ||
- | # Bloquer les requêtes rpcbind/ | ||
- | -A INPUT -i br2 -p tcp -m multiport --dport 2049 -j ACCEPT | ||
- | -A INPUT -i br2 -p tcp -m multiport --dport 111 -j ACCEPT | ||
- | -A INPUT -p tcp -s 127.0.0.1 --dport 111 -j ACCEPT | ||
- | -A INPUT -p udp --dport 111 -j DROP | ||
- | -A INPUT -p tcp --dport 111 -j DROP | ||
- | |||
- | # On refuse tout le reste : | ||
- | -A INPUT -m conntrack --ctstate INVALID -j DROP | ||
- | -A INPUT -p tcp -m tcp -j REJECT --reject-with tcp-reset | ||
- | -A INPUT -j REJECT --reject-with icmp-port-unreachable | ||
- | |||
- | # Accepter les connexions établies sur le LAN : | ||
- | -A FORWARD -d 192.168.10.0/ | ||
- | # Accepter le trafic sortant depuis le LAN : | ||
- | -A FORWARD -s 192.168.10.0/ | ||
- | # Accepter le trafic interne entre les VM : | ||
- | -A FORWARD -i br2 -o br2 -j ACCEPT | ||
- | # Accepter les paquets redirigés vers des ports particuliers pour le Web vers le proxy : | ||
- | -A FORWARD -d 192.168.10.2/ | ||
- | # Accepter les paquets redirigés vers des ports particuliers pour le mail vers le serveur mail : | ||
- | -A FORWARD -d 192.168.10.7/ | ||
- | # Accepter les paquets redirigés vers des ports particuliers pour peertube service 9000 vers le serveur video : | ||
- | -A FORWARD -d 192.168.10.8/ | ||
- | # Accepter les paquets redirigés vers des ports particuliers pour funkwhale service 5000 vers le serveur video : | ||
- | -A FORWARD -d 192.168.10.9/ | ||
- | # Accepter les paquets redirigés vers des ports particuliers pour jitsi meet service tcp 10000-20000 vers le serveur visio : | ||
- | -A FORWARD -d 192.168.10.10/ | ||
- | # Accepter les paquets redirigés vers des ports particuliers pour jitsi meet service udp 10000-20000 vers le serveur visio : | ||
- | -A FORWARD -d 192.168.10.10/ | ||
- | # Accepter les paquets redirigés vers des ports particuliers pour jitsi meet service tcp 4443 vers le serveur visio : | ||
- | -A FORWARD -d 192.168.10.10/ | ||
- | |||
- | # Rejeter tout le reste : | ||
- | -A FORWARD -i br2 -j REJECT --reject-with icmp-port-unreachable | ||
- | -A FORWARD -o br2 -j REJECT --reject-with icmp-port-unreachable | ||
- | </ | ||
- | |||
- | ==== Stockage ZFS ==== | ||
Un « pool » sur les 2 gros disques mécaniques a été créé en miroir (RAID1). Si vous vous demandez pourquoi nous n' | Un « pool » sur les 2 gros disques mécaniques a été créé en miroir (RAID1). Si vous vous demandez pourquoi nous n' | ||