Menu Fermer

/etc/hosts.allow et /etc/hosts.deny : Comprendre les fichiers de configuration sur Linux

/etc/hosts.allow et /etc/hosts.deny sont deux fichiers de configuration Linux qui vous permettent de filtrer les adresses IP entrantes vers des services.
Bien souvent oubliés au profit d’un filtrage par le firewall, ces deux fichiers restent très utiles pour sécuriser l’accès aux daemons Linux.

Dans ce tutoriel, je vous explique ce que sont ces fichiers, comment utiliser /etc/hosts.allow et /etc/hosts.deny avec des exemples.

/etc/hosts.allow et /etc/hosts.deny sur Linux

Qu’est-ce que /etc/hosts.allow et /etc/hosts.deny et TCP wrapper

Les fichiers /etc/hosts.allow et /etc/hosts.deny sont couramment utilisés par les TCP wrappers.

Les TCP wrappers fournissent un filtrage de base du trafic réseau entrant. L’accès aux services réseau “enveloppés” s’exécutant sur un serveur Linux depuis d’autres systèmes peut être autorisé ou refusé.
Un service enveloppé TCP est un service qui a été compilé contre la bibliothèque libwrap.a. Utilisez la commande ldd pour déterminer si un service réseau est lié à libwrap.a.

En résumé, avec ces fichiers de configuration vous pouvez filtrer le trafic entrant.
Il vous permet d’autoriser ou interdire une adresse IP ou sous-réseau pour un service (daemon).

On utilise les fichiers à cet escient :

  • /etc/hosts.allow : Autoriser une classe d’IP
  • /etc/hosts.deny : Interdire une classe IP

Mais la syntaxe est identique pour ces deux fichiers et vous pouvez mélanger leurs contenus.

Comment utiliser /etc/hosts.allow et /etc/hosts.deny

Voici la syntaxe des deux fichiers de configuration :

deamon/service : clients
  • daemon/services : Une liste de démons séparés par des virgules, ou le mot clé ALL pour tous les démons
  • clients : Une liste de clients séparés par des virgules, ou le mot-clé ALL pour tous les clients. Il peut s’agir d’une adresse IP ou d’un nom d’hôte
  • commande : Une commande facultative qui est exécutée lorsqu’un client essaie d’accéder à un démon serveur

La logique d’utilisation est en général de bloquer tout dans /etc/hosts.deny et autoriser les IP dans /etc/hosts.allow

Exemples d’utilisation /etc/hosts.allow et /etc/hosts.deny

Bloquer des adresses IP sur SSH

Voici quelques exemples d’utilisations de /etc/hosts.allow pour autoriser des adresses IP et réseau pour SSH et bloquer le reste.

sshd: <Adresse IP>
sshd: 192.168.0.8

sshd: <sous réseau>
sshd: 192.168.0.0/24

sshd: <adresse IP>,<sous réseau>
sshd: 192.168.0.3, 192.168.0.4

# Bloquer les autres adresses IP
sshd: ALL : deny

Cela génère des entrées sshd “refused connect from” dans le journal /var/log/auth.log :

Nov 17 09:11:54 Ubuntu-VM sshd[3782]: refused connect from 10.0.0.15 (10.0.0.15)
Entrées sshd "refused connect from" dans le journal /var/log/auth.log

Bloquer une adresse IP sur FTP

Par exemple pour autoriser le réseau 192.168.2.* pour le service VSFTPD :

vsftpd: 192.168.2.*

On peut aussi utiliser la syntaxe suivante avec le masque des sous-réseau :

vsftpd: 192.168.2.0/24

Si vous utilisez plutôt proftpd, il suffit de remplacer le nom du service :

proftpd: 192.168.2.0/24

Bloquer toutes les adresses IP à l’exception de

Bloquer tous les services pour tous les hôtes et adresse IP sauf pour exemple.com :

ALL: .exemple.com

Pour interdire toutes les IP à l’exception de 192.168.0.15 pour tous les services :

ALL:  ALL EXCEPT 192.168.0.15, 192.168.0.14