web-dev-qa-db-fra.com

Filtrage de la sortie de pare-feu par domaine

Dans notre environnement de production, nous nous connectons à quelques fournisseurs de services externes essentiels bien que leurs API, et doivent avoir tous les autres services bloqués (PCI DSS).

Nous avons actuellement un pare-feu qui prend en charge le filtrage de la sortie par adresse IP afin que toutes les adresses non essentielles soient bloquées sur la base de règles de pare-feu créées statiquement (nier tout, prévoir 1.2.3.4:443, etc.).

Jusqu'à présent, tout va bien, voici le problème, l'un de nos fournisseurs de services (une grande banque) se déplace dans une API hébergée par Edge/CDN pour l'un de ses services et la propriété intellectuelle des services IS changer plusieurs fois par jour.

J'ai lu d'autres articles sur la formation de filtrage de sortie: filtrage de la sortie de pare-feu/whitelisting rapide

... ainsi que possible avec éventuellement des scripts pour modifier un pare-feu basé sur IPTABLES basé sur une requête DNS. https://stackoverflow.com/questions/14096966/CAN-PTABLAtables-ve-Dns-queries-Only-for-A-Certain-domain-name

... Mais ces solutions semblent hacky

Y a-t-il des pare-feu que nous pouvons utiliser qui ont des règles basées sur le domaine, au lieu de la propriété intellectuelle, de sorte que nos demandes d'API continuent d'arriver non interrompues, mais nous continuons à bloquer toutes les autres connexions sortantes?

9
Stanley

Y a-t-il des pare-feu que nous pouvons utiliser qui ont des règles basées sur le domaine, au lieu de la propriété intellectuelle, de sorte que nos demandes d'API continuent d'arriver non interrompues, mais nous continuons à bloquer toutes les autres connexions sortantes?

Oui, bien que généralement à travers une fonctionnalité proxy plutôt qu'un sens traditionnel de la règle de pare-feu.

Par exemple, le lame de filtrage de l'URL de point de contrôle vous permet de limiter les connexions HTTP et HTTPS sortants en fonction du nom DNS, ils demandent un accès à - E., soit un GET http://example.com/ HTTP/1.0 ou un CONNECT example.com HTTP/1.1 ne réussirait que si une règle existe pour permettre l'accès à Exemple.com.

L'aspect proxy résulte de l'espace problématique. Le DNS inverse ne peut en aucun cas être confié, de forme ou de formulaire, de sorte que le pare-feu ne peut donc pas simplement inverser l'IP que le client souhaite se connecter et décider en fonction de cela. Il doit être remis un nom par le client et prendre sa décision en fonction de cela. Les proxies de style HTTP fonctionnent bien pour cela car, même lorsqu'il est pour une connexion cryptée, le client répond le nom sur le proxy avant que la connexion puisse être faite.

Le problème avec cette approche est qu'il basse efficacement la sécurité à la suite de requêtes DNS contre les domaines distants. DNS inverse Can JAMAIS Faire confiance car tout le monde peut mettre n'importe quel nom pour une propriété intellectuelle qu'ils possèdent. Mais même en avant DNS manque de sécurité requise - vous pouvez supposer en toute sécurité qu'un attaquant modérément motivé peut parvenir à des DN de spoof ou de poison si elle leur permet d'exfilier les données PCI à partir de votre datacenter.

(Cela ne signifie pas que vous ne pouviez pas obtenir ce béni par une QSA - c'est un contrôle de compensation raisonnable. Je ne veux tout simplement pas que vous pensiez que c'est pleinement sécurisé!)

I approché le même problème - Pour les mêmes raisons que vous, il y a plus d'un an, et a conclu que la méthode "sécurisée" nécessiterait que quelque chose de plus que DNS achète des sites distants et que le SSL Le certificat était une chose raisonnable à épingler la sécurité. J'ai fini par mettre en œuvre un tel proxy et l'utiliser à mes fins; la réponse M. Spuratic fourni promet de faire la même chose (la seule raison pour laquelle je ne l'ai pas acceptée est que je ressens la nécessité de la tester en premier).

5
gowenfawr

L'idée de proxy-whithering-by-certificat est une très intéressante/soignée que j'avais personnellement pensé auparavant pour ce scénario; J'aurais définitivement un coup d'œil à cela et voyez s'il serait difficile pour votre situation.

Cependant, laissez-moi vous dire un peu la solution quelque peu plus simple que vous avez mentionnée vous-même: configurer un script pour effectuer une vérification DNS périodiquement pour voir quelle adresse IP fonctionnera actuellement. Plus précisément: quand une question connexe Demandé à l'UNIX & Linux SE il y a quelques années, il y a quelques années, il y a quelques années donné un couple d'échantillons de scripts pour iptables qui fonctionnera avec une règle crontab pour vérifier la IP pour un domaine donné toutes les cinq minutes (de dynamicdns, dans ce cas particulier), puis créez une règle permettant une règle entrante de cette adresse IP à travers. Je ne vois aucune raison pour que vous ne puissiez pas prendre un script préexistant, définissez le type de règle sur sortant , faites tout autre ajoute ou soustractions utiles Pour ça que tu aimes et tu vas. Pas idéalement élégant, sûr, mais je n'appellerais pas cette approche hacky ou gimmicky non plus.

Je ne sais pas si il serait approprié de copier et de coller un code d'exemple directement à partir de QUE Linux SE Question J'ai mentionné, donc je ne le ferai pas. Cependant, il n'y a que deux réponses, avec un échantillon de script chacun, sur la page de la question. Pas difficile de lire et de trier du tout.

Enfin, nous devrions en effet aborder ce que vous pouvez faire pour mieux sécuriser vos recherches DNS eux-mêmes. Théoriquement, si votre logiciel de paiement communique aux institutions financières uniquement via HTTPS, le serveur de réception authentifié au client comme légitime en ayant un certificat valide. Dans ce cas, même les résultats DNS modifiés malicieusement ( Si par l'usure locale du MITM DNS, l'intoxication DNS cache effectuée au serveur de résolution que vous connectez , etc.) que T être suffisant pour permettre à un attaquant intrusion sur la connexion sécurisée/s que vous envoyez les informations financières. (Étant donné que le certificat d'une configuration du serveur PHONY par un attaquant ne correspondrait pas au nom de domaine.) Mais puisque nous sommes censés penser à la défense en profondeur et à penser que quelque chose pouvait mal tourner avec une seule couche de Sécurité (comme peut-être un la clé de signature privée de l'autorité de certification étant compromise, Donc, un attaquant pourrait signer n'importe quel serveur qu'ils souhaitaient avec n'importe quel nom de domaine), supposons que nous voulons une sorte de protection robuste pour les requêtes DNS. Malheureusement, cela signifie soit (a) exécuter réellement un serveur DNS - avec DNSSEC Activé et correctement configuré pour empêcher les attaques d'empoisonnement - directement sur la machine locale qui va faire la connexion ou ( b) Utilisation Dnscrypt Pour créer une connexion cryptée à Opendns ou un serveur DNS approuvé (avec DNSSEC ON) que vous avez configuré à l'intérieur de votre réseau local.

Vous avez donc une ou deux options, au moins.

0
mostlyinformed