Recherche de site Web

Comment sécuriser les services réseau à l'aide de wrappers TCP sous Linux


Dans cet article, nous expliquerons ce que sont les wrappers TCP et comment les configurer pour restreindre l'accès aux services réseau exécutés sur un serveur Linux. Cependant, avant de commencer, nous devons préciser que l’utilisation de wrappers TCP n’élimine pas le besoin d’un pare-feu correctement configuré.

À cet égard, vous pouvez considérer cet outil comme une liste de contrôle d'accès basée sur l'hôte, et non comme la mesure de sécurité ultime pour votre système. En utilisant un pare-feu et des wrappers TCP, au lieu de privilégier l’un par rapport à l’autre, vous vous assurerez que votre serveur ne se retrouve pas avec un seul point de défaillance.

Comprendre hosts.allow et hosts.deny

Lorsqu'une requête réseau atteint votre serveur, les wrappers TCP utilisent hosts.allow et hosts.deny (dans cet ordre) pour déterminer si le client doit être autorisé à utiliser un service donné. .

Par défaut, ces fichiers sont vides, tous commentés ou n'existent pas. Ainsi, tout est autorisé via la couche des wrappers TCP et votre système doit s'appuyer sur le pare-feu pour une protection complète. Puisque cela n'est pas souhaité, pour la raison que nous avons indiquée dans l'introduction, assurez-vous que les deux fichiers existent :

ls -l /etc/hosts.allow /etc/hosts.deny

La syntaxe des deux fichiers est la même :

<services> : <clients> [: <option1> : <option2> : ...]

où,

  1. services est une liste de services séparés par des virgules auxquels la règle actuelle doit être appliquée.
  2. Les clients représentent la liste des noms d'hôte ou des adresses IP séparés par des virgules et affectés par la règle. Les caractères génériques suivants sont acceptés :

    1. ALL correspond à tout. S'applique à la fois aux clients et aux services.
    2. LOCAL correspond aux hôtes sans point dans leur FQDN, tels que localhost.
    3. CONNU indique une situation dans laquelle le nom d'hôte, l'adresse d'hôte ou l'utilisateur sont connus.
    4. INCONNU est l'opposé de CONNU.
    5. PARANOID provoque l'abandon d'une connexion si les recherches DNS inversées (d'abord sur l'adresse IP pour déterminer le nom d'hôte, puis sur le nom d'hôte pour obtenir les adresses IP) renvoient une adresse différente dans chaque cas.
  3. Enfin, une liste facultative d'actions séparées par deux-points indique ce qui doit se produire lorsqu'une règle donnée est déclenchée.

Vous voudrez peut-être garder à l'esprit qu'une règle autorisant l'accès à un service donné dans /etc/hosts.allow a priorité sur une règle dans /etc/hosts.deny interdisant il. De plus, si deux règles s’appliquent à un même service, seule la première sera prise en compte.

Malheureusement, tous les services réseau ne prennent pas en charge l'utilisation de wrappers TCP. Pour déterminer si un service donné les prend en charge, procédez :

ldd /path/to/binary | grep libwrap

Si la commande ci-dessus renvoie une sortie, elle peut être enveloppée dans TCP. Un exemple de ceci est sshd et vsftpd, comme indiqué ici :

Comment utiliser les wrappers TCP pour restreindre l'accès aux services

Lorsque vous modifiez /etc/hosts.allow et /etc/hosts.deny, assurez-vous d'ajouter une nouvelle ligne en appuyant sur Entrée après le dernier ligne non vide.

Pour autoriser l'accès SSH et FTP uniquement à 192.168.0.102 et localhost et refuser tous les autres, ajoutez ces deux lignes dans /etc/hosts.deny :

sshd,vsftpd : ALL
ALL : ALL

et la ligne suivante dans /etc/hosts.allow :

sshd,vsftpd : 192.168.0.102,LOCAL
#
hosts.deny	This file contains access rules which are used to
#		deny connections to network services that either use
#		the tcp_wrappers library or that have been
#		started through a tcp_wrappers-enabled xinetd.
#
#		The rules in this file can also be set up in
#		/etc/hosts.allow with a 'deny' option instead.
#
#		See 'man 5 hosts_options' and 'man 5 hosts_access'
#		for information on rule syntax.
#		See 'man tcpd' for information on tcp_wrappers
#
sshd,vsftpd : ALL
ALL : ALL
#
hosts.allow	This file contains access rules which are used to
#		allow or deny connections to network services that
#		either use the tcp_wrappers library or that have been
#		started through a tcp_wrappers-enabled xinetd.
#
#		See 'man 5 hosts_options' and 'man 5 hosts_access'
#		for information on rule syntax.
#		See 'man tcpd' for information on tcp_wrappers
#
sshd,vsftpd : 192.168.0.102,LOCAL

Ces modifications ont lieu immédiatement sans qu'il soit nécessaire de redémarrer.

Dans l'image suivante, vous pouvez voir l'effet de la suppression du mot LOCAL de la dernière ligne : le serveur FTP deviendra indisponible pour localhost. Après avoir ajouté le caractère générique, le service redevient disponible.

Pour autoriser tous les services aux hôtes dont le nom contient example.com, ajoutez cette ligne dans hosts.allow :

ALL : .example.com

et pour refuser l'accès à vsftpd aux machines sur 10.0.1.0/24, ajoutez cette ligne dans hosts.deny :

vsftpd : 10.0.1.

Sur les deux derniers exemples, remarquez le point au début et à la fin de la liste des clients. Il est utilisé pour indiquer « TOUS les hôtes et/ou clients dont le nom ou l’IP contient cette chaîne ».

Cet article vous a-t-il été utile ? Avez-vous des questions ou des commentaires? N'hésitez pas à nous envoyer une note en utilisant le formulaire de commentaires ci-dessous.