20 avril 2024

Tuto Virtualisation V.2018 : Partie VII, le proxy interne avec Squid et Apt-cacher-ng

Septiè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 Nginx 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:A0:30:20,bridge=brint.20',
                'vifname=web.1,ip=10.99.1.30 ,mac=00:16:3E:A0:30: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

Avant, il fallait recompiler Squid pour avoir le support du SSL. Sur Debian 9, la version disponible dans les dépôts est déjà opérationnelle, du coup un simple :

proxyint# apt-get install squid3

suffit à installer le logiciel.
Une fois Squid3 installé :

proxyint# apt-get install ca-certificates

Dans le fichier de config  /etc/squid/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 squid 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 (par ex, wget google.fr) cela doit fonctionner.

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, Proxyint et Routeur. Oui, ces machines peuvent s’en passer, mais autant utiliser les fonctionnalités de cache pour leurs requêtes internet.
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";
};

Sur chaque machine (IDS, Proxy, Proxyint et Routeur et Dom0), installez également le paquet :

# apt-get install ca-certificates

 

V – Paramétrage routeur et règles firewall

Certaines règles ne sont plus nécessaires, on va donc le refaire :
Fichier /etc/init.d/firewall :
Remplacez :

# HTTP/HTTPS // ROUTEUR -> EXT
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT

Par :

# HTTP/HTTPS // ROUTEUR -> EXT
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

Puis supprimez (IDS) :

iptables -t filter -A FORWARD -p tcp -s 10.2.1.3 --dport 80 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -s 10.2.1.3 --dport 443 -j ACCEPT

et (Proxy) :

iptables -t filter -A FORWARD -p tcp -s 10.10.1.10 --dport 80 -j ACCEPT
iptables -t filter -A FORWARD -p tcp -s 10.10.1.10 --dport 443 -j ACCEPT

Ajoutez :

####################
# PROXY INT
# PING, DNS, HTTP(S)
iptables -t filter -A FORWARD -p icmp -s 10.10.1.11 -j ACCEPT
iptables -t filter -A FORWARD -p udp -s 10.10.1.11 --dport 53 -j ACCEPT
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

et ajoutez :

iptables -t nat -A POSTROUTING -o eth0 -s 10.10.1.11 -j SNAT --to 212.83.179.33

A des fins de bon fonctionnement jusqu’à la partie suivante, ajoutez également :

iptables -t filter -A FORWARD -p icmp -s 10.10.1.0/24 -j ACCEPT
iptables -t filter -A FORWARD -p udp -s 10.10.1.0/24 --dport 53 -j ACCEPT

Et on applique :

routeur# /root/script/firewall

 

VI – Modification squelette et rôle

A – 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
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";
};

 

B – Modification du rôle

Éditez le fichier /etc/xen-tools/role.d/tuto et ajoutez après l’installation de net-tools :

installDebianPackage ${prefix} ca-certificates

Et voila qui clôture cette partie.
Nous allons voir ensuite la mise en place du serveur DNS, un des piliers de notre architecture.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *