L'objectif esr de configurer une machine sous Linux, munie de trois cartes réseau 10/100 Base T, pour en faire un firewall. Pour visualiser les trames qui sont échangées sur le réseau, vous utiliserez un outil d'analyse de trames comme tcpdump, ethereal ou autre. Enfin pour filtrer le trafic et faire de la translation de port (PAT) la fonctionnalité iptables du noyau Linux sera utilisée. Un outil comme iptraf est intéressant pour visualiser la translation de port sur le routeur.
Le rôle d'un routeur (ou passerelle/gateway en terminologie IP) est de "router" les paquets entrants par une interface, vers une de ses interfaces de sortie, en fonction de l'adresse IP du destinataire (en fait du réseau auquel il appartient).
Le routeur dispose d'une table de routage interne, visible avec la commande route.
Exemple de table de routage :
adminbdd opt # route Table de routage IP du noyau Destination Passerelle Genmask Indic Metric Ref Use Iface 192.168.5.0 * 255.255.255.0 U 0 0 0 eth0 169.254.0.0 * 255.255.0.0 U 0 0 0 eth0 default hp5406-05.lild0 0.0.0.0 UG 0 0 0 eth0
Le noyau Linux sait router les paquets entre différentes interfaces et vers des réseaux. Il faut que la fonction "ip forwarding" soit activée. Cela est réalisable dynamiquement :
adminbdd opt # echo 0/1 > /proc/sys/net/ipv4/ip_forward
0 pour désactiver (la valeur par défaut), 1 pour activer.
On peut également modifier directement le fichier de configuration en ajoutant la directive FORWARD_IPV4=yes dans /etc/sysconfig/network pour les Red hat-like et IP_FORWARD=yes dans /etc/network/option pour les Debian-like.
Le filtrage des paquets au niveau IP, transport ou adresse est utilisé pour des raisons de sécurité. Par exemple autoriser ou interdire l'accès à un service, à un réseau ou à une machine (voir fiche de cours).
Les règles de filtrage sont analysées de manière séquentielle, dès qu'une règle correspond au paquet analysé, elle est appliquée.
Chaque paquet est analysé au travers des chaînes. Si un filtre correspond, la règle associée est appliquée au paquet (ACCEPT, DROP, MASQ ...). Sinon le filtre suivant est testé. À la fin de chaque chaîne un traitement "par défaut" est appliqué en dernier ressort (ACCEPT/DROP).
Le but de cet exercice est d'écrire les règles de filtrage pour le réseau présenté ci-dessous. Pour cela, nous allons utiliser mon outil favori Netkit mais dans la deuxième partie principalement. Ici, il ne s'agit que de la partie théorique.
Petit rappel de la notation utilisée pour les question avant de commencer. De plus, il est bon avant de commencer de réinitialiser les règles d'iptables avec un les options -F et -X.
Notation : A = 195.0.0, B = 172.16, A.0 = toutes les machines du réseau 1, B.0 = toutes les machines du réseau B A.1, B.1, indiquent respectivement 195.0.0.1 et 172.16.0.1
Écrire les règles de filtrage iptables qui répondent aux différents problèmes :
Interdire tous les paquets de A.0 vers B.0
vanvincq@CP2L ~ $ iptables -A FORWARD -s 195.0.0.0/24 -d 172.16.0.0/24 -j DROP
Interdire tous les paquets de A.0 vers B.1
vanvincq@CP2L ~ $ iptables -A FORWARD -s 195.0.0.0/24 -d 172.16.0.1 -j DROP
Interdire tous les paquets NetBIOS À destination de A.254
Masquer toutes les adresses de A.0 pour tous les protocoles
Masquer toutes les adresses de A.0 pour tous les protocoles uniquement pour les services SMTP et POP3
N’autoriser que les paquets de A.1 vers B.1, interdire tout le reste
Interdire les paquets de A.1 vers B.1, autoriser tout le reste
N’autoriser que les paquets telnet de A.1 vers B.1, interdire tout le reste
N’autoriser que les paquets TCP de A.0 vers B.0, interdire tout le reste.
Schéma d’un réseau simple. Le routeur a trois interfaces réseau. Les segments de classe A et le segment de classe B peuvent être réalisés à l’aide de simple machines et de câbles croisés.
Pour ce Tp, nous allons réutiliser le schéma de l'exercice précédent. On utilisera pour cela trois machines C, R et S. R fait référence au routeur, C fait référence au client installé sur le réseau de classe B et S fait référence au serveur installé sur le réseau de classe A.
C est sur un réseau "privé" (C sera client pour les tests).
S est sur un réseau "public".
R servira de routeur et pare-feu (firewall) entre votre réseau privé et le réseau public.
Voici l'organisation de mon laboratoire Netkit pour la mise en oeuvre de l'exercice :
adminbdd lab_iptables # cat lab.conf LAB_DESCRIPTION="Exercice applicatif iptables" LAB_VERSION=1.0 LAB_AUTHOR="Vanvincq Clément" LAB_EMAIL=vanvincq.clement@gmail.com LAB_WEB=http://www.eof.eu.org/ serveur[0]="classeA" client[0]="classeB" routeur[0]="classeB" routeur[1]="classeA" routeur[2]="classeC"
adminbdd lab_iptables # cat client.startup ifconfig eth0 132.10.0.10 netmask 255.255.255.0 broadcast 132.10.0.255 up route add default gw 132.10.0.1
adminbdd lab_iptables # cat serveur.startup ifconfig eth0 32.5.5.10 netmask 255.255.255.0 broadcast 32.5.5.255 up route add default gw 32.5.5.1
adminbdd lab_iptables # cat routeur.startup ifconfig eth0 132.10.0.1 netmask 255.255.255.0 broadcast 132.10.0.255 up ifconfig eth1 32.5.5.1 netmask 255.255.255.0 broadcast 32.5.5.255 up ifconfig eth2 200.10.0.1 netmask 255.255.255.0 broadcast 200.10.0.255 up
Tout est fin prêt, il ne reste plus qu'à démarrer avec la commande lstart.
Maintenant, nous allons vérifer que les configurations des différentes interfaces soient correctes.
routeur:~# ifconfig eth0 Link encap:Ethernet HWaddr 56:c8:11:04:db:65 inet addr:132.10.0.1 Bcast:132.10.0.255 Mask:255.255.255.0 inet6 addr: fe80::54c8:11ff:fe04:db65/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:244 (244.0 B) TX bytes:468 (468.0 B) Interrupt:5 eth1 Link encap:Ethernet HWaddr 0a:b3:df:6d:ee:4a inet addr:32.5.5.1 Bcast:32.5.5.255 Mask:255.255.255.0 inet6 addr: fe80::8b3:dfff:fe6d:ee4a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:384 (384.0 B) TX bytes:468 (468.0 B) Interrupt:5 eth2 Link encap:Ethernet HWaddr 2e:31:6b:dd:4a:5b inet addr:200.10.0.1 Bcast:200.10.0.255 Mask:255.255.255.0 inet6 addr: fe80::2c31:6bff:fedd:4a5b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:468 (468.0 B) Interrupt:5 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:2 errors:0 dropped:0 overruns:0 frame:0 TX packets:2 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:100 (100.0 B) TX bytes:100 (100.0 B) routeur:~# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 132.10.0.0 * 255.255.255.0 U 0 0 0 eth0 200.10.0.0 * 255.255.255.0 U 0 0 0 eth2 32.5.5.0 * 255.255.255.0 U 0 0 0 eth1
client:~# ifconfig eth0 Link encap:Ethernet HWaddr ee:ba:7b:99:bc:a5 inet addr:132.10.0.10 Bcast:132.10.0.255 Mask:255.255.255.0 inet6 addr: fe80::ecba:7bff:fe99:bca5/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:384 (384.0 B) TX bytes:468 (468.0 B) Interrupt:5 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:2 errors:0 dropped:0 overruns:0 frame:0 TX packets:2 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:100 (100.0 B) TX bytes:100 (100.0 B)
serveur:~# ifconfig eth0 Link encap:Ethernet HWaddr 0a:a7:1c:26:58:fa inet addr:32.5.5.10 Bcast:32.5.5.255 Mask:255.255.255.0 inet6 addr: fe80::8a7:1cff:fe26:58fa/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:168 (168.0 B) TX bytes:468 (468.0 B) Interrupt:5 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:2 errors:0 dropped:0 overruns:0 frame:0 TX packets:2 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:100 (100.0 B) TX bytes:100 (100.0 B)
Rien d'anormal, tout est bien à sa place. Maintenant, envoyons quelques requêtes ICMP pour tester la connexion avec les interfaces du routeur.
client:~# ping -c 3 132.10.0.1; ping -c 3 32.5.5.1; ping -c 3 200.10.0.1 PING 132.10.0.1 (132.10.0.1) 56(84) bytes of data. 64 bytes from 132.10.0.1: icmp_seq=1 ttl=64 time=0.208 ms 64 bytes from 132.10.0.1: icmp_seq=2 ttl=64 time=0.183 ms 64 bytes from 132.10.0.1: icmp_seq=3 ttl=64 time=0.181 ms --- 132.10.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.181/0.190/0.208/0.020 ms PING 32.5.5.1 (32.5.5.1) 56(84) bytes of data. 64 bytes from 32.5.5.1: icmp_seq=1 ttl=64 time=0.136 ms 64 bytes from 32.5.5.1: icmp_seq=2 ttl=64 time=0.227 ms 64 bytes from 32.5.5.1: icmp_seq=3 ttl=64 time=0.226 ms --- 32.5.5.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 0.136/0.196/0.227/0.044 ms PING 200.10.0.1 (200.10.0.1) 56(84) bytes of data. 64 bytes from 200.10.0.1: icmp_seq=1 ttl=64 time=0.138 ms 64 bytes from 200.10.0.1: icmp_seq=2 ttl=64 time=0.189 ms 64 bytes from 200.10.0.1: icmp_seq=3 ttl=64 time=0.225 ms --- 200.10.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2008ms rtt min/avg/max/mdev = 0.138/0.184/0.225/0.035 ms
serveur:~# ping -c 3 32.5.5.1; ping -c 3 132.10.0.1; ping -c 3 200.10.0.1 PING 32.5.5.1 (32.5.5.1) 56(84) bytes of data. 64 bytes from 32.5.5.1: icmp_seq=1 ttl=64 time=9.96 ms 64 bytes from 32.5.5.1: icmp_seq=2 ttl=64 time=0.184 ms 64 bytes from 32.5.5.1: icmp_seq=3 ttl=64 time=0.206 ms --- 32.5.5.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2005ms rtt min/avg/max/mdev = 0.184/3.450/9.960/4.603 ms PING 132.10.0.1 (132.10.0.1) 56(84) bytes of data. 64 bytes from 132.10.0.1: icmp_seq=1 ttl=64 time=0.249 ms 64 bytes from 132.10.0.1: icmp_seq=2 ttl=64 time=0.222 ms 64 bytes from 132.10.0.1: icmp_seq=3 ttl=64 time=0.241 ms --- 132.10.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 1998ms rtt min/avg/max/mdev = 0.222/0.237/0.249/0.016 ms PING 200.10.0.1 (200.10.0.1) 56(84) bytes of data. 64 bytes from 200.10.0.1: icmp_seq=1 ttl=64 time=0.133 ms 64 bytes from 200.10.0.1: icmp_seq=2 ttl=64 time=0.187 ms 64 bytes from 200.10.0.1: icmp_seq=3 ttl=64 time=0.229 ms --- 200.10.0.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2024ms rtt min/avg/max/mdev = 0.133/0.183/0.229/0.039 ms
On peut constater que toutes les interfaces sont bien accessibles, que ce soit à partir du client ou du serveur. Peut-être vous demandez-vous pourquoi l'interface eth2 est accessible ? La raison est simple. Dans Netkit, les hôtes ont dans leurs configurations de base un ip forwarding opérationnel. Ce qui est bien dans notre cas, surtout pour l'hôte jouant le rôle de routeur. Bien entendu, rien ne nous empêche de le désactiver a posteriori.
Vérification du fichier /proc/sys/net/ipv4/ip_forward :
routeur:~# cat /proc/sys/net/ipv4/ip_forward 1 serveur:~# cat /proc/sys/net/ipv4/ip_forward 1 client:~# cat /proc/sys/net/ipv4/ip_forward 1
Il ne nous reste plus, dans cette première partie, qu'à installer le programme iptraf sur le routeur à partir de cette archive pré-compilée.
routeur:/hosthome# dpkg -i iptraf_3.0.0-8_i386.deb Selecting previously deselected package iptraf. (Reading database ... 31970 files and directories currently installed.) Unpacking iptraf (from iptraf_3.0.0-8_i386.deb) ... Setting up iptraf (3.0.0-8) ... Processing triggers for man-db ... routeur:/hosthome# iptraf -h Syntax: iptraf [ -f ] [ -u ] [ { -i iface | -g | -d iface | -s iface | -z iface | -l iface } [ -t timeout ] [ -B ] [ -L logfile ] [-I interval] ] Issue the iptraf command with no parameters for menu-driven operation. These options can also be supplied to the command: -i iface - start the IP traffic monitor (use "-i all" for all interfaces) -g - start the general interface statistics -d iface - start the detailed statistics facility on an interface -s iface - start the TCP and UDP monitor on an interface -z iface - shows the packet size counts on an interface -l iface - start the LAN station monitor ("-l all" for all LAN interfaces) -B - run in background (use only with one of the above parameters) -t timeout - when used with one of the above parameters, tells the facility to run only for the specified number of minutes (timeout) -L logfile - specifies an alternate log file for any direct invocation of a facility from the command line. The log is placed in /var/log/iptraf if path is not specified. -I interval - specifies the log interval for all facilities except the IP traffic monitor. Value is in minutes. -f - clear all locks and counters. Use with great caution. Normally used to recover from an abnormal termination. -u - allow use of unsupported interfaces as ethernet devices. IPTraf 3.0.0 Copyright (c) Gerard Paul Java 1997-2004
À partir de notre réseau, nous allons ajouter quelques nouvelles règles :
Interdir toutes les requêtes du Client vers le Serveur (extérieur).
Comme on se place au niveau d'un routeur, on utilise la directive FORWARD de la table FILTER; le but étant de contrôler les trames passant d'une interface à l'autre.
routeur:~# iptables -A FORWARD -s 132.10.0.10 -d 32.5.5.10 -j DROP routeur:~# iptables -L --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 DROP all -- 132.10.0.10 32.5.5.10 Chain OUTPUT (policy ACCEPT) num target prot opt source destination
Envoi d'une requête ICMP en provenance du Client vers le Serveur.
client:~# ping -c 5 32.5.5.10 PING 32.5.5.10 (32.5.5.10) 56(84) bytes of data. --- 32.5.5.10 ping statistics --- 5 packets transmitted, 0 received, 100% packet loss, time 4034ms
n.b : Si l'on essaye de joindre le Client avec un ping à partir du Serveur, on remarquera que la requête échoue. Cela est simplement dû au fait que les paquets traversent bien le routeur mais sont bloqués lors du retour.
Autoriser toutes les requêtes du Client vers le Serveur.
On va supprimer l'ancienne règle afin de repartir du bon pied.
routeur:~# iptables -F routeur:~# iptables -A FORWARD -s 132.10.0.10 -d 32.5.5.10 -j ACCEPT routeur:~# iptables -L --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 132.10.0.10 32.5.5.10 Chain OUTPUT (policy ACCEPT) num target prot opt source destination
client:~# ping -c 5 32.5.5.10 PING 32.5.5.10 (32.5.5.10) 56(84) bytes of data. 64 bytes from 32.5.5.10: icmp_seq=1 ttl=63 time=19.5 ms 64 bytes from 32.5.5.10: icmp_seq=2 ttl=63 time=0.355 ms 64 bytes from 32.5.5.10: icmp_seq=3 ttl=63 time=0.280 ms 64 bytes from 32.5.5.10: icmp_seq=4 ttl=63 time=0.361 ms 64 bytes from 32.5.5.10: icmp_seq=5 ttl=63 time=0.330 ms --- 32.5.5.10 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4019ms rtt min/avg/max/mdev = 0.280/4.182/19.585/7.701 ms
Interdir tout passage sur la chaîne FORWARD en laissant l’option ACCEPT sur les chaînes INPUT et OUTPUT.
routeur:~# iptables -F routeur:~# iptables -A FORWARD -j DROP routeur:~# iptables -A INPUT -j ACCEPT routeur:~# iptables -A OUTPUT -j ACCEPT routeur:~# iptables -L --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 DROP all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere
Dans ce cas, il est impossible au Client de communiquer en dehors de son réseau (car le forwarding est complétement désactivé donc Client se retrouve isolé). Mais étant donné que le INPOUT et OUPOUT sont acceptés, Client peut très bien envoyer une requête HTTP au routeur par le port 80 (je sais que c'est bizarre comme situation mais c'est pour l'exemple xD).
client:~# ping -c 3 32.5.5.10 PING 32.5.5.10 (32.5.5.10) 56(84) bytes of data. --- 32.5.5.10 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2016ms routeur:~# /etc/init.d/apache2 start Starting web server: apache2. client:~# telnet 132.10.0.1 80 Trying 132.10.0.1... Connected to 132.10.0.1. Escape character is '^]'. GET <html><body><h1>It works!</h1></body></html> Connection closed by foreign host.
Activer le masquage d’adresse pour toutes les machines du réseau auquel appartient le Client (132.0.0.0/24) vers tous les autres réseaux.
Encore une fois, on supprime les anciennes règles avant de commencer. À noter que sans préciser de table, c'est la table FILTER qui est prise par défaut. On aura dans notre cas besoin de la table NAT.
routeur:~# iptables -F routeur:~# iptables -t nat -A POSTROUTING -s 132.10.0.0/24 -j MASQUERADE routeur:~# iptables -t nat -L --line-numbers Chain PREROUTING (policy ACCEPT) num target prot opt source destination Chain POSTROUTING (policy ACCEPT) num target prot opt source destination 1 MASQUERADE all -- 132.10.0.0/24 anywhere Chain OUTPUT (policy ACCEPT) num target prot opt source destination
Ok, testons le masquage d'adresse. Pour cela, Client envoit un ping à Serveur :
client:~# ping -c 2 32.5.5.10 PING 32.5.5.10 (32.5.5.10) 56(84) bytes of data. 64 bytes from 32.5.5.10: icmp_seq=1 ttl=63 time=0.501 ms 64 bytes from 32.5.5.10: icmp_seq=2 ttl=63 time=0.380 ms --- 32.5.5.10 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1015ms rtt min/avg/max/mdev = 0.380/0.440/0.501/0.064 ms serveur:~# tcpdump tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 14:31:32.061877 IP 32.5.5.1 > 32.5.5.10: ICMP echo request, id 27138, seq 1, length 64 14:31:32.064673 arp who-has 32.5.5.1 tell 32.5.5.10 14:31:32.064789 arp reply 32.5.5.1 is-at 0a:b3:df:6d:ee:4a (oui Unknown) 14:31:32.064796 IP 32.5.5.10 > 32.5.5.1: ICMP echo reply, id 27138, seq 1, length 64 14:31:33.065232 IP 32.5.5.1 > 32.5.5.10: ICMP echo request, id 27138, seq 2, length 64 14:31:33.065266 IP 32.5.5.10 > 32.5.5.1: ICMP echo reply, id 27138, seq 2, length 64 14:31:38.064212 arp who-has 32.5.5.10 tell 32.5.5.1 14:31:38.064230 arp reply 32.5.5.10 is-at 0a:a7:1c:26:58:fa (oui Unknown)
Et pour comparer, réessayons dans l'autre sens :
serveur:~# ping -c 1 132.10.0.10 PING 132.10.0.10 (132.10.0.10) 56(84) bytes of data. 64 bytes from 132.10.0.10: icmp_seq=1 ttl=63 time=0.380 ms --- 132.10.0.10 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.380/0.380/0.380/0.000 ms client:~# tcpdump tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 14:32:31.518900 IP 32.5.5.10 > 132.10.0.10: ICMP echo request, id 3330, seq 1, length 64 14:32:31.522337 IP 132.10.0.10 > 32.5.5.10: ICMP echo reply, id 3330, seq 1, length 64 14:32:36.515788 arp who-has 132.10.0.1 tell 132.10.0.10 14:32:36.515950 arp reply 132.10.0.1 is-at 56:c8:11:04:db:65 (oui Unknown)
Bien, tout fonctionne parfaitement.
Activer le masquage d’adresse pour toutes les machines du réseau auquel appartient le Client vers un seul des autres réseaux. Par exemple si l'on est sur le domaine vert.org, activer le masquage vers bleu.org. Les paquets ne devront pas passer vers noir.org ou rouge.org.
routeur:~# iptables -t nat -F routeur:~# iptables -t nat -A POSTROUTING -s 132.10.0.0/24 -d 32.5.5.0/24 -j MASQUERADE routeur:~# iptables -t nat -L --line-numbers Chain PREROUTING (policy ACCEPT) num target prot opt source destination Chain POSTROUTING (policy ACCEPT) num target prot opt source destination 1 MASQUERADE all -- 132.10.0.0/24 32.5.5.0/24 Chain OUTPUT (policy ACCEPT) num target prot opt source destination
Restaurer l’état réalisé au point 4 (après masquage). Activez iptraf sur l’interface publique. Vérifier que seule, l’adresse ip de l’interface du réseau privé apparaît et que toutes les autres sont "masquées". Noter la traduction de port et identifiez les sessions.
Restauration de l'était du point 4 :
routeur:~# iptables -t nat -F routeur:~# iptables -t nat -A POSTROUTING -s 132.10.0.0/24 -j MASQUERADE
Comme pour la question 4, on peut constater le masquage d'IP.
Relevez dans les fichiers /etc/protocol et /etc/services les ports et noms des protocoles utilisés par les services ftp et http. Refuser tout trafic du Client vers l’extérieur à destination de ces ports. Vérifier que telnet est accepté.
N’autoriser au Client l’accès qu’à une seule machine (par exemple le client de rouge.org si vous êtes sur vert.org), refuser tout le reste.
Refuser tout accès à la machine (192.168.x.1) de votre réseau (192.168.x.0) vers le réseau (192.168.y.0).
Relever les ports et protocoles utilisés par les services de résolution de noms. Construiser les règles afin qu’elles répondent au problème suivant. On désire que : toutes les machines du réseau privé puissent avoir accès à tous les autres services de n’importe quel réseau, la machine C de votre réseau privé ne peut pas envoyer de requête UDP/DOMAIN vers la machine Serveur.
Pour les deux traitements qui suivent, utiliserer deux écritures, dont l’opérateur "!" (not) qui permet d’obtenir des compléments. Autoriser toutes les requêtes qui sortent vers l’extérieur, sauf celles qui vont sur un port ftp. N’autoriser aucune requête hormis celles qui sont à destination du port 80.