Je configure un routeur Linux avec iptables
. Je veux écrire des tests d'acceptation pour la configuration qui affirment des choses comme:
- le trafic d'un type sur Internet n'est pas transmis, et
- Le TCP vers le port 80 sur le serveur Web dans la DMZ à partir d'hôtes sur le LAN de l'entreprise est transféré.
Une ancienne FAQ fait allusion à une iptables -C
option qui permet de demander quelque chose comme, "étant donné un paquet de X, à Y, sur le port Z, serait-il accepté ou abandonné?" Bien que la FAQ suggère que cela fonctionne comme ceci, car iptables
(mais peut-être pas ipchains
comme il l'utilise dans les exemples), l' -C
option ne semble pas simuler un paquet de test exécutant toutes les règles, mais vérifie plutôt l'existence d'une règle de correspondance exacte. Cela a peu de valeur en tant que test. Je veux affirmer que les règles ont l'effet souhaité, pas seulement qu'elles existent.
J'ai envisagé de créer encore plus de machines virtuelles de test et un réseau virtuel, puis de tester avec des outils comme les nmap
effets. Cependant, j'évite cette solution en raison de la complexité de la création de toutes ces machines virtuelles supplémentaires, ce qui est vraiment un moyen assez lourd de générer du trafic de test. Il serait également intéressant d'avoir une méthodologie de test automatisée qui peut également fonctionner sur un vrai serveur en production.
Sinon, comment pourrais-je résoudre ce problème? Existe-t-il un mécanisme que je pourrais utiliser pour générer ou simuler du trafic arbitraire, puis savoir s'il a été (ou serait) rejeté ou accepté iptables
?
la source
Réponses:
Si vous êtes prêt à faire un peu de codage, vous pouvez essayer ceci:
CLONE_NEWNET
indicateur de l'clone
appel système ou à l'aide des commandesip netns add
etip netns exec
.tun
pilote ouip link add
.iptables-restore
tun
ou lesveth
dispositifstun
ou desveth
appareilsCette approche fonctionnera probablement le mieux pour tester les règles des paquets transférés. Les connexions vers / depuis la machine sur laquelle iptables est utilisé nécessitent un peu plus d'efforts, mais devraient également être réalisables pour les tests de cette manière.
Voici un exemple de séquence de commandes pouvant être utilisées:
Cela créerait trois espaces de noms réseau pour tester et charger un ensemble de règles iptables dans l'un d'eux. Les deux autres jouent le rôle d'un gars sur Internet et d'un hôte sur le LAN.
Dans l'exemple ci-dessus, la première
telnet
commande obtient une connexion refusée à partir de l'test-iptables-lan-host
espace de noms, la deuxièmetelnet
commande obtient un délai d'expiration si l'ensemble de règles supprime le paquet.Cela ne touche pas l'espace de noms réseau initial, qui est celui dans lequel votre production se déroulera par défaut. La seule façon d'obtenir plus de séparation de votre production est de l'exécuter sur un hôte séparé (physique ou virtuel).
la source
le monde professionnel le fait à l'aide de matériel / logiciel fourni par 2 entreprises.
www.ixiacom.com
www.spirent.com
Dans le premier cas, vous pouvez utiliser quelque chose comme un châssis Ixia 400T + Ixload.
Dans le second cas, la ligne Smartbits ou Testcenter avec leurs applications correspondantes
Ces appareils peuvent (entre autres) émuler de nombreux clients effectuant différents types de demandes sur votre serveur cible sélectionné. Ils sont prêts à tester la sécurité de vos serveurs, y compris un ensemble prédéfini de tests d'attaque et vous pouvez toujours définir votre propre ensemble. Ils ont également de nombreuses autres capacités comme les tests de contrainte de charge et similaires.
Pas une option bon marché.
la source