Jails avec FreeBSD 10.1 (2/x)


une jail avec le réseau

Nous avons vu précédemment comme mettre en place l’architecture des jails de FreeBSD 10.1 et comment en créer une. Nous allons apprendre dans cet article comment ajouter le réseau à notre jail.

Une deuxième jail, en ajoutant le réseau

Nous allons créer une deuxième jail (sans doute plus pérenne que la précédente) et nous allons nous arranger pour y accéder via le réseau depuis l’extérieur.

Une interface loopback supplémentaire

Nous allons ajouter une interface locale, dite de loopback qui sera dédiée aux jails. Nous allons la nommer lo1, lo0 existant déjà et étant la loopback du système.

Cette configuration se fait dans le fichier /etc/rc.conf, comme suit :

1
2
cloned_interfaces="lo1"
ifconfig_lo1="inet 192.168.12.254/24"

L’adresse IP de notre interface sera donc 192.168.12.254/241

Nous devons faire en sorte que notre nouvelle configuration soit prise en compte en redémarrant une partie du réseau de notre machine :

1
2
3
4
5
6
7
$ sudo  service netif cloneup
Created clone interfaces: lo1.
$ sudo  ifconfig lo1
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
    inet 192.168.12.254 netmask 0xffffff00
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Et pour créer notre jail, nous allons utiliser la même commande que précédemment, en changeant l’interface et l’adresse IP.

1
2
3
$ sudo ezjail-admin create sshtest 'lo1|192.168.12.1'
$ sudo ezjail-admin onestart sshtest
$ sudo ezjail-admin console sshtest
On doit pouvoir constater que l’adresse IP de notre jail est bien celle attendue, 192.168.12.1

[root@sshtest] # ifconfig lo1
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
    inet 192.168.12.1 netmask 0xffffffff

Et sur l’hôte, notre interface lo1 possède désormais deux adresses ip, la sienne (192.168.12.254) et celle de la jail :

1
2
3
4
5
6
$ sudo  ifconfig lo1
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
    options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
    inet 192.168.12.254 netmask 0xffffff00
    inet 192.168.12.1 netmask 0xffffffff
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

Configuration de pf pour notre jail

Nous allons faire en sorte que depuis notre jail nous puissions nous connecter sur l’hôte, via ssh.

  cela n’a en réalité aucun intérêt, puisque nous pouvons nous connecter directement sur l’hôte. Cela nous permettra simplement de valider que notre jail et l’hôte arrivent à communiquer.

Sur l’hôte donc nous allons reconfigurer sshd pour que celui-ci écoute sur un port autre que 22 sur l’interface visible depuis internet.

 si vous avez lu les tutoriaux de ce site, vous devez vous souvenir que nous avons déjà changé le port par défaut sur lequel ssh attend les connexions.

Nous allons éditer le fichier /etc/ssh/sshd_config.

1
2
ListenAddress 203.0.113.48:22022
ListenAddress 192.168.12.254:22
Ce qui signifie que sur l’adresse publique (203.0.113.48) sshd attend les connexions sur le port 22022 et sur l’adresse privée, le port utilisé est 22.

Nous devons redémarrer le sshd pour que notre nouvelle configuration soit prise en compte :

1
$ sudo service netif restart
Nous avons également besoin d’ajouter une règle à notre pare-feu, pour autoriser les connexions sur le port 22 à destination de notre adresse IP privée.

Cela se fait en éditant le fichier /etc/pf.conf et en y ajoutant quelques lignes.

En début de fichier, nous définissons l’interface interne, celle qui sert aux jails  :

1
int_if="lo1"

Et plus loin (sous la ligne qui autorise déjà ssh sur notre port caché) :

1
pass in log quick on $int_if proto tcp from 192.168.12.0/24 to any port = 22 flags S/SA keep state
Avant d’activer ces modifications, il est nécessaire de vérifier que la syntaxe est bonne :

1
$ sudo pfctl -nf /etc/pf.conf
Si la commande ne retourne pas d’erreur, nous pouvons activer notre nouvelle configuration :

1
$ sudo pfctl -f /etc/pf.conf
Et maintenant, depuis la jail nous allons tenter une connexion ssh vers l’hôte :

 $ sudo ezjail-admin console sshtest
 Last login: Sat Oct 24 07:16:44 on pts/1
 FreeBSD 10.1-RELEASE-p19 (GENERIC) #0: Sat Aug 22 03:55:09 UTC 2015
 
 Welcome to FreeBSD!
 
 Release Notes, Errata: https://www.FreeBSD.org/releases/
 Security Advisories:   https://www.FreeBSD.org/security/
 FreeBSD Handbook:      https://www.FreeBSD.org/handbook/
 FreeBSD FAQ:           https://www.FreeBSD.org/faq/
 Questions List: https://lists.FreeBSD.org/mailman/listinfo/freebsd-questions/
 FreeBSD Forums:        https://forums.FreeBSD.org/
 
 Documents installed with the system are in the /usr/local/share/doc/freebsd/
 directory, or can be installed later with:  pkg install en-freebsd-doc
 For other languages, replace "en" with a language code like de or fr.
 
 Show the version of FreeBSD installed:  freebsd-version ; uname -a
 Please include that output and any error messages when posting questions.
 Introduction to manual pages:  man man
 FreeBSD directory layout:      man hier
 
 Edit /etc/motd to change this login announcement.
 root@sshtest:~ # ssh 192.168.12.254
 The authenticity of host '192.168.12.254 (192.168.12.254)' can't be established.
 ECDSA key fingerprint is 91:00:e9:e1:1e:48:90:d8:c5:2a:67:3c:03:a2:bf:ce.
 No matching host key fingerprint found in DNS.
 Are you sure you want to continue connecting (yes/no)? yes
 Warning: Permanently added '192.168.12.254' (ECDSA) to the list of known hosts.
 SSH passphrase:
 $ sudo logout
 Connection to 192.168.12.254 closed.

Conclusion

Nous venons de franchir un grand pas dans la mise en place de notre future configuration (et dans la compréhension des jails).


  1. j’espère que vous lisez tous la notation CIDR. ↩︎

powered by FreeBSD