Rendre les iptables plus faciles à entretenir

13

Mon réseau est complètement verrouillé, à l'exception de quelques sites qui sont sur liste blanche. Tout cela se fait via iptables, qui ressemble à ceci:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 101.102.103.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 101.102.103.0/24 -j ACCEPT
...

Évidemment, ces adresses sont hypothétiques, mais vous voyez l'idée. Mon pare-feu devient énorme. Il serait beaucoup plus facile à entretenir si je pouvais simplement faire ceci:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d google.com -j ACCEPT
iptables -A zone_lan_forward -p udp -d google.com -j ACCEPT

Je crois que cela est possible, car man iptablesdit:

L'adresse peut être soit un nom de réseau, un nom d'hôte (veuillez noter que la spécification d'un nom à résoudre avec une requête distante telle que DNS est une très mauvaise idée), une adresse IP réseau (avec / mask), ou une adresse IP ordinaire.

Mais ce qui m'inquiète, c'est la partie qui dit "spécifier tout nom à résoudre avec ... DNS est une très mauvaise idée". pourquoi est-ce une mauvaise idee? Est-ce que cela ralentit tout?

Si je ne devrais vraiment pas utiliser de noms d'hôtes dans les règles iptables, que dois-je faire pour simplifier mon pare-feu?

Big McLargeÉnorme
la source
Vous obtiendrez une meilleure réponse sur security.stackexchange.com
Jim B
Vous avez peut-être raison de dire que cette question appartient à ce site, mais si vous avez un problème avec la réponse acceptée, veuillez expliquer pourquoi.
Big McLargeHuge
Si vous voulez savoir comment verrouiller votre réseau et comment le faire, posez des questions sur la sécurité, si vous souhaitez utiliser iptables (par opposition à l'utilisation d'IPtables), alors c'est l'endroit.
Jim B

Réponses:

27
  • Les noms DNS sont résolus lorsque les règles sont ajoutées et non lorsque les paquets sont vérifiés. Cela viole les attentes de la plupart des gens.
    • La règle n'est pas mise à jour pour refléter les résultats DNS modifiés. Il est résolu une fois ajouté et c'est tout. Vous devrez soit recharger périodiquement les règles, soit certains sites risquent de se casser.
  • Il y a un petit problème de sécurité dans la mesure où vous déléguez essentiellement le contrôle de vos règles de pare-feu à une entité externe.
    • Que faire si votre serveur DNS parent est compromis et renvoie de fausses données.

Si votre but est de bloquer l'accès HTTP, alors vous êtes généralement bien mieux de mettre en place un logiciel conçu pour filtrer à ce niveau (par exemple squid + squidquard).

Zoredache
la source
1) Je vois comment cela pourrait être un problème - google.com pourrait résoudre au 1.2.3.4 aujourd'hui mais demain, cette adresse n'est pas valide. Le redémarrage du pare-feu suffirait-il simplement? 2) Est-ce toujours un problème de sécurité si le serveur DNS est bien connu - comme le DNS de Google ou OpenDNS?
Big McLargeHuge
J'ai marqué cela comme la réponse car cela explique pourquoi je ne devrais pas utiliser de noms d'hôtes dans les règles iptables et me donne un plan d'action pour simplifier mon pare-feu.
Big McLargeHuge
Je voudrais ajouter mon soutien pour Squid. J'ai implémenté Squid pour mon bureau, et une fois configuré, il est très facile à maintenir pour les hôtes en liste blanche (bien que je l'utilise pour la liste noire). Il semble que vous ayez une entreprise monumentale entre les mains; Je ne saurais même pas par où commencer à mettre Google sur liste blanche par exemple. www.google.com se résout à 5 IP seulement, ce qui ne veut rien dire pour ssl.gstatic.com, et tous les autres hôtes impliqués dans l'authentification, G +, etc. qui se résolvent probablement en plusieurs IP chacun.
s.co.tt
Monumental est un bon moyen de le dire. Mais je n'utilisais que Google comme exemple. Un aperçu de base de mon pare-feu se présente comme suit: si la destination du paquet est sur liste blanche, acceptez-la. Sinon, envoyez-le via un serveur proxy.
Big McLargeHuge
Il y a aussi le problème des systèmes qui utilisent DNS pour l'équilibrage de charge. Vous pouvez ne pas obtenir les mêmes résultats si vous recherchez un tel domaine deux fois de suite, donc une seule recherche ne vous donnera même pas une liste exhaustive des adresses IP que le domaine pourrait éventuellement résoudre.
cdhowie
9

Si vous utilisez des noms d'hôtes dans votre pare-feu, votre pare-feu dépend maintenant du DNS. Cela ouvre le pare-feu à un certain nombre de problèmes:

  • Les recherches DNS sous des volumes élevés peuvent entraîner une latence.
  • Les modifications DNS ne se propagent pas instantanément. Votre pare-feu pourrait donc utiliser des adresses IP mises en cache.
  • Le DNS peut être usurpé, détourné, piraté.
  • DNS peut échouer - ce qui signifie que votre pare-feu échoue.
  • Vos règles de pare-feu sont désormais contrôlées par un tiers.

Si vous utilisez des noms d'hôtes et que vous ne contrôlez pas le DNS, quelqu'un d'autre contrôle efficacement vos règles IPtables. Les erreurs, les erreurs ou les problèmes de sécurité de leur côté deviennent des problèmes pour vous.

La seule fois où j'ai vu des noms d'hôtes bien utilisés est pour les opérations internes. J'ai travaillé dans un bureau où des adresses IP et des noms d'hôtes ont été attribués via DHCP. Les pare-feu utilisaient des noms d'hôtes pour mettre des barrières entre différents groupes. Comme tout était contrôlé en interne, cela fonctionnait bien.

jeffatrackaid
la source
2
C'est une bonne réponse mais il manque la partie qui m'aiderait à simplifier le pare-feu.
Big McLargeHuge
3

Vous pouvez utiliser un wrapper autour d'iptables comme shorewall pour rendre vos règles plus faciles à maintenir.

Jure1873
la source
C'est une bonne idée mais vous ne m'avez pas dit pourquoi je ne devrais pas utiliser de noms d'hôtes dans les règles iptables.
Big McLargeHuge
Je ne connais pas grand-chose à Shorewall, mais j'ai l'impression que davidkennedy85 aurait encore besoin de maintenir des listes de chaque adresse IP d'un service qu'il voudrait autoriser dans les configurations de Shorewall. Cela pourrait rendre la gestion de netfilter [& etc] un peu plus facile, mais ne résoudrait pas son problème principal, qui est une énorme liste d'adresses IP.
s.co.tt
2

Comme les autres l'ont déjà dit, vous ne devez pas utiliser de noms résolvables DNS dans les règles iptables. Ils sont inexacts, contrôlés par des tiers et sont généralement une mauvaise chose (tm). J'ajouterais également que votre DNS peut échouer ou être inaccessible au moment où le service iptables démarre. Dans ce cas, la règle ne sera pas ajoutée du tout et un tout nouveau type de problèmes peut survenir (comme la perte de l'accès ssh après le redémarrage).

Ce que vous pouvez faire, c'est:

  1. Utilisez des chaînes personnalisées pour séparer logiquement les règles
  2. Utilisez ipsets pour regrouper et séparer les adresses des règles
  3. Ajouter des commentaires aux règles

De plus, personne n'a dit de mal à propos des noms d'hôtes qui ne sont pas résolus par DNS (c'est-à-dire qui sont spécifiés dans hosts. Vous pouvez les utiliser si vous en avez vraiment besoin)

skarap
la source
Oui, ipsetc'est la réponse. Avec un script exécuté à partir de crontab pour mettre à jour l'ipset.
mivk
1

Personnellement, j'attribue un nom d'hôte à une adresse IP manuellement dans / etc / hosts , puis je l'utilise dans iptables.

De cette façon, vous

  1. Ne déchargez pas vos règles de pare-feu sur une entité externe
  2. Ayez des iptables faciles à entretenir
T4cC0re
la source