Accueil Humour Macintosh Print66 Sélection Éditeur
  MacOS X | MacOS classique | Pourquoi ?
Cet élément comporte 5 parties :   Intro | 1 |2 | 3 |  4 | << Préc | Suiv >>

Une sophistication utile : configuration d'un firewall sous MacOS X Public Beta

Besoin d'être convaincu que l'alliance d'Unix et de MacOS nous permettra de regarder de haut Windows 2000 et Whistler ? Voici un exemple simple qui illustre comment une administration pointue peut-être mise en place sous MacOS X Public Beta, sans investir dans un truc comme Firewall One (pour mes confrères Macintoshiens, je les prie de voir le shareware IPNetRouter et de penser à quelque chose de dix fois plus compliqué...)

ipfw est une commande de firewall intégrée dans les fondations de MacOSX... Pour en savoir plus, vous pouvez taper la commande man ipfw

Comme ce n'est pas forcément très clair, voici ma configuration qui sans doute est très proche des besoins de pas mal de monde. J'ai plusieurs micro-ordinateurs connectés entre eux par Ethernet. Une machine sous MacOS X joue le rôle de passerelle Internet, en se connectant au réseau des réseaux par modem, grâce à l'application PPP Connect fournie par Apple.

Cette machine passerelle sous MacOS X qui joue le rôle de passerelle assure le partage de la seule adresse IP publique fournie par le fournisseur d'accès grâce au protocole NAT (Network Address Translation). Pour éviter des conflits entre les adresses IP de vos propres machines et celles sur Internet, vous devrez configurer votre réseau sous Ethernet pour utiliser des adresses réservées aux réseaux privés, du type 10.x.x.x, 172.16.x.x à 172.31.x.x ou 192.168.0.x à 192.168.255.x (voir la RFC1918).

Pour configurer le firewall et le NAT, vous aurez à vous connecter avec le profil utilisateur root (su root). Le mieux est ensuite de créer un script comme le mien, que j'ai appelé Firewall, et de l'adapter à vos besoins particuliers.

Exemple de script de configuration du Firewall et de NAT
#!/bin/sh

#
# Script de boot du Firewall
#

# rattache NAT a l'interface PPP
# rattachement dynamique car l'adresse n'est determinee
# qu'a la connexion pour la plupart des providers
/usr/sbin/natd -dynamic -interface ppp0

# Forcer la purge des regles courantes avant rechargement
/sbin/ipfw -f flush

# Diversion des paquets recus via l'interface PPP NAT
/sbin/ipfw -f add 800 divert natd all from any to any via ppp0

# Tout permettre sur la boucle locale (127.0.0.1)
/sbin/ipfw -f add 1000 allow ip from any to any via lo0

# Tout permettre sur Ethernet
/sbin/ipfw -f add 1001 allow ip from any to any via en0

# Autoriser les connections TCP que j'initialise sur le port PPP
/sbin/ipfw -f add 1005 allow tcp from any to any out xmit ppp0 setup

# Autoriser la suite d'une connection TCP deja etablie sur PPP
/sbin/ipfw -f add 1008 allow tcp from any to any via ppp0 established
#### /sbin/ipfw -f add 1009 allow all from any to any frag

# Autoriser ICMP (ping et traceroute)
/sbin/ipfw -f add 2500 allow icmp from any to any

# Autoriser les requetes DNS sur PPP
/sbin/ipfw -f add 2504 allow udp from any to any 53 out xmit ppp0
/sbin/ipfw -f add 2505 allow udp from any 53 to any in recv ppp0

# Autoriser les requetes DHCP/BOOTP sur PPP
/sbin/ipfw -f add 2508 allow udp from any to any 67-68 out xmit ppp0
/sbin/ipfw -f add 2509 allow udp from any 67-68 to any in recv ppp0

# Autoriser la synchronisation d'horloge NTP sur PPP
/sbin/ipfw -f add 2512 allow udp from any to any 123 out xmit ppp0
/sbin/ipfw -f add 2513 allow udp from any 123 to any in recv ppp0

# Autoriser iVisit (vidéoconférence) sur PPP
/sbin/ipfw -f add 2516 allow udp from any to any 9943 out xmit ppp0
/sbin/ipfw -f add 2517 allow udp from any 9943 to any in recv ppp0
/sbin/ipfw -f add 2520 allow udp from any to any 56768 out xmit ppp0
/sbin/ipfw -f add 2521 allow udp from any 56768 to any in recv ppp0
/sbin/ipfw -f add 2524 allow udp from any to any 9945 out xmit ppp0
/sbin/ipfw -f add 2525 allow udp from any 9945 to any in recv ppp0

#################################################
# Services entrants standards * * *
#################################################

# Permettre le serveur Web
/sbin/ipfw -f add 4002 allow tcp from any to any 80 setup

# Permettre le FTP
/sbin/ipfw -f add 4003 allow tcp from any to any 20-21 setup

# Refuser tout le reste
/sbin/ipfw -f add 60001 deny ip from any to any

 



En tant que root, vous pouvez modifier ce script comme vous l'entendez et le relancer autant de fois que nécessaire pour arriver à la configuration qui vous plait.

Je pense que ce script est assez documenté pour ne pas nécessiter de longs commentaires supplémentaires... Notez juste que les règles ont été classées par ordre de priorité pour faciliter la lecture, et que j'ai pris soin de mettre une règle (60001) pour refuser tout ce qui n'est pas explicitement autorisé.

Notez également que la règle 1005 suppose que vous et toutes les personnes qui utilisent vos ordinateurs savez ce que vous faites lorsque vous installez un programme... Cette règle dit que toutes les demandes de connexions TCP venant de l'intérieur de votre réseau sont autorisées. Si vous installez sans réfléchir tout ce qui arrive via le Net, bonjour les dégâts potentiels... Un pirate peut par exemple berner un utilisateur chez vous et l'amener à installer un programme qui du point de vue du firewall semblera se comporter comme un navigateur Web, mais qui en fait viendra se connecter chez le pirate et lui permettra ensuite de prendre le contrôle de l'ensemble de votre réseau... Vous comprenez mieux pourquoi dans MacOS X n'importe qui ne peut pas installer une application ?

Pour l'instant vous êtes root, et avant d'approfondir ces préoccupations, il vous reste à faire en sorte que votre beau script de firewall soit lancé automatiquement au démarrage de votre machine.

Créez s'il n'existe pas encore le répertoire /Library/StartUpItems/Firewall et installez-y :

- votre script Firewall (que vous protègerez avec les droits systèmes adéquats par la commande chmod 754 Firewall)

- un fichier de paramètre StartupParameters.plist qui contiendra :

contenu du fichier /Library/StartUpItems/Firewall/Firewall
{
Description = "firewall";
Provides = ("Firewall");
Requires = ("Network");
OrderPreference = "None";
Messages =
  {
  start = "Starting NAT/firewall";
  stop = "Stopping NAT/firewall";
  };
}

C'est du XML... mais je pense que c'est assez clair pour un anglophone.

StartupParameters.plist sera protégé avec la commande chmod 644 StartupParameters.plist

Cet élément comporte 5 parties :   Intro | 1 |2 | 3 |  4 | << Préc | Suiv >>
  MacOS X | MacOS classique | Pourquoi ?