Quelle est la manière canonique de stocker les règles iptables

8

iptables, le pare-feu Linux standard, n'enregistre pas les règles entre les redémarrages. Vous devez vous en occuper vous-même. Il y a plusieurs façons de procéder. Quelle est la manière canonique de procéder? Quelles sont les meilleures pratiques?

Je répondrai avec ma propre solution, mais je suis intéressé par d'autres / meilleures solutions.

amarillion
la source
Très similaire aussi serverfault.com/questions/4934/…
Zoredache

Réponses:

6

Voici quelques exemples de règles. Enregistrez-les dans /etc/iptables.rules

# Generated by iptables-save v1.3.6 on Wed Oct 24 17:07:29 2007
*filter
:INPUT ACCEPT [89458:132056082]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [263904:15667452]
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 
-A INPUT -j DROP 
COMMIT
# Completed on Wed Oct 24 17:07:29 2007

ajoutez cette ligne à la fin de / etc / network / interfaces

pre-up iptables-restore < /etc/iptables.rules
amarillion
la source
1
Je soulignerai que ceci est spécifique à Ubuntu. Pour les variantes de Red Hat et Fedora, vous allez plutôt regarder / etc / sysconfig / iptables.
esm
Vous voulez dire au lieu de /etc/iptables.rules? Cela n'est pas déterminé par Ubuntu, je l'ai choisi moi-même.
amarillion
4
Je faisais référence à l'ajout à / etc / network / interfaces; mes excuses, j'aurais dû être plus clair. Fedora et RHEL ont un initscript (intelligemment nommé "iptables";) qui, s'il est activé, effectue essentiellement une restauration iptables de / etc / sysconfig / iptables.
esm
3

Nous utilisons beaucoup de règles iptables , afin de faciliter l'administration, nous faisons ce qui suit:

  • Les règles sont toutes appelées à partir de scripts - les scripts sont appelés à partir de /etc/init.d/firewall (script personnalisé)
  • Un fichier de noms de serveur / noms de réseau (variables d'adresse IP) est conservé et inclus dans chaque script iptables pour plus de cohérence.
  • des scripts séparés sont conservés pour chaque sous-réseau (c.-à-d. privé / DMZ / VPN, etc.) pour faciliter la recherche. Les règles qui appartiennent à 2 scripts (telles que celles restreignant la communication n / b privé et DMZ) sont placées dans le script du réseau plus "sécurisé"
  • dans la mesure du possible, les boucles et les boucles imbriquées sont utilisées pour garder les scripts aussi courts que possible.
  • chaque nouvelle règle ou modification est documentée avec des commentaires précédant la section appropriée du script.

Je ne sais pas si c'est la meilleure façon de procéder, mais cela a bien fonctionné pour nous.

Brent
la source
3

Bien qu'il soit vrai que cela dépend de l'environnement et de la plateforme, j'ai vu deux bonnes approches, selon la plateforme:

  • RHEL / CentOS: stockez toutes les règles dans un seul fichier / etc / sysconfig / iptables qui est lu par le script de démarrage iptables.

  • Debian / Ubuntu: stockez toutes les règles dans des fichiers spécifiques au service séparés dans le répertoire /etc/iptables.d/. Par exemple, /etc/iptables.d/port_http, /etc/iptables.d/port_dns, où port_service correspond à un nom de service dans / etc / services.

Dans les deux cas, le ou les fichiers sont gérés par un outil de configuration comme Chef ou Puppet, et lus par le script de démarrage «maître» pour iptables qui s'exécute au démarrage.

jtimberman
la source
2
Je serais très prudent avec votre nom dans votre exemple Debian / Ubuntu. C'est le genre d'endroit où vous voulez préfixer vos noms de règles avec 00, 04, 22, etc. Il y a beaucoup de règles iptables qui dépendent de l'ordre, et si vous les chargez dans le mauvais ordre, vous allez avoir truc cassé. Je suggère de les stocker dans un seul fichier, sauf si vous savez vraiment ce que vous faites.
Christopher Cashell
1

En plus de iptables-save(et iptables-restore), les schémas de pare-feu complexes sont mieux gérés avec des programmes dédiés. Par exemple, nous avons utilisé shorewall("iptables en toute simplicité") pour configurer iptables.

Des outils plus simples sont également disponibles, comme firestarter et kmyfirewall .

gimel
la source
6
Je ne suis pas d'accord. Les cas simples peuvent facilement être traités avec les programmes dédiés, mais pour une règle complexe, je ne peux pas penser à quelque chose de plus clair que iptables (plus clair signifiant non ambigu, pas nécessairement convivial pour les débutants)
Mikeage
2
Cela dépend de la raison pour laquelle vous souhaitez simplifier les règles. Je pense que le fichier iptables.rules peut être parfaitement lisible. Il est important de tirer parti des arguments de commentaire pour donner un sens à tout cela.
spoulson
Je suis en désaccord avec votre désaccord. Si vous vous efforcez de rendre vos commandes iptables lisibles, vous ne les ordonnerez pas ou n'utiliserez pas de chaînes afin que les règles soient aussi efficaces qu'elles pourraient l'être.
Zoredache
1
Zoredache - Je pense que Mikeage a plus raison que tort ici. Les règles iptables peuvent être assez claires, même si elles sont difficiles à lire (pour une personne moins qualifiée comme moi). Je ne pense pas que Mikeage allait être facile à lire.
Michael Kohne
1

Cela dépend de la distribution que vous utilisez. Certaines distributions, en particulier celles basées sur une distribution Red Hat, conservent automatiquement les règles iptables mais dans leur propre répertoire spécial. Je connais bien RHEL et les règles iptables se trouvent dans / etc / sysconfig / iptables. Se familiariser avec la syntaxe des règles iptables peut être délicat au début, mais est assez facile une fois que vous avez compris.

Le site Web de netfilter a beaucoup de documentation sur iptables, y compris quelques introductions. Si vous avez envie de lire un peu, vous pouvez trouver beaucoup de bonnes informations ici: http://www.netfilter.org/documentation/

TrueDuality
la source
Sur redhat, vous pouvez également garder / etc / sysconfig / system-config-securitylevel à jour. C'est là que system-config-securitylevel-tui obtient ses règles au démarrage.Si vous ne gardez pas / etc / sysconfig / system-config-securitylevel à jour, si quelqu'un exécute system-config-securitylevel-tui, vous risquez de perdre les règles stockées dans / etc / sysconfig / iptables.
Jason Tan
1

Cette question est très proche d'être un dup de 4934 et elle est liée à 397 .

J'utilise firehol combiné à une interface web que j'ai développée pour gérer le fichier de configuration.

J'aime vraiment firehol, il fournit une syntaxe plus simple que l'utilisation directe d'iptables.

  • Vous pouvez utiliser la commande firehol debug pour exactement quelles commandes iptables sont générées
  • Si vous avez une erreur dans votre configuration et que vous démarrez le pare-feu, firehol détecte l'erreur et revient à l'état précédent.
  • Firehol a une commande `` try '' que vous pouvez utiliser pour démarrer le pare-feu à distance, si vos modifications tuent votre connexion, firehol reviendra à l'état précédent, si vous n'avez pas tué votre connexion, il vous demandera de confirmer la modification.
  • Firehol a un large éventail de services prédéfinis, vous n'avez donc pas à vous rappeler exactement quels ports vous devez avoir quels ports ouvrir pour un protocole obscur.
Zoredache
la source
1

Nous utilisons bien sûr un script d'initialisation personnalisé. Je peux utiliser des boucles for pour parcourir une liste de ports, analyser d'autres fichiers de configuration comme les utilisateurs vpn, etc. Excellent!

Et iptables-restore est sûrement le moyen le plus "canonique" de le sauvegarder.

Ce que je veux ajouter:

Veuillez noter que la version actuelle d'iptables demandera pour chaque appel unique au noyau de lui rendre la liste complète des chaînes. Ensuite, il fera le seul changement que vous lui demandez de faire. Ensuite, il téléchargera à nouveau la liste.

C'est lent (O (n ^ 2)), pour nous il faut 5 secondes ce qui est trop long ;-)

Si vous utilisez iptables-restore, tout se passe en une seule opération rapide.

Christian
la source