Comment choisir une politique de pare-feu efficace pour sécuriser vos serveurs

introduction

L'utilisation d'un pare-feu consiste autant à prendre des décisions stratégiques intelligentes qu'à apprendre la syntaxe. Firewalls commeiptables sont capables d'appliquer des politiques en interprétant les règles définies par l'administrateur. Cependant, en tant qu'administrateur, vous devez savoir quels types de règles conviennent à votre infrastructure.

Alors queother guides se concentre sur les commandes nécessaires pour être opérationnel, dans ce guide, nous discuterons de certaines des décisions que vous devrez prendre lors de l'implémentation d'un pare-feu. Ces choix affectent le comportement de votre pare-feu, le verrouillage de votre serveur et sa réponse aux diverses conditions susceptibles de se produire de temps à autre. Nous utiliseronsiptables comme exemple pour discuter des détails, mais la plupart des décisions réelles seront pertinentes quels que soient les outils utilisés.

Choisir une politique par défaut

Lors de la construction d'un pare-feu, l'une des décisions fondamentales que vous devez prendre est la stratégie par défaut. Cela détermine ce qui se produit lorsque le trafic ne correspond à aucune autre règle. Par défaut, un pare-feu peut soitaccept tout trafic sans correspondance avec les règles précédentes, soitdeny ce trafic.

Abandon par défaut vs Accepter par défaut

Une politique par défaut «accepter» signifie que tout trafic sans correspondance est autorisé à entrer sur le serveur. Cela n’est généralement pas conseillé, car cela signifie que vous conserverez effectivement une liste noire. Les listes noires sont difficiles à gérer car vous devez anticiper et bloquer explicitement le type de trafic indésirable deevery. Cela peut entraîner des problèmes de maintenance et est généralement sujet à des erreurs, des configurations erronées et des trous imprévus dans la stratégie établie.

L'alternative est une politique par défaut de «drop». Cela signifie que tout trafic ne correspondant pas à une règle explicite ne sera pas autorisé. Cela ressemble à une liste blanche ACL. Chaque service doit être explicitement autorisé, ce qui peut sembler être une somme importante de recherche et de travail au début. Toutefois, cela signifie que votre stratégie tend à la sécurité et que vous savez exactement ce qui est autorisé à recevoir du trafic sur votre serveur.

Fondamentalement, le choix se résume à une tendance à la sécurité par défaut ou à des services accessibles prêts à l'emploi. Même s'il peut être tentant d'implémenter un pare-feu orienté vers la disponibilité du service, il est presque toujours préférable de bloquer le trafic sauf autorisation expresse.

Politique de suppression par défaut et règle de suppression finale

Le choix ci-dessus d'une politique de suppression par défaut conduit à une autre décision subtile. Aveciptables et d'autres pare-feu similaires, la stratégie par défaut peut être définie à l'aide de la fonctionnalité de stratégie intégrée du pare-feu, ou mise en œuvre en ajoutant une règle de suppression fourre-tout à la fin de la liste des règles.

La distinction entre ces deux méthodes réside dans ce qui se passe si les règles du pare-feu sont vidées.

Si la fonction de stratégie intégrée de votre pare-feu est définie sur «supprimer» et que vos règles de pare-feu sont toujours vidées (réinitialisation), ou si certaines règles de correspondance sont supprimées, vos services deviendront instantanément inaccessibles à distance. C'est souvent une bonne idée lorsque vous définissez une stratégie pour des services non critiques afin que votre serveur ne soit pas exposé au trafic malveillant si les règles sont supprimées.

L'inconvénient de cette approche est que vos services seront complètement indisponibles pour vos clients jusqu'à ce que vous rétablissiez des règles permissives. Vous pouvez même potentiellement vous verrouiller hors du serveur si vous ne disposez pas d'accès local ou hors bande pour contourner le problème (les serveurs DigitalOcean sont accessibles quels que soient les paramètres réseau en utilisant le bouton «Accès à la console» situé dans «Accès»). partie de la page de votre Droplet dans le panneau de configuration). Si le vidage de votre pare-feu est intentionnel, vous pouvez éviter cela en basculant simplement la politique par défaut sur «accepter» juste avant de réinitialiser les règles.

L’alternative à la définition d’une stratégie de suppression à l’aide de la fonctionnalité de stratégie intégrée consiste à définir la stratégie par défaut de votre pare-feu sur «accepter», puis à mettre en œuvre une stratégie de «suppression» avec des règles régulières. Vous pouvez ajouter une règle de pare-feu normale à la fin de votre chaîne, qui correspond et refuse tout le trafic restant sans correspondance.

Dans ce cas, si vos règles de pare-feu sont vidées, vos services seront accessibles mais non protégés. En fonction de vos options pour un accès local ou alternatif, cela peut être un mal nécessaire pour vous permettre de saisir à nouveau votre serveur si les règles sont vidées. Si vous décidez d'utiliser cette option, vous devez vous assurer que la règle fourre-tout reste toujours la règlelast dans votre jeu de règles.

Abandonner ou rejeter le trafic

Il existe différentes manières de refuser un passage de paquet à sa destination. Le choix entre celles-ci a un impact sur la façon dont le client perçoit sa tentative de connexion et sur la rapidité avec laquelle il est capable de déterminer que sa demande ne sera pas traitée.

Le premier moyen de nier les paquets est le «largage». Drop peut être utilisé comme stratégie par défaut ou comme cible pour les règles de correspondance. Lorsqu'un paquet est abandonné,iptables le jette simplement. Il ne renvoie aucune réponse au client qui tente de se connecter et ne donne aucune indication selon laquelle il a même reçu les paquets en question. Cela signifie que les clients (légitimes ou non) ne recevront aucune confirmation de la réception de leurs paquets.

Pour les tentatives de connexion TCP, la connexion sera bloquée jusqu'à ce que la limite de délai d'attente soit atteinte. UDP étant un protocole sans connexion, le manque de réponse des clients est encore plus ambigu. En fait, le fait de ne pas recevoir de paquet dans ce cas indique souvent que le paquet a été accepté. Si le client UDP se préoccupe de la réception de ses paquets, il devra les renvoyer pour tenter de déterminer s'ils ont été acceptés, perdus ou en transit. Cela peut augmenter le temps qu'un acteur malveillant devra passer pour obtenir des informations correctes sur l'état des ports de votre serveur, mais cela pourrait également entraîner des problèmes de trafic légitime.

Une alternative à la suppression du trafic consiste à rejeter explicitement les paquets que vous n'autorisez pas. ICMP, ou Internet Control Message Protocol, est un méta-protocole utilisé sur Internet pour envoyer des messages d'état, de diagnostic et d'erreur entre hôtes sous forme de canal hors bande qui ne repose pas sur les protocoles de communication classiques tels que TCP ou UDP. Lorsque vous utilisez la cible «rejeter», le trafic est refusé et un paquet ICMP est renvoyé à l'expéditeur pour l'informer que son trafic a été reçu mais ne sera pas accepté. Le message d'état peut indiquer la raison.

Cela a un certain nombre de conséquences. En supposant que le trafic ICMP puisse être acheminé vers le client, celui-ci sera immédiatement informé que son trafic est bloqué. Pour les clients légitimes, cela signifie qu'ils peuvent contacter l'administrateur ou vérifier leurs options de connexion pour s'assurer qu'ils atteignent le bon port. Pour les utilisateurs malveillants, cela signifie qu'ils peuvent effectuer leurs analyses et mapper les ports ouverts, fermés et filtrés dans un délai plus court.

Il faut tenir compte de nombreux éléments pour décider de supprimer ou de rejeter le trafic. Une considération importante est que la plupart des trafics malveillants seront réellement perpétrés par des scripts automatisés. Étant donné que les scripts ne sont généralement pas sensibles au facteur temps, la suppression du trafic illégitime n'aura pas l'effet dissuasif souhaité, mais aura des effets négatifs pour les utilisateurs légitimes. Plus d'informations sur ce sujet peuvent être trouvéeshere.

Tableau de réponses Drop vs Reject

Le tableau ci-dessous montre comment un serveur protégé par un pare-feu réagira à différentes requêtes en fonction de la stratégie appliquée au port de destination.

Type de paquet client Commande NMap Politique portuaire Réponse État du port inféré

TCP

nmap [-sT

-sS] -Pn

J'accepte

TCP SYN / ACK

Open

TCP

nmap [-sT

-sS] -Pn

Drop

(aucun)

Filtré

TCP

nmap [-sT

-sS] -Pn

Rejeter

RÉINITIALISATION TCP

Fermé

UDP

nmap -sU -Pn

J'accepte

(aucun)

Ouvert ou filtré

UDP

nmap -sU -Pn

Drop

(aucun)

Ouvert ou filtré

UDP

nmap -sU -Pn

La première colonne indique le type de paquet envoyé par le client. Dans la deuxième colonne, nous avons inclus les commandesnmap qui peuvent être utilisées pour tester chaque scénario. La troisième colonne indique la stratégie de port appliquée au port. La quatrième colonne est la réponse que le serveur va renvoyer et la cinquième colonne indique ce que le client peut déduire du port en fonction de la réponse reçue.

Politiques ICMP

Semblable à la question de savoir si le trafic refusé doit être abandonné ou rejeté, les avis divergent quant à l’acceptation des paquets ICMP destinés à votre serveur.

ICMP est un protocole utilisé pour beaucoup de choses. Comme nous l'avons vu ci-dessus, il est souvent renvoyé pour donner des informations sur l'état des demandes utilisant d'autres protocoles. Peut-être sa fonction la plus reconnue d’envoyer et de répondre aux pings du réseau pour vérifier la connectabilité aux hôtes distants. Il existe de nombreuses autres utilisations de l'ICMP, qui ne sont pas aussi bien connues, mais qui restent utiles.

Les paquets ICMP sont organisés par «type», puis par «code». Un type spécifie la signification générale du message. Par exemple, le type 3 signifie que la destination était inaccessible. Un code est souvent utilisé pour donner des informations supplémentaires sur un type. Par exemple, le code 3 de type 3 ICMP signifie que le port de destination était indisponible, tandis que le code 0 de type 3 ICMP signifie que le réseau de destination n'a pas pu être atteint.

Types qui peuvent toujours être bloqués

Certains types ICMP étant obsolètes, ils devraient probablement être bloqués de manière inconditionnelle. Parmi ceux-ci figurent l'extinction de source ICMP (type 0, code 0) et l'hôte alternatif (type 6). Les types 1, 2, 7 et les types 15 et supérieurs sont tous déconseillés, réservés pour une utilisation future ou expérimentaux.

Types à bloquer en fonction de la configuration du réseau

Certains types ICMP sont utiles dans certaines configurations de réseau, mais doivent être bloqués dans d'autres.

Par exemple, les messages de redirection ICMP (type 5) peuvent être utiles pour mettre en évidence une mauvaise conception du réseau. Une redirection ICMP est envoyée lorsqu'un meilleur itinéraire est directement disponible pour le client. Ainsi, si un routeur reçoit un paquet qui devra être routé vers un autre hôte sur le même réseau, il envoie un message de redirection ICMP pour indiquer au client d'envoyer les paquets via l'autre hôte à l'avenir.

Ceci est utile si vous faites confiance à votre réseau local et souhaitez détecter les inefficiences dans vos tables de routage lors de la configuration initiale (la réparation de vos itinéraires est une meilleure solution à long terme). Sur un réseau non sécurisé, cependant, un utilisateur malveillant pourrait potentiellement envoyer des redirections ICMP pour manipuler les tables de routage sur les hôtes.

D'autres types ICMP utiles dans certains réseaux et potentiellement dangereux pour d'autres sont les paquets de publication de routeur ICMP (type 9) et de sollicitation de routeur (type 10). Les paquets de sollicitation et d’annonce de routeur sont utilisés dans le cadre du protocole IRDP (ICMP Internet Router Discovery Protocol), un système qui permet aux hôtes, lors du démarrage ou de la connexion à un réseau, de découvrir de manière dynamique les routeurs disponibles.

Dans la plupart des cas, il est préférable qu'un hôte ait des itinéraires statiques configurés pour les passerelles qu'il utilisera. Ces paquets doivent être acceptés dans les mêmes situations que les paquets de redirection ICMP. En fait, étant donné que l'hôte ne saura pas quel est l'itinéraire préféré pour le trafic parmi les itinéraires découverts, les messages de redirection sont souvent nécessaires directement après la découverte. Si vous n'exécutez pas un service qui envoie des paquets de sollicitation de routeur ou modifie vos routes en fonction de paquets d'annonces (commerdisc), vous pouvez bloquer ces paquets en toute sécurité.

Types qui sont souvent sécuritaires à autoriser

Les types ICMP qui sont généralement sécurisés à autoriser sont répertoriés ci-dessous, mais vous pouvez les désactiver si vous souhaitez être extrêmement prudent.

  • Type 8 - Demande d'écho: il s'agit de demandes de ping adressées à votre serveur. Il est généralement prudent de les autoriser (refuser ces paquets ne cache pas votre serveur. Les utilisateurs disposent de beaucoup d'autres moyens pour savoir si votre hôte est actif, mais vous pouvez les bloquer ou limiter les adresses source auxquelles vous répondez si vous le souhaitez.

  • Type 13 - Demande d'horodatage: ces paquets peuvent être utilisés par les clients pour collecter des informations de latence. Elles peuvent être utilisées dans certaines techniques d’empreintes digitales de systèmes d’exploitation. Bloquez-les si vous le souhaitez ou limitez le nombre d’adresses auxquelles vous répondez.

Les types ci-dessous peuvent généralement être autorisés sans règles explicites en configurant votre pare-feu pour autoriser les réponses aux demandes qu'il a faites (en utilisant le moduleconntrack pour autoriser le traficESTABLISHED etRELATED).

  • Type 0 - Réponses d'écho: il s'agit des réponses aux demandes d'écho (pings).

  • Type 3 - Destination inaccessible: les paquets légitimes de destination inaccessibles sont des réponses aux demandes créées par votre serveur indiquant que le paquet n'a pas pu être remis.

  • Type 11 - Temps dépassé: il s'agit d'une erreur de diagnostic renvoyée si un paquet généré par votre serveur est mort avant d'atteindre la destination en raison du dépassement de sa valeur TTL.

  • Type 12 - Problème de paramètre: cela signifie qu'un paquet sortant de votre serveur a été mal formé.

  • Type 14 - Réponses d'horodatage: il s'agit des réponses aux requêtes d'horodatage générées par votre serveur.

Certains experts en sécurité recommandent toujours de bloquer tout le trafic ICMP entrant. Cependant, de nombreuses personnes encouragent désormais les politiques d'acceptation ICMP intelligentes. Les lienshere ethere ont plus d'informations.

Limitation de connexion et de débit

Pour certains services et modèles de trafic, vous pouvez autoriser l'accès à condition que le client n'abuse pas de cet accès. Deux manières de limiter l'utilisation des ressources sont la limitation de connexion et la limitation de débit.

Limitation de la connexion

La limitation de connexion peut être implémentée à l'aide d'extensions telles queconnlimit pour vérifier le nombre de connexions actives qu'un client a ouvertes. Ceci peut être utilisé pour limiter le nombre de connexions autorisées à la fois. Si vous décidez d'imposer une limitation de connexion, vous devrez prendre certaines décisions quant à son application. La répartition générale des décisions est la suivante:

  • Limite par adresse, par réseau ou sur une base globale?

  • Faire correspondre et limiter le trafic pour un service spécifique ou pour le serveur dans son ensemble?

Les connexions peuvent être limitées hôte par hôte ou une limite peut être définie pour un segment de réseau en fournissant un préfixe de réseau. Vous pouvez également définir un nombre maximal global de connexions pour un service ou la machine entière. N'oubliez pas qu'il est possible de combiner ces éléments pour créer des stratégies plus complexes permettant de contrôler vos numéros de connexion.

Limitation de taux

La limitation de débit vous permet de définir des règles qui régissent le débit ou la fréquence à laquelle le trafic sera accepté par votre serveur. Il existe un certain nombre d'extensions différentes qui peuvent être utilisées pour la limitation de débit, notammentlimit,hashlimit etrecent. Le choix de l'extension que vous utiliserez dépendra en grande partie desway que vous souhaitez limiter le trafic.

L'extensionlimit fera correspondre la règle en question jusqu'à ce que la limite soit atteinte, après quoi d'autres paquets seront abandonnés. Si vous définissez une limite du type «5 / s», la règle autorisera la correspondance de 5 paquets par seconde, après quoi la règle ne correspond plus. Cela est utile pour définir une limite de débit globale pour un service.

L'extensionhashlimit est plus flexible, vous permettant de spécifier certaines des valeurs queiptables hachera pour évaluer une correspondance. Par exemple, il peut examiner l'adresse source, le port source, l'adresse de destination, le port de destination ou une combinaison arbitraire de ces quatre valeurs pour hacher chaque entrée. Il peut limiter par paquets ou octets reçus. Fondamentalement, cela permet une limitation flexible du débit par client ou par service.

L'extensionrecent ajoute dynamiquement les adresses IP des clients à une liste ou vérifie par rapport à une liste existante lorsque la règle correspond. Cela vous permet de répartir votre logique de limitation entre plusieurs règles différentes pour des modèles complexes. Il a la capacité de spécifier un nombre de hits et une plage de temps comme les autres limiteurs, mais peut également réinitialiser la plage de temps si un trafic supplémentaire est vu, forçant ainsi un client à arrêter tout le trafic s'il est limité.

Le choix de l’extension de limitation de débit à utiliser dépend des politiques exactes que vous souhaitez appliquer.

Gestion monolithique vs chaîne

Toute la politique de pare-feu deiptables est enracinée dans l'extension des chaînes intégrées. Pour les pare-feu simples, cela prend souvent la forme de changer la stratégie par défaut pour les chaînes et d'ajouter des règles. Pour les pare-feu plus complexes, il est souvent judicieux d’étendre le cadre de gestion en créant des chaînes supplémentaires.

Les chaînes créées par l'utilisateur sont intrinsèquement liées à leur chaîne d'appel. Les chaînes créées par l'utilisateur n'ont pas de stratégie par défaut. Ainsi, si un paquet tombe dans une chaîne créée par l'utilisateur, il retournera à la chaîne d'appel et poursuivra l'évaluation. Dans cet esprit, les chaînes créées par l'utilisateur sont principalement utiles à des fins d'organisation, pour rendre les conditions de correspondance de règles plus sèches et pour améliorer la lisibilité en scindant les conditions de correspondance.

Si vous vous retrouvez à répéter certains critères de correspondance pour un nombre important de règles, il peut être intéressant de créer une règle de saut avec les critères de correspondance partagés avec une nouvelle chaîne. Dans la nouvelle chaîne, vous pouvez ajouter cet ensemble de règles en supprimant les critères de correspondance partagés.

Au-delà de la simple organisation, cela peut avoir des effets secondaires bénéfiques. Par exemple, l'utilisation intelligente de chaînes pour des ensembles de règles très similaires signifie que l'ajout de règles au bon emplacement peut être plus facile et moins sujet aux erreurs. Il peut également être plus facile d'afficher et de comprendre les éléments de la politique qui vous tiennent à coeur en les limitant par chaîne.

La décision de regrouper toutes vos règles dans l'une des chaînes intégrées ou de créer et d'utiliser des chaînes supplémentaires dépendra en grande partie de la complexité et de la facilité de gestion de votre jeu de règles.

Conclusion

A présent, vous devriez avoir une assez bonne idée de certaines des décisions que vous devrez prendre lors de la conception de stratégies de pare-feu pour vos serveurs. Habituellement, l’investissement en temps avec les pare-feu s’appuie fortement sur la configuration initiale, laissant la gestion assez simple. Bien que cela puisse prendre du temps, des réflexions et des expérimentations de mettre au point une politique qui réponde au mieux à vos besoins, vous aurez ainsi plus de contrôle sur la sécurité de votre serveur.

Si vous souhaitez en savoir plus sur les pare-feu et lesiptables en particulier, consultez les articles suivants:

Les guides suivants peuvent vous aider à mettre en œuvre vos stratégies. Choisissez le guide qui correspond à votre pare-feu pour commencer: