13 – régles de pare feu nftables

nftables remplace iptables dans la debian stretch.  Voici quelques règles toutes simples mais avant il faut installer nftables :

apt install nftables

Les règles :
On fait propre avant toutes choses

flush ruleset

On défini quelques variables

define trusted_source_ip = { 192.168.0.45 }
define admin_network = 192.168.110.0/24
define admin_iface = ens7
define wan_iface = ens2

La configuration du nat et du maquerade pour donner accès à internet à nos machines virtuelles. Du moins dans un premier temps pour leur installation.

table ip nat {
	chain prerouting {
		type nat hook prerouting priority 0;
	}
	chain postrouting {
		type nat hook postrouting priority 100;
		oifname $wan_iface masquerade
	}
}

Et notre filtrage

table ip filter {
	chain input {
		type filter hook input priority 0; policy drop;
		jump base_checks
		iif lo accept
		iifname $admin_iface jump input_admin
		iifname $wan_iface goto input_wan
		log drop
	}
	chain base_checks {
		ct state established,related accept
		ct state invalid drop	
		ip saddr $trusted_source_ip ip protocol icmp icmp type { destination-unreachable, router-advertisement, time-exceeded, parameter-problem } accept
		ip saddr $admin_network ip protocol icmp icmp type { echo-request, destination-unreachable, router-advertisement, time-exceeded, parameter-problem } accept
	}
	chain input_admin {
		udp sport bootps udp dport bootpc ip saddr $admin_network
	}
	chain input_wan {
		ip saddr $trusted_source_ip tcp dport ssh log accept
	}
	chain forward { 
		type filter hook forward priority 0; policy drop;
		jump base_checks
		ip saddr $admin_network iifname $admin_iface accept	
		log drop
	}
	chain output { 
		type filter hook output priority 0; policy drop;
		ct state established,related accept
		tcp dport {https, http} accept
		udp dport domain accept
		udp sport bootps udp dport bootpc ip saddr $admin_network
		log drop
	}
}

Toute cette configuration doit être faite dans le fichier /etc/nftables.conf qui sera ensuite chargé avec la commande :

systemctl restart nftables.service

Vous trouverez le fichier entier ici : ici

N’oublions pas d’activer l’ip_forward dans le fichier /etc/sysctl.conf

net.ipv4.ip_forward = 1

et on recharge la configuration

sysctl -p

Nous avons donc un minimum de sécurité et nous pouvons installer nos machines virtuelles. Dans la prochaine étape nous testerons tout ça en démarrant l’installation de notre premier serveur du cluster ceph.

12 – Installation d’un serveur dhcp

On installe le serveur dhcp :

apt install isc-dhcp-server

Une fois le serveur installé il ne démarre pas. Il lui manque sa configuration.

La première chose à faire est de lui dire sur quelles interfaces il devra écouter et donc répondre aux requêtes.

Cette configuration se trouve dans le fichier /etc/default/isc-dhcp-server qui doit contenir chez moi

INTERFACESv4="ens7"

ou ens7 est mon interface réseau sur le réseau d’admin.

Ensuite il faut lui dire quoi proposer comme ip.

On trouve cette configuration dans le fichier /etc/dhcp/dhcpd.conf.

Voici une configuration minimale.

option domain-name "hv.internal";
option domain-name-servers 192.168.0.254;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
subnet 192.168.110.0 netmask 255.255.255.0 {
    range 192.168.110.50 192.168.110.200;
    option routers 192.168.110.254;
}

Nous allons distribuer des ip depuis 192.168.110.50 jusqu’à 192.168.110.200 avec comme serveur dns 192.168.0.254 (ma freebox) et comme route par défaut l’interface admin du firewall 192.168.110.254.

Maintenant le serveur dhcp démarre.

Dans la prochaine étape nous verrons comment configurer avec nftables le maquerading et nous ajouterons quelques rêgles de firewall pour un minimum de sécurité.

11 – Configuration réseau du routeur firewall

Notre nouvelle machine virtuelle fw001 est en ligne. Nous pouvons y accéder en console depuis l’hyperviseur avec la commande

virsh console fw001

Nous pouvons quitter la console avec ctrl + ] et si jamais vous avez un message qui vous dit que la console est déjà utilisée il suffit de relancer libvirtd et de vous reconnecter.

systemctl restart libvirtd.service

Mais il est quand même plus simple de se connecter en ssh.

Notre objectif est de faire de cette machine virtuelle un routeur pare feu qui sera capable de donner accès à internet aux machines virtuelles connectées au réseau d’admin et de distribuer des ips sur ce même réseau d’admin.

Pour le moment nous n’avons qu’une seule interface. L’interface wan. Il va falloir ajouter une interface réseau sur le réseau d’admin.

Depuis l’hyperviseur on attache une interface à la machine virtuelle fw001 qui sera connectée au réseau admin et qui sera du type virtio. On veut que cette configuration soit persistante.

virsh attach-interface fw001 network admin --model virtio --persistent

Avant :

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
3: ens2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:c6:cf:d0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.16/24 brd 192.168.0.255 scope global ens2
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fec6:cfd0/64 scope link 
       valid_lft forever preferred_lft forever

après

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
3: ens2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:c6:cf:d0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.16/24 brd 192.168.0.255 scope global ens2
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fec6:cfd0/64 scope link 
       valid_lft forever preferred_lft forever
4: ens7: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 52:54:00:2c:9a:2d brd ff:ff:ff:ff:ff:ff

Nous avons donc une nouvelle interface ens7 à qui nous allons donner une adresse ip : 192.168.110.254 que nous devrions pouvoir atteindre depuis notre hyperviseur. Et vice versa.

Dans le répertoire /etc/network/interfaces.d créez un fichier admin dans lequel vous mettrez la configuration suivante :

auto ens7
iface ens7 inet static
	address 192.168.110.254
	netmask 255.255.255.0

Vérifiez bien que le réseau (192.168.110.0) est bien celui que vous avez configuré sur votre hyperviseur et que l’interface est bien la bonne.

Maintenant nous devrions pouvoir pinger l’ip de l’hyperviseur. Pour moi c’est 192.168.110.10.

root@fw001:/etc/network# ip addr show ens7
3: ens7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:5f:db:54 brd ff:ff:ff:ff:ff:ff
    inet 192.168.110.254/24 brd 192.168.110.255 scope global ens7
       valid_lft forever preferred_lft forever
root@hv010:~# ip addr show admin 
5: admin: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether e0:d5:5e:14:d5:f1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.110.10/24 brd 192.168.110.255 scope global admin
       valid_lft forever preferred_lft forever

Depuis le firewall :

root@fw001:/etc/network# ping -c 1 192.168.110.10
PING 192.168.110.10 (192.168.110.10) 56(84) bytes of data.
64 bytes from 192.168.110.10: icmp_seq=1 ttl=64 time=0.248 ms

--- 192.168.110.10 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.248/0.248/0.248/0.000 ms

depuis l’hyperviseur

root@hv010:~# ping -c 1 192.168.110.254
PING 192.168.110.254 (192.168.110.254) 56(84) bytes of data.
64 bytes from 192.168.110.254: icmp_seq=1 ttl=64 time=0.266 ms

--- 192.168.110.254 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.266/0.266/0.266/0.000 ms

On est donc tout bon. On peut passer à la suite.

Installation d’un dhcp et de quelques règles de firewall avec nftables.

10 – Première machine virtuelle

Maintenant nous avons tout ce qui est nécessaire à la création de notre première machine virtuelle. Elle sera connecté au réseau wan pour avoir accès à internet lors de l’installation. A condition bien sur qu’un dhcp écoute sur cette interface wan. Dans mon cas c’est ma freebox

Ensuite nous lui ajouterons une interface sur le réseau d’admin, un dhcp sur ce réseau et cette interface et enfin quelques règles de firewall avec nftables.

Pour le moment nous allons utiliser virt-install qui est un script qui permet de créer et d’installer des machines virtuelles en ligne de commande.

# virt-install
--name fw001
--memory 512
-lhttp://ftp.fr.debian.org/debian/dists/stretch/main/installer-amd64/
--disk size=2,bus=virtio
--network network=wan,model=virtio
--accelerate
--nographics
-v
--extra-args "console=ttyS0 hostname=fw001 domain=hv.internal"
--os-type=linux
--virt-type=kvm
--os-variant=debian9

C’est une installation complètement en console, il n’y a donc pas besoin de client particulier (vnc, spice) pour faire l’installation.

Faites une installation simple. Vu le peu de place que j’ai sur mon disque système je n’ai mis pour la vm firewall que 2G de disque.

Par contre 512Mo de ram est un minimum. Du moins à l’installation. Avec moins le programme d’installation plante. Vous pourrez ensuite baisser à 128Mo de ram sans soucis.

Une fois l’installation faites. La machine virtuelle reboot. Dans le menu grub appuyez sur la touche e sur la première entrée du menu. Descendez avec la flèche du bas jusqu’à la ligne qui commence par linux. Ce devrait être la troisième ligne en partant du bas. Ajoutez à la fin de cette ligne console=ttyS0 et ensuite appuyez sur f10 pour lancer la procédure de boot.

Vous devriez voir votre debian démarrer jusqu’au login. Loggez vous et éditer le fichier /etc/default/grub pour changer la ligne :

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

en

GRUB_CMDLINE_LINUX_DEFAULT="quiet console=ttyS0"

et enfin mettre à jour grub

# update-grub

Astuce : pour sortir de la console ctrl + alt gr + ) ou crtl + ] et la commande reset pour retrouver votre terminal propre

Comme exercice :

  1. faites en sorte de pouvoir vous connecter en root sur cette nouvelle machine sans mots de passe
  2. executez le playbook ansible de base sur cette nouvelle machine virtuelle. Et uniquement sur cette nouvelle machine virtuelle

Ces deux étapes seront des pré requis pour la suite

9 – Connecter libvirt au réseau

Ici nous allons voir comment dire à la libvirt et donc à kvm comment utiliser les réseaux que nous venons de créer.

C’est finalement assez simple. Il suffit de créer un réseau qui s’appuie sur les bridges wan et admin qui nous avons créés.

Mais avant toutes choses il faut installer kvm et la libvirt :

apt install qemu-kvm libvirt-daemon libvirt-clients libvirt-daemon-system

Un fichier xml pour l’admin : admin.xml
un fichier xml pour la wan : wan.xml
Et on envoie tout ça dans la libvirt :

# virsh net-define wan.xml 
# virsh net-autostart wan
# virsh net-start wan
# virsh net-define admin.xml
# virsh net-autostart admin
# virsh net-start admin

Et on supprime le réseau pré existant

# virsh net-undefine default

Et on vérifie que tout le monde est bien la

# virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 admin                active     yes           yes
 wan                  active     yes           yes

Bien sur  il existe le playbook ansible qui va bien :  https://github.com/oaudry/cloud/tree/master/ansible/stretch/hyperviseur/002-libvirt-network

8 – la configuration du réseau

Ici nous abordons une partie un peu délicate. La configuration du réseau pour notre cloud. Dans un premier temps nous n’aurons que deux réseaux. Un réseau d’admin et un réseau public que nous appellerons respectivement  admin et wan. Le réseau d’admin sera dans le vlan 101 et le wan sera directement sur un pont branché sur la carte lan.  Le tout sera isolé.

Un excellent article sur l’isolation des ponts : ici

Le réseau d’admin sera utilisé pour l’administration en ssh des machines virtuelles de notre cloud. On fera aussi passer dedans les mails, le backup et le monitoring. Nous verrons par la suite comment faire en sorte que ce réseau d’admin qui interconnecte toutes nos machines virtuelles ne soit pas un vecteur d’attaque.

Nous avons donc deux cartes réseaux :

  1. enp0s31f6 qui sera la carte qui tiendra tout les vlan que nous appellerons l’interface lan
  2. enp6s0 qui sera la carte connecté au réseau public wan

Installation des paquets nécessaires :

# apt install bridge-utils vlan sysfsutils

Configuration des vlan et chargement du module

# modprobe 8021q && echo 8021q >> /etc/modules
# grep -q PLUS_VID /proc/net/vlan/config || vconfig set_name_type VLAN_PLUS_VID

Voici les divers fichiers de configurations.
Le premier /etc/network/interfaces ne change pas. Vérifier juste que la carte qui est configuré est bien celle de votre wan :

# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug enp6s0
iface enp6s0 inet dhcp

Ensuite dans le répertoire /etc/network/interfaces.d/ nous allons créer trois fichiers. Un wan, un lan et un admin :

Tout d’abord on monte l’interface lan mais sans lui donner d’adresse ip. Ce n’est pas utile. Elle ne sera qu’une interface matérielle qui servira de support à nos vlans

# cat lan
auto enp0s31f6
iface enp0s31f6 inet manual

On la démarre

# ifup enp0s31f6

Ensuite l’interface wan qui est un bridge sur l’interface lan

# cat wan
auto wan
iface wan inet manual
        bridge_ports enp0s31f6
        post-up bridge vlan del dev wan vid 1 self

On la démarre

# ifup wan

On vérfie qu’elle est bien la et bien configuré

# brctl show
bridge name	bridge id		STP enabled	interfaces
wan		8000.e0d55e14d5f1	no		enp0s31f6

Et enfin le vlan 101 sur l’interface lan qui sera ensuite utilisé comme interface pour le bridge admin a qui on donne une ip. Cette ip sera l’ip dans le réseau d’admin de l’hypverviseur.

# cat admin 
auto vlan101
iface vlan101 inet manual
	vlan-raw-device enp0s31f6

auto admin
iface admin inet static
	address 192.168.101.10
	netmask 255.255.255.0
	broadcast 192.168.101.255
    bridge_ports  vlan101
    post-up bridge vlan del dev admin vid 1 self

Enfin on démarre l’interface d’admin

# ifup vlan101

On vérifie qu’on a bien notre vlan 101

# cat /proc/net/vlan/config
VLAN Dev name	 | VLAN ID
Name-Type: VLAN_NAME_TYPE_PLUS_VID_NO_PAD
vlan101        | 101  | enp0s31f6

Et que notre bridge est correctement configuré

# brctl show
bridge name	bridge id		STP enabled	interfaces
admin		8000.e0d55e14d5f1	no		vlan101
wan		8000.e0d55e14d5f1	no		enp0s31f6

Enfin on vérifie que notre configuration ip est bien celle attendu :

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether d8:5d:4c:80:45:21 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.24/24 brd 192.168.0.255 scope global enp6s0
       valid_lft forever preferred_lft forever
3: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master wan state UP group default qlen 1000
    link/ether e0:d5:5e:14:d5:f1 brd ff:ff:ff:ff:ff:ff
4: wan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether e0:d5:5e:14:d5:f1 brd ff:ff:ff:ff:ff:ff
5: vlan101@enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master admin state UP group default qlen 1000
    link/ether e0:d5:5e:14:d5:f1 brd ff:ff:ff:ff:ff:ff
6: admin: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether e0:d5:5e:14:d5:f1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.10/24 brd 192.168.101.255 scope global admin
       valid_lft forever preferred_lft forever
  1. la loopback : 127.0.0.1
  2. notre interface wan avec l’adresse ip de notre réseau public donnée par le dhcp de votre box internet par exemple ici 192.168.0.24
  3. notre interface lan sans ip sur laquelle repose nos vlans
  4. notre bridge wan par lequel nos vm accèderont au réseau public
  5. notre vlan d’admin
  6. notre interface d’admin avec une ip dans notre réseau d’admin ici 192.168.101.10 dans le réseau 192.168.101.0/24

Vous trouverez ici le playbook ansible qui permet de faire toute cette configuration automatiquement.

A noter que ce playbook prend comme adresse ip de l’interface d’admin les derniers digit non nul du hostname. Par exemple si votre hyperviseur s’appelle machin-hv023. Son ip sur le réseau d’admin sera 192.168.101.23.

A noter aussi que dans ce playbook plusieurs variables sont configurables.

ansible-playbook -u root network.xml

Dans le prochain post nous configurerons libvirt pour que nos machines virtuelles utilisent ces réseaux

7 – Notre premier cookbook ansible

Un ensemble de règles ansible s’appelle un playbook. C’est un fichier en yaml qui décrit une liste d’action à faire sur un groupe de machine. Comme nous l’avons vu sur le post précédent notre hyperviseur fait à la fois parti du groupe de base et du groupe hyperviseur.

J’ai une config de base relativement simple. Elle configure mes machines avec mes petites habitudes. Vous pourrez trouver mon playbook de base ici avec les fichiers nécessaires.

Au début du fichier il y a deux variables votre nom de domaine et le relais smtp que vous utilisez. Configurez les en fonctions de votre environnement

Pour le lancer :

ansible-playbook -u root base.xml

Et voilà !

6 – Industrialisation : installation d’ansible

J’aime bien automatiser les choses et l’installation par défaut de debian est bien mais pas trop. Alors on va utiliser ansible pour mettre tout ça au carré.

Tout d’abord il faut installer et configurer ansible. Sur votre debian :

apt install ansible

Un petit peu de configuration est nécessaire pour ansible. Votre fichier /etc/ansible/hosts doit ressembler à ça :

[base]
hv010

[hypervisors]
hv010

la section entre crochet définie un groupe et en dessous les machines faisant partie du groupe. Ici notre hyperviseur fait à la fois parti du groupe base du groupe hypervisors. Donc les règles que nous allons définir pour la configuration de base et pour celle des hyperviseurs s’appliqueront à hv010

Enfin nous allons mettre à jour notre fichier /etc/hosts pour faire le lien entrehv010 et son ip :

192.168.0.24 hv010

On vérifie que tout fonctionne correctement

oaudry@aragorn:~$ ansible all -u root -m ping
smobe-hv010 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Et on passe à la suite

5 – Première connexion

En premier lieu il va falloir identifier l’ip de la nouvelle machine. On se connecte en console (écran et clavier) et en root dessus  :

root@hv010:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp6s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether d8:5d:4c:80:45:21 brd ff:ff:ff:ff:ff:ff
3: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether e0:d5:5e:14:d5:f1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.47/24 brd 192.168.0.255 scope global enp0s31f6
       valid_lft forever preferred_lft forever
    inet6 fe80::e2d5:5eff:fe14:d5f1/64 scope link 
       valid_lft forever preferred_lft forever

Donc notre ip wan est 192.168.0.47. On remarquera au passage une des nouveautés de cette Stretch : le nommage assez pénible des interfaces réseaux. Ici enp0s31f6 et enp6s0. Il y a tout un tas de très bonnes raisons à ça alors on va s’y faire. C’est comme systemd 🙂

Ensuite par défaut il n’est pas possible de se connecter en ssh en root. Alors on va se connecter avec notre utilisateur et ensuite passer root avec ‘su -‘

Pour se connecter en ssh en root directement sans se prendre la tête et en gardant une certaine sécurité on utilise des clés.  Avant toute chose nous allons vérifier que vous n’en avez pas déjà une :

ls -l ~/.ssh/id_rsa*
-rw------- 1 oaudry oaudry 1679 févr. 19  2015 /home/oaudry/.ssh/id_rsa
-rw-r--r-- 1 oaudry oaudry  396 févr. 19  2015 /home/oaudry/.ssh/id_rsa.pub

id_rsa est la clé privé que vous devez garder bien au chaud
id_rsa.pub est la clé publique que vous allez partager

Si vous n’en avez pas vous pouvez générer une clé ssh sur la machine que vous utilisez avec la commande :

ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/oaudry/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/oaudry/.ssh/id_rsa.
Your public key has been saved in /home/oaudry/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:mEMo6Ss50hfNATPvCDusKScAsaGrb0M0+R886QuUJCw oaudry@aragorn
The key's randomart image is:
+---[RSA 2048]----+
|o   +            |
|.= . *           |
|E *.o +          |
|.=+* B +         |
|o.=o=.B.S        |
|o=.+..=.         |
|@.+ oo o         |
|o*o. .o          |
| ...  ..         |
+----[SHA256]-----+

Vous pouvez saisir une passphrase mais je vous laisse vous renseigner sur comment gérer ça ensuite. Une indice : ssh-agent il me semble.

Maintenant copier le fichier /home/oaudry/.ssh/id_rsa.pub de votre machine dans le fichier /root/.ssh/authorized_keys de la machine cible.

Comme je suis fainéant au dernier degré, pour créer le répertoire /root/.ssh sur la machine cible je tape la commande suivante pour avoir un répertoire créé avec les bon droits :

ssh 0

et je réponds oui à la question.

Ensuite je copie colle le contenu de mon /home/oaudry/.ssh/id_rsa.pub dans /root/.ssh/authorized_keys de la machine cible.

Et enfin je me connecte

oaudry@aragorn:~$ ssh root@192.168.0.47
Linux smobe-hv010 4.9.0-4-amd64 #1 SMP Debian 4.9.65-3+deb9u1 (2017-12-23) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Jan  5 16:08:44 2018 from 192.168.0.45
root@hv010:~# 

On profite d’être connecter pour générer le fichier preseed qui permettra l’installation de la même machine.

apt install  debconf-utils
debconf-get-selections --installer  > preseed.cfg

Gardez ce fichier dans un coin pour plus tard. Vous pouvez retrouver le mien ici

4 – installation de l’os

Suivre le programme d’installation classique de la debian. Je m’arrêterais juste sur la partie partitionnement. Je vous recommande simplement d’installer l’os en anglais et de ne configurer que l’interface qui sera relier à l’exterieur. Nous appellerons cette interface l’interface wan.

Je partagerai sur mon compte github le fichier preseed de cette installation. Nous l’utiliserons ultérieurement pour installer les autres hyperviseurs.

Partitionnement  des 14,4Go disponible sur l’intel optane :

  1.  100Mo en début de disk pour l’uefi
  2. 2Go pour le swap
  3. tout le reste dans /

Je ne sépare pas en plusieurs partition car les logs seront tous renvoyé sur une vm et aucun processus autre que qemu et ssh ne tourneront dans cet os.

Pour le reste n’oubliez pas de décocher Debian desktop environnement et de bien cocher SSH server. Vous pouvez aussi décocher print server.

Ca s’installe on reboot et on passe à la suite.