8 mai 2021

Tuto Virtualisation – Partie VI, le proxy interne avec Squid et Apt-cacher-ng

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.

Laisser un commentaire

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