EDIT 2018 : Retrouvez cette série de tuto dans une grosse mise à jour ici : Xen et OpenVswitch sont dans une Debian 9 – V.2018
Sixième partie du tutoriel sur la virtualisation « Xen et OpenVswitch sont dans une Debian« .
Nous avons étudié précédemment la mise en place d’un nouveau Vlan, chargé de véhiculer les communications entres les machines.
Ici, nous allons nous occuper de créer la machine proxy interne.
Cette nouvelle machine aura deux logiciels principaux installés dessus :
Squid, le proxy qui permettra aux VMs d’accéder au net, et Apt-cacher-ng, un proxy spécialement pour les paquets que les VMs utiliseront lors de leurs apt-get… On pourrait utiliser Squid pour faire cache APT, mais bon, je préféré passer par un logiciel plus adapté dans ce but.
I – Création VM test
Pour tester cela, nous allons d’abord créer une machine virtuelle de test. Pour le moment, elle nous servira à tester le proxy. Et histoire de ne pas perdre de temps, je vais faire ma future machine web (enfin, une des vms web). Par la suite, j’installerais un apache dessus pour commencer à monter les serveur Web, donc je vais de suite lui donner le bon nom…
Celle ci n’aura que deux interfaces réseau, une sur le vlan 20 (ip 10.20.1.30) et sur le vlan 99 (ip 10.99.1.30)
dom0# xen-create-image --hostname web --role debugo --size 10G --memory 1G--swap 1G --vcpus=1 --ip=99.99.99.99
Ensuite, on va modifier sa configuration dans le fichier /etc/xen/web.cfg
vif = [ 'vifname=web.0,ip=10.20.1.30 ,mac=00:16:3E:A2:00:20,bridge=brint.20', 'vifname=web.1,ip=10.99.1.30 ,mac=00:16:3E:A2:00:99,bridge=brint.99']
Et on va modifier le fichier interfaces :
dom0# mount /dev/vg0/web-disk /mnt/vm/ dom0# nano /mnt/vm/etc/network/interfaces
Mettez cela :
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.20.1.30 netmask 255.255.255.0 auto eth1 iface eth1 inet static address 10.99.1.30 netmask 255.255.255.0
On démonte et on lance :
dom0# umoun /mnt/vm dom0# xen create /etc/xen/web.cfg
Et un coup de ssh :
dom0# ssh 10.99.1.30
Évidement, à part pinger les machines des réseaux 10.20.1.0/24 et 10.99.1.0/24 elle ne peut rien faire.
Un wget vous donnera du vent, et l’apt-get update échouera…
Bref exactement ce qu’on veut, une machine qui ne peut rien faire à part communiquer avec ses copines.
Seulement, si l’on veut quand même récupérer des choses sur le net ou rien que pour l’installation de paquets, nous voila marron.
On va donc créer une machine qui va servir à faire le relais, notre fameux proxy interne.
II – Proxy Interne
A – Création de la VM
On créé la VM :
dom0# xen-create-image --hostname proxyint --role debugo --size 10G --memory 512M --swap 1G --vcpus=1 --ip=99.99.99.99
On modifie le fichier /etc/xen/proxyint.cfg :
vif = [ 'vifname=proxyint.0,ip=10.10.1.11 ,mac=00:16:3E:A0:11:10,bridge=brint.10', 'vifname=proxyint.1,ip=10.20.1.11 ,mac=00:16:3E:A0:11:20,bridge=brint.20', 'vifname=proxyint.2,ip=10.99.1.11 ,mac=00:16:3E:A0:11:99,bridge=brint.99']
Puis :
dom0# mount /dev/vg0/proxyint-disk /mnt/vm/ dom0# nano /mnt/vm/etc/network/interfaces
Pour coller cela :
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.10.1.11 netmask 255.255.255.0 gateway 10.10.1.3 auto eth1 iface eth1 inet static address 10.20.1.11 netmask 255.255.255.0 auto eth2 iface eth2 inet static address 10.99.1.11 netmask 255.255.255.0
On démonte, on lance et on se connecte dessus :
dom0# umoun /mnt/vm dom0# xen create /etc/xen/proxyint.cfg dom0# ssh 10.99.1.1
Ne reste plus qu’a installer nos deux logiciels.
B – APT-CACHER-NG
Le logiciel qui nous permet de faire cache apt. Simple à installer comme d’habitude :
proxyint# apt-get install apt-cacher-ng
Puis, modifiez le fichier /etc/apt-cacher-ng/acng.conf comme suit :
... Port:9999 ... BinAddress: 10.20.1.11
On relance :
proxyint# servive apt-cacher-ng restart
C – Squid
Pour installer Squid, suivez mon HowTo pour bénéficier du support SSL.
Une fois Squid3 installé :
proxyint# apt-get install ca-certificates
Dans le fichier de config /etc/squid3/squid.conf, (ce fichier est assez long, descendez (encore…) ) trouvez les lignes suivantes pour y ajouter :
#acl localnet src 10.0.0.0/8 # RFC1918 possible internal network #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network #acl localnet src fc00::/7 # RFC 4193 local private network range #acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines acl localnet src 10.20.1.0/24 # On créé l'acl localnet correspondant au réseau 10.20.1.0/24
Et un peu plus bas, autorisez en décommentant :
# Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed
http_access allow localnet # décommentez cette ligne
http_access allow localhost # And finally deny all other access to this proxy http_access deny all
On relance (assez long) avec :
proxyint# service squid3 restart
Voila qui termine pour les réglages de cette machine. On reviendra sur Squid plus tard dans un futur tutoriel.
III – Paramétrage machine WEB
On revient sur 10.99.1.30. Sur celle ci, deux choses à faire (pour le moment)
A – WGET
Comment faire en sorte que le root puisse utiliser wget ?
Créez un fichier /root/.wgetrc et mettez cela dedans :
http_proxy = http://10.20.1.11:3128/ https_proxy = http://10.20.1.11:3128/ use_proxy = on wait = 15
Testez, cela doit fonctionner. On peut donc maintenant récupérer des archives si besoin.
B – APT-GET
Pour dire à apt de passer par le proxy apt, c’est dans le fichier : /etc/apt/apt.conf.d/01proxy où vous ajoutez :
Acquire::http { Proxy "http://10.20.1.11:9999"; };
Testez avec un apt-get update, tout doit fonctionner.
C – Le reste
Pour les autres cas de figures, nous verrons au fur et a mesure quand les cas se présenteront.
IV – Paramétrage des autres machines
Maintenant, il faut créer ces deux fichiers sur les autres machines, IDS, Proxy et Proxyint.
Sur chaque machine :
/root/.wgetrc :
http_proxy = http://10.20.1.11:3128/ https_proxy = http://10.20.1.11:3128 use_proxy = on wait = 15
/etc/apt/apt.conf.d/01proxy :
Acquire::http { Proxy "http://10.20.1.11:9999"; };
V – Paramétrage routeur et règles firewall
Et la même chose pour la machine routeur (création des deux fichiers : /root/.wgetrc et /etc/apt/apt.conf.d/01proxy comme si dessus.).
Par contre le Firewall va nous empêcher que cela fonctionne. De plus, certaines règles ne sont plus nécessaires, on va donc le refaire :
Fichier /etc/init.d/firewall :
#!/bin/bash # On purge iptables -t filter -F iptables -t filter -X iptables -t nat -F iptables -t nat -X # Interdire toute connexion entrante, sortante ou forwardee iptables -t filter -P INPUT DROP iptables -t filter -P FORWARD DROP iptables -t filter -P OUTPUT DROP # Autoriser les connexions deja effectuees et les retours. iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT # Autoriser loopback iptables -t filter -A INPUT -i lo -j ACCEPT iptables -t filter -A OUTPUT -o lo -j ACCEPT # Autoriser ping iptables -t filter -A INPUT -p icmp -j ACCEPT iptables -t filter -A OUTPUT -p icmp -j ACCEPT # Autoriser la connexion ssh depuis le dom0 iptables -t filter -A INPUT -p tcp -s 10.99.1.1 --dport 22 -j ACCEPT # Autoriser le routeur a faire des requetes DNS, NTP (ntp uniquement vers le dom0) et vers le proxyint iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT iptables -t filter -A OUTPUT -p udp -d 10.99.1.1 --dport 123 -j ACCEPT iptables -t filter -A OUTPUT -p tcp -d 10.20.1.11 --dport 9999 -j ACCEPT iptables -t filter -A OUTPUT -p tcp -d 10.20.1.11 --dport 3128 -j ACCEPT # Autoriser les pings VM->EXT iptables -t filter -A FORWARD -p icmp -s 10.2.1.3 -j ACCEPT iptables -t filter -A FORWARD -p icmp -s 10.10.1.0/24 -j ACCEPT # Autoriser les requetes DNS VM->EXT iptables -t filter -A FORWARD -p udp -s 10.2.1.0/24 --dport 53 -j ACCEPT iptables -t filter -A FORWARD -p udp -s 10.10.1.0/24 --dport 53 -j ACCEPT # Autoriser les requetes HTTP PROXY INTERNE->EXT iptables -t filter -A FORWARD -p tcp -s 10.10.1.11 --dport 80 -j ACCEPT iptables -t filter -A FORWARD -p tcp -s 10.10.1.11 --dport 443 -j ACCEPT # Transfert du port 80 vers 10.10.1.10 et autorisation iptables -t nat -A PREROUTING -i eth0 -d IPFAILOVER -p tcp --dport 80 -j DNAT --to-destination 10.10.1.10 iptables -t filter -A FORWARD -p tcp -d 10.10.1.10 --dport 80 -j ACCEPT # Tout ce qui vient des VMS et est autorise est POSTROUTE pour sortir iptables -t nat -A POSTROUTING -o eth0 -s 10.2.1.0/24 -j SNAT --to IPFAILOVER iptables -t nat -A POSTROUTING -o eth0 -s 10.10.1.0/24 -j SNAT --to IPFAILOVER echo - OK
Et on applique :
routeur# /etc/init.d/firewall
VI – Modification squelette
On va rajouter nos deux nouveaux fichiers dans le répertoire /etc/xen-tools/skel2 que nous utilisons comme squelette pour nos VMs.
dom0# cd /etc/xen-tools/skel2 dom0# mkdir root && cd root dom0# touch .wgetrc
On vous mettez cela :
http_proxy = http://10.20.1.11:3128/ https_proxy = http://10.20.1.11:3128/ use_proxy = on wait = 15
Puis :
dom0# cd ../etc dom0# mkdir apt/apt.conf.d/ dom0# cd apt/apt.conf.d dom0# touch 01proxy
Qu’on remplit avec ceci :
Acquire::http { Proxy "http://10.20.1.11:9999"; };
Et voila qui clôture cette partie.
Nous allons voir ensuite la mise en place du serveur DNS, un des piliers de notre architecture.