Javi Polo A propos de l'auteur: J'ai 18 ans et je subit les études au lycée. L'informatique est ma passion, et j'espère être admis à UIB pour démarrer des études en Ingénierie des Télécommunications et en Informatique. J'aime la musique hardcore, et je participe à un groupe appelé Niko-Chan's Kingdom. Pas grand chose d'autre à dire, sauf que j'ai une super copine appelée Xiska 0:) Contacter l'auteur |
TCPD et pare-feu (firewall) avec IPFWADMRésumé: Cet article décrit très brièvement comment configurer les services inetd pour améliorer la sécurité de votre système. Nous nous focaliserons sur l'outil IPFWADM pour administrer et configurer les services inetd.
Pour commencer, il nous faut une idée précise des fonctionalités
d'inetd. A la base, inetd est un démon qui contrôle
les services fournis par le système aux hôtes connectés
à travers le réseau. Il est possible qu'inetd ne
soit pas configuré par défaut sur un système pour
contrôler les services, la première chose à faire est
donc d'éditer le fichier /etc/inetd.conf et vérifier
quels sont les services réellement contrôlés par inetd
(toutes les lignes qui ne commencent pas par #). Le premier conseil à
suivre est de ne pas activer plus de services que nécessaire, ce
qui permet d'éviter les attaques à travers des démons
qui ne sont de toute façon pas utilisés. Je suppose que le
lecteur a une copie de son fichier inetd.conf sous la main, je
peux donc expliquer plus précisément ce qu'il définit.
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -aLe premier mot correspond au service offert (dans ce cas "ftp", et l'on peut ensuite vérifier dans le fichier /etc/services à quel port ce service est attaché). Le second champ correspond au type de socket (point de communication) ouverte. Les types possibles sont: stream (comme dans l'exemple), dgram, raw, rdm et seqpacket. Le champ suivant est le protocole à utiliser. Ce protocole doit être déclaré dans le fichier /etc/protocols. Le protocole TCP doit exister dans ce fichier. Après le protocole, on trouve le champ wait/nowait. Il devrait toujours indiquer nowait, sauf pour les sockets de type datagramme (dgram); dans ce cas, on indiquera nowait si le serveur supporte les unités d'exécution (threads) multiples, ou wait si le serveur est à unité d'exécution simple. La raison est qu'un système à multiple unités d'exécution, lance une nouvelle unité d'exécution à chaque requête de connexion, puis libère la socket. Il est donc prêt à traiter d'autres requêtes, d'où l'utilisation de nowait. Le système à unité d'exécution unique ne peut faire la même chose, il faut donc indiquer wait. Il existe une variation supplémentaire, on aurait pu écrire nowait.50 -- indiquant le nombre maximum (50) de démons pouvant être lancés en une minute (ou de demandes acceptées, selon le point de vue). La valeur par défaut est 40. Le cinquième champ indique le nom de l'utilisateur sous lequel le démon tourne, dans notre exemple ftp tourne sous l'identification d'utilisateur (userid) root. Les champs suivants sont le programme lancé (sixième champ) et les paramètres qui lui sont passés. Dans l'exemple, le démon tcpd est lancé avec l'argument in.ftpd et les paramètres -l -a. Ici apparaît la partie la plus intéressante de ce paragraphe, le démon tcpd. tcpd est un démon qui filtre les requêtes de connexion, et réalise l'action correspondant à l'argument fourni et à l'adresse IP de la requête. Les fichiers /etc/hosts.allow et /etc/hosts.deny permettent d'autoriser ou refuser un service. En principe, le fichier /etc/hosts.deny indique les hôtes pour lesquels un démon est refusé, et /etc/hosts.allow donne les hôtes ayant accès à un démon. Le format de ces fichiers est: DAEMON: IP[: OPTION1 [: OPTION2 ]]où DAEMON peut être le démon à lancer, comme in.ftpd dans l'exemple, ou la constante prédéfinie ALL qui fait référence à tous les démons. IP peut être une adresse IP spécifique, une URL, une plage d'adresses IP (ou d'URL), et peut comprendre l'un des jokers que je vais présenter. Pour indiquer une plage d'adresses IP on peut utiliser la notation: `123.32.' qui représente toutes les adresses IP de la forme 123.32.XXX.XXX. De même une plage d'URL peut être écrite sous la forme `.ml.org' qui représente tous les sous domaines de ml.org Une façon plus traditionnelle de spécifier une plage d'adresses IP est la forme IP/MASK. De cette manière, la plage 127.0.0.0 à 127.0.255.255 s'écrit 127.0.0.0/255.255.0.0. Les jokers sont:
NOTE: une larme est un DoS (Denial of Service -Refus de Service
, une attaque pour provoquer un redémarrage ou une réinitialisation
du système). Cette attaque est basée sur une bogue dans la
défragmentation des paquets TCP que la plupart des systèmes
d'exploitation présentent (ou plutôt présentaient,
car les noyaux ont été corrigés depuis). Les données
envoyées sur Internet utilisent la suite de protocoles TCP/IP, aussi
utilisée sur d'autres réseaux comme les intranets. TCP s'occupe
de découper les données en paquets, qui sont passés
à IP qui les envoie à la machine de destination; lorsque
les paquets arrivent à destination, TCP vérifie puis ré-assemble
les paquets, afin de reconstituer les données. L'attaque mentionnée
(et de nombreuses autres basées sur le même principe) exploite
le fait que de nombreux systèmes d'exploitation ne vérifient
pas la taille des paquets. Si les paquets sont trop petits, la reconstitution
des données pose problème. Exemples: #hosts.allow ALL: 127.0.0.1 # Autorise l'acces de la machine locale a tous les services in.ftpd: ALL: spawn (wavplay /usr/share/sounds/intruder.wav & ) # Autorise l'acces FTP a n'importe qui, mais lance # un signal sonore (pour que je sois averti) in.telnetd: ALL: twist ( teardrop %h %h ) # envoie une "larme" à n'importe qui # essaye d'entrer via telnet #fin #hosts.deny ALL: `.bsa.org' # interdit l'entrée depuis le domaine bsa.org in.fingerd: ALL # service finger interdit :) #finVoila ce que j'ai à dire sur tcpd. J'ai déjà mentionné que je n'étais pas un expert. Je recommande d'expérimenter plusieurs configuration, et de lire les pages du manuel (tcpd, host_access(5)), je suis persuadé que le lecteur en apprendra beaucoup plus ainsi que je ne pourrais enseigner. Passons maintenant à l'outil IPFWADM. Un prérequis est que le noyau supporte IP Firewalling ( Networking -> Network firewalls + IP: firewalling ). Si nécessaire recompilez le noyau et relancez votre machine, vous serez ensuite prêts à utiliser cet outil. IPFWADM permet entre autre de gérer l'entrée et la sortie des packets TCP, UDP et ICMP (je ne discuterai ici que cette application). En bref, l'administrateur peut définir quels sont les paquets admis à entrer, en spécifiant des adresses ou des plages d'adresses IP, en spécifiant les ports autorisés, avec quel protocole, et toutes les combinaisons possibles... Le même degré de contrôle est fourni pour les paquets sortants. ipfwadm a plusieurs paramètres principaux:
Les options pour ces paramètres sont:
ipfwadm -I -i a -S 127.0.0.1 et pour refuser les paquets qui proviennent de 123.34.22.XXX :
ensuite pour interdire tout accès au port NETBIOS sauf pour l'adresse
IP 111.222.123.221:
Ceci terminera mon article, un peu pauvre peut-être mais ma connaissance est elle aussi limitée O:) Traduit par Jean-Denis Girard. |
This website is
maintained by Miguel Angel Sepulveda
© Javi Polo 1998 LinuxFocus 1998 |