Enveloppe TCP est un système ACL (Access Control List) open source basé sur l'hôte, qui est utilisé pour restreindre les services réseau TCP en fonction du nom d'hôte, de l'adresse IP, de l'adresse réseau, etc. Il décide quel hôte doit être autorisé à accéder à un service réseau spécifique. TCP Wrapper a été développé par un programmeur et physicien néerlandais Wietse Zweitze Venema en 1990 à l'Université de technologie d'Eindhoven. Il l'a maintenu jusqu'en 1995, puis l'a publié sous licence BSD en 2001. Dans ce bref guide, j'expliquerai comment restreindre l'accès aux serveurs Linux à l'aide de TCP Wrappers.
Veuillez noter que TCP Wrapper ne remplace pas complètement un pare-feu correctement configuré . C'est juste un ajout précieux pour améliorer la sécurité de votre serveur Linux. Il est recommandé de l'utiliser conjointement avec un pare-feu entièrement configuré et d'autres mécanismes et outils de sécurité.
Installer les wrappers TCP
TCP Wrappers est disponible dans les dépôts officiels de la plupart des systèmes d'exploitation Linux.
Selon la distribution Linux que vous utilisez, il peut être installé comme indiqué ci-dessous.
Sur les systèmes basés sur Arch :
$ sudo pacman -S tcp_wrappers
Sur les systèmes basés sur YUM :
$ sudo yum install tcp_wrappers
Sur les systèmes basés sur APT :
$ sudo apt-get install tcp_wrappers
Sur les systèmes SUSE/openSUSE :
$ sudo zypper in tcp_wrappers
Restreindre l'accès aux serveurs Linux à l'aide d'encapsuleurs TCP
Configuration
TCP Wrappers implémente le contrôle d'accès à l'aide de deux fichiers de configuration :/etc/hosts.allow et /etc/hosts.deny . Ces deux fichiers de liste de contrôle d'accès décident si les clients spécifiques sont autorisés ou non à accéder à votre serveur Linux.
Le fichier /etc/hosts.allow
Ce fichier contient la liste des hôtes ou réseaux autorisés ou non. Cela signifie que nous pouvons à la fois autoriser ou refuser les connexions aux services réseau en définissant des règles d'accès dans ce fichier.
Le fichier /etc/hosts.deny
Ce fichier contient la liste des hôtes ou des réseaux qui ne sont pas autorisés à accéder à votre serveur Linux. Les règles d'accès dans ce fichier peuvent également être configurées dans /etc/hosts.allow avec un 'deny' option.
La syntaxe typique pour définir une règle d'accès est :
daemon_list : client_list : option : option ...
Où,
- daemon_list - Le nom d'un service réseau tel que SSH, FTP, Portmap etc.
- liste_clients - La liste séparée par des virgules des noms d'hôte, adresses IP ou adresses réseau valides.
- options - Une action facultative qui spécifie quelque chose à faire chaque fois qu'une règle correspond.
La syntaxe est la même pour les deux fichiers.
Règles à retenir
Avant d'utiliser TCP Wrappers, vous devez connaître les règles importantes suivantes. N'oubliez pas que TCP Wrapper ne consulte que ces deux fichiers (hosts.allow et hosts.deny).
- Les règles d'accès du fichier /etc/hosts.allow sont appliquées en premier. Elles ont priorité sur les règles du fichier /etc/hosts.deny. Par conséquent, si l'accès à un service est autorisé dans /etc/hosts.allow fichier et une règle refusant l'accès à ce même service dans /etc/hosts.deny est ignoré.
- Une seule règle par service est autorisée dans les deux fichiers (hosts.allow et hosts.deny).
- L'ordre des règles est très important. Seule la première règle de correspondance pour un service donné sera prise en compte. La même chose s'applique aux deux fichiers.
- S'il n'y a pas de règles correspondantes pour un service dans l'un ou l'autre des fichiers ou si aucun fichier n'existe, alors l'accès au service sera accordé à tous les hôtes distants.
- Toute modification apportée à l'un ou l'autre des fichiers entrera en vigueur immédiatement sans redémarrer les services réseau.
L'approche recommandée pour sécuriser votre serveur
Généralement, la meilleure pratique pour sécuriser un serveur Linux consiste à bloquer toutes les connexions entrantes et à n'autoriser que quelques hôtes ou réseaux spécifiques. Pour ce faire, modifiez /etc/hosts.deny fichier :
$ sudo vi /etc/hosts.deny
Ajoutez la ligne suivante. Cette ligne refuse les connexions à TOUS les services et TOUS les réseaux.
ALL: ALL
Ensuite, modifiez /etc/hosts.allow fichier :
$ sudo vi /etc/hosts.allow
et autorisez les hôtes ou réseaux spécifiques de votre choix.
sshd: 192.168.43.192 192.168.43.193
Vous pouvez également spécifier des noms d'hôte valides au lieu de l'adresse IP, comme indiqué ci-dessous.
sshd: server1.ostechnix.lan server2.ostechnx.lan
Alternativement, vous pouvez faire la même chose en définissant toutes les règles (autoriser et refuser) dans le fichier /etc/hosts.allow lui-même.
Modifier /etc/hosts.allow fichier et ajoutez les lignes suivantes.
sshd: 192.168.43.192 192.168.43.193 sshd: ALL: DENY
Vous n'avez pas besoin de spécifier de règle dans /etc/hosts.deny fichier.
Conformément à la règle ci-dessus, toutes les connexions entrantes seront refusées pour tous les hôtes à l'exception des deux hôtes 192.168.43.192, 192.168.43.193.
Maintenant, essayez de vous connecter en SSH à votre serveur Linux à partir de n'importe quel hôte, à l'exception des hôtes ci-dessus, vous obtiendrez l'erreur suivante.
ssh_exchange_identification: read: Connection reset by peer
Vous pouvez le vérifier à partir des fichiers journaux de votre serveur Linux, comme indiqué ci-dessous.
$ cat /var/log/secure
Exemple de résultat :
Jun 16 19:40:17 server sshd[15782]: refused connect from 192.168.43.150 (192.168.43.150)
De même, vous pouvez définir des règles pour d'autres services, par exemple vsftpd, dans /etc/hosts.allow fichier comme indiqué ci-dessous.
vsftpd: 192.168.43.192 vsftpd: ALL: DENY
Encore une fois, vous n'avez pas besoin de définir de règles dans /etc/hosts.deny dossier. Conformément à la règle ci-dessus, un hôte distant avec l'adresse IP 192.168.43.192 est autorisé à accéder au serveur Linux via FTP. Tous les autres hôtes seront refusés.
De plus, vous pouvez définir les règles d'accès dans différents formats dans le fichier /etc/hosts.allow comme indiqué ci-dessous.
sshd: 192.168.43.192 #Allow a single host for SSH service sshd: 192.168.43.0/255.255.255.0 #Allow a /24 prefix for SSH vsftpd: 192.168.43.192 #Allow a single host for FTP vsftpd: 192.168.43.0/255.255.255.0 #Allow a /24 prefix for FTP vsftpd: server1.ostechnix.lan #Allow a single host for FTP
Autoriser tous les hôtes sauf un hôte spécifique
Vous pouvez autoriser les connexions entrantes de tous les hôtes, mais pas d'un hôte spécifique. Par exemple, pour autoriser les connexions entrantes de tous les hôtes dans le 192.168.43 sous-réseau, mais pas depuis l'hôte 192.168.43.192 , ajoutez la ligne suivante dans /etc/hosts.allow fichier.
ALL: 192.168.43. EXCEPT 192.168.43.192
Dans le cas ci-dessus, vous n'avez pas besoin d'ajouter de règles dans le fichier /etc/hosts.deny.
Ou vous pouvez spécifier le nom d'hôte au lieu de l'adresse IP comme indiqué ci-dessous.
ALL: .ostechnix.lan EXCEPT badhost.ostechnix.lan
Pour plus de détails, reportez-vous aux pages de manuel.
$ man tcpd
Lire aussi :
- Autoriser ou refuser l'accès SSH à un utilisateur ou à un groupe particulier sous Linux
- Limiter le nombre de connexions SSH par utilisateur/groupe/système
Encore une fois, n'oublions pas que TCP Wrapper ne remplace pas un pare-feu. Il doit être utilisé conjointement avec des pare-feu et d'autres outils de sécurité.