Qu'est-ce qu'un pare-feu et comment fonctionne-t-il ?
Introduction
Un pare-feu est un système qui assure la sécurité du réseau en filtrant le trafic réseau entrant et sortant en fonction d'un ensemble de règles définies par l'utilisateur. En général, le but d'un pare-feu est de réduire ou d'éliminer l'occurrence de communications réseau indésirables tout en permettant à toutes les communications légitimes de circuler librement. Dans la plupart des infrastructures de serveurs, les pare-feu fournissent une couche de sécurité essentielle qui, combinée à d'autres mesures, empêche les attaquants d'accéder à vos serveurs de manière malveillante.
Ce guide explique comment fonctionnent les pare-feu, en mettant l'accent sur les pare-feu logiciels avec état, tels qu'iptables et FirewallD, en ce qui concerne les serveurs cloud. Nous commencerons par une brève explication des paquets TCP et des différents types de pare-feu. Ensuite, nous discuterons d'une variété de sujets pertinents pour les pare-feu avec état. Enfin, nous fournirons des liens vers d'autres tutoriels qui vous aideront à configurer un pare-feu sur votre propre serveur.
Paquets réseau TCP
Avant d'aborder les différents types de pare-feu, examinons rapidement à quoi ressemble le trafic réseau TCP (Transport Control Protocol).
Le trafic réseau TCP se déplace sur un réseau dans des paquets, qui sont des conteneurs constitués d'un en-tête de paquet (il contient des informations de contrôle telles que les adresses source et de destination et des informations sur la séquence de paquets) et les données (également appelées charge utile). Bien que les informations de contrôle de chaque paquet aident à garantir que les données associées sont correctement livrées, les éléments qu'il contient fournissent également aux pare-feu diverses façons de faire correspondre les paquets aux règles de pare-feu.
Il est important de noter que la réception réussie des paquets TCP entrants nécessite que le récepteur renvoie les paquets d'accusé de réception sortants à l'expéditeur. La combinaison des informations de contrôle dans les paquets entrants et sortants peut être utilisée pour déterminer l'état de la connexion (par exemple nouveau, établi, lié) entre l'expéditeur et le destinataire.
Types de pare-feu
Examinons rapidement les trois types de pare-feu réseau de base : le filtrage de paquets (sans état), avec état et la couche application.
Le filtrage de paquets, ou pare-feu sans état, fonctionne en inspectant les paquets individuels de manière isolée. En tant que tels, ils ne connaissent pas l'état de la connexion et ne peuvent autoriser ou refuser les paquets qu'en fonction des en-têtes de paquets individuels.
Les pare-feu avec état sont capables de déterminer l'état de connexion des paquets, ce qui les rend beaucoup plus flexibles que les pare-feu sans état. Ils fonctionnent en collectant les paquets associés jusqu'à ce que l'état de la connexion puisse être déterminé avant que les règles de pare-feu ne soient appliquées au trafic.
Les pare-feu applicatifs vont encore plus loin en analysant les données transmises, ce qui permet de comparer le trafic réseau aux règles de pare-feu spécifiques aux services ou applications individuels. Ceux-ci sont également connus sous le nom de pare-feu basés sur proxy.
Outre le logiciel de pare-feu, qui est disponible sur tous les systèmes d'exploitation modernes, la fonctionnalité de pare-feu peut également être fournie par des périphériques matériels, tels que des routeurs ou des dispositifs de pare-feu. Encore une fois, notre discussion se concentrera sur les pare-feux logiciels avec état qui s'exécutent sur les serveurs qu'ils sont censés protéger.
Règles de pare-feu
Comme mentionné ci-dessus, le trafic réseau qui traverse un pare-feu est comparé à des règles pour déterminer s'il doit être autorisé ou non. Un moyen simple d'expliquer à quoi ressemblent les règles de pare-feu est de montrer quelques exemples, nous allons donc le faire maintenant.
Supposons que vous ayez un serveur avec cette liste de règles de pare-feu qui s'appliquent au trafic entrant :
- Accepter le trafic entrant nouveau et établi vers l'interface de réseau public sur les ports 80 et 443 (trafic Web HTTP et HTTPS)
- Déposez le trafic entrant des adresses IP des employés non techniques de votre bureau vers le port 22 (SSH)
- Acceptez le trafic entrant nouveau et établi de la plage IP de votre bureau vers l'interface de réseau privé sur le port 22 (SSH)
Notez que le premier mot de chacun de ces exemples est soit « accepter », « rejeter » ou « abandonner ». Cela spécifie l'action que le pare-feu doit faire dans le cas où un élément du trafic réseau correspond à une règle. Accepter signifie autoriser le trafic, rejeter signifie bloquer le trafic mais répondre avec une erreur « inaccessible », et abandonner signifie bloquer le trafic et envoyer pas de réponses. Le reste de chaque règle consiste en la condition à laquelle chaque paquet est comparé.
Il s'avère que le trafic réseau est comparé à une liste de règles de pare-feu dans une séquence, ou une chaîne, du premier au dernier. Plus précisément, une fois qu'une règle correspond, l'action associée est appliquée au trafic réseau en question. Dans notre exemple, si un employé comptable tentait d'établir une connexion SSH au serveur, il serait rejeté sur la base de la règle 2, avant même que la règle 3 ne soit vérifiée. Un administrateur système, cependant, serait accepté car il ne correspondrait qu'à la règle 3.
Stratégie par défaut
Il est courant qu'une chaîne de règles de pare-feu ne couvre pas explicitement toutes les conditions possibles. Pour cette raison, les chaînes de pare-feu doivent toujours avoir une stratégie par défaut spécifiée, qui consiste uniquement en une action (accepter, rejeter ou abandonner).
Supposons que la stratégie par défaut pour l'exemple de chaîne ci-dessus était définie sur drop. Si un ordinateur en dehors de votre bureau tentait d'établir une connexion SSH au serveur, le trafic serait abandonné car il ne correspond aux conditions d'aucune règle.
Si la politique par défaut était définie sur accept, n'importe qui, à l'exception de vos propres employés non techniques, pourrait établir une connexion à n'importe quel service ouvert sur votre serveur. Ce serait un exemple de pare-feu très mal configuré car il n'empêche qu'un sous-ensemble de vos employés d'entrer.
Trafic entrant et sortant
Étant donné que le trafic réseau, du point de vue d'un serveur, peut être entrant ou sortant, un pare-feu maintient un ensemble de règles distinct pour les deux cas. Le trafic provenant d'ailleurs, le trafic entrant, est traité différemment du trafic sortant envoyé par le serveur. Il est typique pour un serveur d'autoriser la plupart du trafic sortant car le serveur est généralement, en lui-même, digne de confiance. Néanmoins, l'ensemble de règles sortantes peut être utilisé pour empêcher les communications indésirables dans le cas où un serveur est compromis par un attaquant ou un exécutable malveillant.
Afin de maximiser les avantages de sécurité d'un pare-feu, vous devez identifier toutes les façons dont vous souhaitez que d'autres systèmes interagissent avec votre serveur, créer des règles qui les autorisent explicitement, puis supprimer tout autre trafic. Gardez à l'esprit que les règles sortantes appropriées doivent être en place pour qu'un serveur se permette d'envoyer des accusés de réception sortants à toutes les connexions entrantes appropriées. De plus, comme un serveur doit généralement initier son propre trafic sortant pour diverses raisons, par exemple, télécharger des mises à jour ou se connecter à une base de données, il est important d'inclure également ces cas dans votre ensemble de règles sortantes.
Rédaction de règles sortantes
Supposons que notre exemple de pare-feu soit défini sur abandonne le trafic sortant par défaut. Cela signifie que nos règles entrantes accept seraient inutiles sans règles sortantes complémentaires.
Pour compléter les exemples de règles de pare-feu entrantes (1 et 3), de la section Règles de pare-feu, et permettre une bonne communication sur ces adresses et ports, nous pourrions utiliser ces règles de pare-feu sortantes :
- Accepter le trafic sortant établi vers l'interface de réseau public sur les ports 80 et 443 (HTTP et HTTPS)
- Accepter le trafic sortant établi vers l'interface réseau privé sur le port 22 (SSH)
Notez que nous n'avons pas besoin d'écrire explicitement une règle pour le trafic entrant qui est abandonné (règle entrante 2) car le serveur n'a pas besoin d'établir ou de reconnaître cette connexion.
Logiciels et outils de pare-feu
Maintenant que nous avons vu comment fonctionnent les pare-feu, examinons les progiciels courants qui peuvent nous aider à configurer un pare-feu efficace. Bien qu'il existe de nombreux autres packages liés au pare-feu, ceux-ci sont efficaces et sont ceux que vous rencontrerez le plus.
Iptables
Iptables est un pare-feu standard inclus dans la plupart des distributions Linux par défaut (une variante moderne appelée nftables commencera à le remplacer). Il s'agit en fait d'un frontal des crochets netfilter au niveau du noyau qui peuvent manipuler la pile réseau Linux. Cela fonctionne en comparant chaque paquet qui traverse l'interface réseau à un ensemble de règles pour décider quoi faire.
Pour savoir comment implémenter un pare-feu avec iptables, consultez ces liens :
- Comment configurer un pare-feu à l'aide d'IPTables sur Ubuntu 14.04
- Comment implémenter un modèle de pare-feu de base avec Iptables sur Ubuntu 14.04
- Comment configurer un pare-feu Iptables pour protéger le trafic entre vos serveurs
UFW
UFW, qui signifie Uncomplicated Firewall, est une interface vers iptables qui vise à simplifier le processus de configuration d'un pare-feu.
Pour en savoir plus sur l'utilisation d'UFW, consultez ce didacticiel : Comment configurer un pare-feu avec UFW sur un serveur cloud Ubuntu et Debian.
Pare-feuD
FirewallD est une solution de pare-feu complète disponible par défaut sur les serveurs CentOS 7. Incidemment, FirewallD utilise iptables pour configurer netfilter.
Pour en savoir plus sur l'utilisation de FirewallD, consultez ce didacticiel : Comment configurer FirewallD pour protéger votre serveur CentOS 7.
Si vous utilisez CentOS 7 mais préférez utiliser iptables, suivez ce tutoriel : Comment migrer de FirewallD vers Iptables sur CentOS 7.
Fail2ban
Fail2ban est un logiciel de prévention des intrusions qui peut configurer automatiquement votre pare-feu pour bloquer les tentatives de connexion par force brute et les attaques DDOS.
Pour en savoir plus sur Fail2ban, consultez ces liens :
- Comment Fail2ban fonctionne pour protéger les services sur un serveur Linux
- Comment protéger SSH avec Fail2Ban sur Ubuntu 14.04
- Comment protéger un serveur Nginx avec Fail2Ban sur Ubuntu 14.04
- Comment protéger un serveur Apache avec Fail2Ban sur Ubuntu 14.04
Conclusion
Maintenant que vous comprenez le fonctionnement des pare-feu, vous devriez envisager d'implémenter un pare-feu qui améliorera la sécurité de la configuration de votre serveur en utilisant les didacticiels ci-dessus.
Si vous souhaitez en savoir plus sur le fonctionnement des pare-feu, consultez ces liens :