Wie kann ich automatisierte Tests für iptables schreiben?

13

Ich konfiguriere einen Linux Router mit iptables. Ich möchte Abnahmetests für die Konfiguration schreiben, die Folgendes bestätigen:

  • Datenverkehr von einem Kerl im Internet wird nicht weitergeleitet, und
  • TCP wird von Hosts im Unternehmens-LAN an Port 80 auf dem Webserver in der DMZ weitergeleitet.

Eine alte FAQ spielt auf eine iptables -COption an, mit der man etwas fragen kann wie: "Würde ein Paket von X nach Y an Port Z angenommen oder verworfen werden?" Obwohl die FAQ vermuten lässt, dass dies so funktioniert, scheint die Option iptables(aber möglicherweise nicht so, ipchainswie sie in den Beispielen verwendet wird) -Cnicht ein Testpaket zu simulieren, das alle Regeln durchläuft, sondern prüft, ob eine genau übereinstimmende Regel vorhanden ist. Dies hat als Test wenig Wert. Ich möchte behaupten, dass die Regeln den gewünschten Effekt haben, nicht nur, dass sie existieren.

Ich habe darüber nachgedacht, noch mehr Test-VMs und ein virtuelles Netzwerk zu erstellen und dann mit Tools wie nmapEffekten zu suchen. Ich vermeide diese Lösung jedoch aufgrund der Komplexität der Erstellung all dieser zusätzlichen virtuellen Maschinen. Dies ist eine recht schwierige Methode, um Testdatenverkehr zu generieren. Es wäre auch schön, eine automatisierte Testmethode zu haben, die auch auf einem realen Server in der Produktion funktioniert.

Wie könnte ich dieses Problem sonst lösen? Gibt es einen Mechanismus, mit dem ich willkürlichen Datenverkehr generieren oder simulieren kann und dann weiß, ob er von gelöscht oder akzeptiert wurde (oder werden würde) iptables?

Phil Frost
quelle
Dies könnte auch interessant sein: security.stackexchange.com/questions/31957/…
dawud
1
@dawud Ich glaube nicht, dass es sich um Duplikate handelt. Ich weiß, wie man einen Port-Scan durchführt: Das ist kein guter Test, da ich nur Ziele und Quellen teste, die ich steuern kann. Mein Anliegen ist es auch nicht, mich aus dem Server auszusperren. Ich möchte automatisch testen, ob die Firewall-Regeln tatsächlich die Auswirkungen haben, für die ich sie entworfen habe.
Phil Frost

Antworten:

2

Wenn Sie bereit sind, ein wenig zu programmieren, können Sie Folgendes versuchen:

  • Erstellen Sie einen neuen Netzwerknamespace, indem Sie das CLONE_NEWNETFlag für den cloneSystemaufruf oder die Befehle ip netns addund verwenden ip netns exec.
  • In dieser Namespace-Kiste befinden sich eine Reihe von virtuellen Netzwerkschnittstellen, die den tunTreiber oder verwenden ip link add.
  • Laden Sie die Konfiguration mit iptables-restore
  • Geben Sie eine Reihe von Paketen über die Geräte tunoder an die Regeln weiterveth
  • Beachten Sie, dass Sie die richtigen Pakete von den Geräten tunoder erhaltenveth

Dieser Ansatz wird wahrscheinlich am besten zum Testen von Regeln für weitergeleitete Pakete funktionieren. Die Verbindung zu / von der Maschine, auf der iptables verwendet wird, erfordert etwas mehr Aufwand, sollte sich aber auch auf diese Weise testen lassen.

Hier ist ein Beispiel für eine Folge von Befehlen, die verwendet werden könnten:

ip netns add test-iptables
ip netns add test-iptables-some-guy-on-the-internet
ip netns add test-iptables-lan-host

ip netns exec test-iptables ip link add eth0 type veth peer name eth0-peer
ip netns exec test-iptables ip link set eth0-peer netns test-iptables-some-guy-on-the-internet
ip netns exec test-iptables ip link add eth1 type veth peer name eth1-peer
ip netns exec test-iptables ip link set eth1-peer netns test-iptables-lan-host

ip netns exec test-iptables ifconfig eth0 192.0.2.2 netmask 255.255.255.0
ip netns exec test-iptables ifconfig eth1 203.0.113.1 netmask 255.255.255.0

ip netns exec test-iptables-some-guy-on-the-internet ifconfig eth0-peer 192.0.2.1 netmask 255.255.255.0
ip netns exec test-iptables-some-guy-on-the-internet route add default gateway 192.0.2.2

ip netns exec test-iptables-lan-host ifconfig eth1-peer 203.0.113.2 netmask 255.255.255.0
ip netns exec test-iptables-lan-host route add default gateway 203.0.113.1

ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2
ip netns exec test-iptables iptables-restore < /tmp/iptables-test
ip netns exec test-iptables-some-guy-on-the-internet telnet 203.0.113.2

ip netns del test-iptables
ip netns del test-iptables-some-guy-on-the-internet
ip netns del test-iptables-lan-host

Dadurch würden drei Netzwerk-Namespaces zum Testen erstellt und ein Satz von iptables-Regeln in einen von ihnen geladen. Die anderen beiden dienen als die Rolle eines Mannes im Internet und eines Hosts im LAN.

Im obigen Beispiel telneterhält der erste Befehl die Verbindung vom test-iptables-lan-hostNamespace zurückgewiesen, der zweite telnetBefehl eine Zeitüberschreitung, wenn der Regelsatz das Paket verwirft.

Dies hat keinen Einfluss auf den ursprünglichen Netzwerk-Namespace, in dem Ihre gesamte Produktion standardmäßig ausgeführt wird. Die einzige Möglichkeit, Ihre Produktion stärker zu trennen, besteht darin, sie auf einem separaten Host (physisch oder virtuell) auszuführen.

Kasperd
quelle
0

Die Fachwelt tut dies mit Hilfe von Hardware / Software, die von 2 Unternehmen bereitgestellt wird.

www.ixiacom.com

www.spirent.com

Im ersten Fall können Sie so etwas wie ein Ixia 400T-Chassis + Ixload verwenden.

Im zweiten Fall die Leitung Smartbits oder Testcenter mit den entsprechenden Anwendungen

Diese Geräte können (unter anderem) viele Clients emulieren, die unterschiedliche Arten von Anforderungen auf dem ausgewählten Zielserver ausführen. Sie sind bereit, die Sicherheit Ihres Servers zu testen, einschließlich einer Reihe vordefinierter Angriffstests, und Sie können jederzeit eine eigene Gruppe definieren. Sie haben auch viele andere Fähigkeiten wie Belastungs-Stresstests und dergleichen.

Keine billige Option.

Klopfen
quelle
Es ist erstaunlich zu sehen, wie einfach Ignoranz gültige Antworten leise herabstufen kann ...
Pat