User Tools

Site Tools


informatique:linux:tcp_wrappers
no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


Previous revision
informatique:linux:tcp_wrappers [2013/10/14 20:44] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +{{tag>sécurité tcp}}
 +
 +======TCP Wrappers======
 +
 +La plupart des daemons actuels ont leur propres mécanismes de sécurité (tels httpd, smbd ou squid) ; //jadis// il était très courants qu'un deamon utilise une couche de sécurité : **tcp_wrappers** ou **xinetd** pour assurer un contrôle d'accès à sa place. Ceux-ci sont basés sur la **libwrap.so** et utilisent des fichiers de configuration communs, ce qui permet la centralisation de la politique de sécurité d'accès aux différents services réseau.
 +
 +Lorsque le système reçoit une connexion entrante, il consulte les fichiers /etc/hosts.allow et /etc/hosts.deny pour déterminer les droits d'accès au service demandé. tcp_wrappers vérifie par service (en regardant l'association service/port listé dans le fichier /etc/services) et par client réseau. __L'ordre d'application des règles est la suivante__ :
 +  * l'accès est-il explicitement autorisé dans /etc/hosts.allow ?
 +  * sinon, l'accès est-il explicitement interdit dans /etc/hosts.deny ?
 +  * sinon, l'accès est autorisé par défaut
 +
 +Pour savoir si un programme utilise la libwrap :
 +<code bash>
 +ldd /usr/sbin/sshd | grep wrap
 +        libwrap.so.0 => /lib/libwrap.so.0 (0x0074e000)
 +</code>
 +Certains programmes n'utilisent pas la dépendance de la librairie partagée, mais sont pourtant compatibles ; par exemple portmap qui linke en dur la librairie dans le binaire. Dans ce cas on peut utiliser **strings** pour rechercher une occurrence à la librairie :
 +<code bash>
 +strings /sbin/portmap | grep wrap
 +</code>
 +Effectivement, là ça ne matche pas non plus ; donc en conclusion c'est par expérience qu'on peut savoir si un programme utilise ou non la librairie libwrap.so. Ou en ratissant la doc !
 +
 +NB : Si un service est compatible xinetd, alors il est utilise forcément TCP_Wrappers : par exemple in.telnetd ou ntpd ou encore tftpd. L'inverse n'est pas forcément vrai, c'est le cas par exemple de sshd.
 +
 +=====Syntaxe=====
 +
 +La syntaxe est de la forme : ''nom_de_l'exécutable1: client''.
 +Il existe des **macros** qui simplifient l'écriture des règles ; les plus utilisées sont : 
 +  * ALL (tous, que cela soit des services ou des clients)
 +  * LOCAL : cible les clients provenant du même LAN de l'interface réseau de la machine
 +  * KNOWN, UNKNOWN et PARANOID : peu/plus usités car ils provoquent des requêtes DNS
 +
 +Exemple de syntaxe commentée du fichier ''/etc/hosts.allow'' (bien entendu la syntaxe est la même pour ''/etc/hosts.deny'', avec le sens opposé !) :
 +<code bash>
 +# tous les services sont autorisés et pour tout le monde (open-bar, en somme)
 +ALL: ALL
 +
 +# tout est autorisé à l'exception les machines du domaine .test.com
 +# attention cela provoque une requête DNS à chaque nouvelle connexion ;
 +#de plus cela implique que la sécurité du système est tributaire de celle du DNS)
 +ALL: ALL EXEPT .test.com
 +
 +# autorisation de ssh et telnet pour le LAN 192.168.0.0/24 ainsi que 10.0.0.0/24
 +sshd, in.telnetd: 192.168.0.0/255.255.255.0 10.0.0.
 +
 +# autorisation du telnet pour tous + lancement d'une commande personnalisée
 +#à chaque ouverture de connexion (ici envoi d'un mail à root) ;
 +#spawn est une option donc précédée par un second délimiteur ":"
 +in.telnetd: ALL : spawn echo "login attempt from %c to %s" | mail -s warning root
 +
 +# si le serveur dispose de plusieurs cartes réseau, on peut appliquer des politiques différentes :
 +# - le démon sshd qui écoute sur l'interface locale 192.168.0.2 est ouvert à tous
 +# - celui sur 192.168.1.2 en revanche est bloqué.
 +# En effet, DENY peut être utilisé comme option dans hosts.allow mais c'est déconseillé
 +#car peu cohérent avec la sémantique du fichier...
 +sshd@192.168.0.2: ALL
 +sshd@192.168.1.2: ALL: DENY
 +</code>
 +
 +Les varibales utilisables (comme ci-dessus dans la commande spawn) sont les suivantes :
 +  * %c : informations du client
 +  * %s : informations du service
 +  * %h : nom d'hôte ou IP du client
 +  * %p : le PID du service
 +
 +TCP_Wrappers peut utiliser IPv6 ; ex : [::1] ou [fe80::]/64.
  
informatique/linux/tcp_wrappers.txt · Last modified: 2013/10/14 20:44 by 127.0.0.1