Jak napisać automatyczne testy dla iptables?

13

Konfiguruję router z systemem Linux iptables. Chcę napisać testy akceptacyjne dla konfiguracji, które potwierdzają:

  • ruch z jakiegoś faceta w Internecie nie jest przekazywany, i
  • Przesyłany jest protokół TCP do portu 80 na serwerze WWW w strefie DMZ z hostów w korporacyjnej sieci LAN.

Starożytne FAQ odnosi się do iptables -Copcji, która pozwala zapytać: „biorąc pod uwagę pakiet od X do Y na porcie Z, czy zostałby zaakceptowany czy odrzucony?” Chociaż FAQ sugeruje, że tak to działa, ponieważ iptables(ale może nie ipchainstak, jak w przykładach) -Copcja wydaje się nie symulować pakietu testowego przebiegającego przez wszystkie reguły, ale sprawdza, czy istnieje dokładnie pasująca reguła. Ma to niewielką wartość jako test. Chcę stwierdzić, że reguły mają pożądany efekt, a nie tylko to, że istnieją.

Zastanawiałem się nad stworzeniem kolejnych testowych maszyn wirtualnych i sieci wirtualnej, a następnie sondowaniem za pomocą narzędzi takich jak nmapefekty. Jednak unikam tego rozwiązania ze względu na złożoność tworzenia tych wszystkich dodatkowych maszyn wirtualnych, co jest naprawdę dość ciężkim sposobem na wygenerowanie ruchu testowego. Byłoby również miło mieć zautomatyzowaną metodologię testowania, która może również działać na prawdziwym serwerze w produkcji.

Jak inaczej mogę rozwiązać ten problem? Czy istnieje jakiś mechanizm, którego mógłbym użyć do wygenerowania lub symulacji dowolnego ruchu, a następnie wiedzieć, czy zostałby (lub zostałby) odrzucony lub zaakceptowany przez iptables?

Phil Frost
źródło
To może być również interesujące: security.stackexchange.com/questions/31957/...
dawud
1
@dawud Nie wydaje mi się, żeby któryś z nich był duplikatem. Wiem, jak uruchomić skanowanie portów: to nie jest dobry test, ponieważ jestem ograniczony do testowania do iz miejsc docelowych i źródeł, które mogę kontrolować. Moim zmartwieniem nie jest również blokowanie się na serwerze. Chcę automatycznie przetestować, czy reguły zapory mają rzeczywiście takie efekty, jakie je zaprojektowałem.
Phil Frost

Odpowiedzi:

2

Jeśli jesteś przygotowany na trochę kodowania, możesz spróbować:

  • Utwórz nową przestrzeń nazw sieci, używając CLONE_NEWNETflagi dla clonewywołania systemowego lub za pomocą poleceń ip netns addi ip netns exec.
  • W tej skrzynce nazw znajduje się zestaw interfejsów sieci wirtualnej za pomocą tunsterownika lub ip link add.
  • Załaduj konfigurację za pomocą iptables-restore
  • Podaj pewną liczbę pakietów do reguł za pośrednictwem urządzeń tunlubveth
  • Zauważ, że otrzymujesz prawidłowe pakiety z urządzenia tunlubveth

Takie podejście prawdopodobnie najlepiej sprawdzi się w testowaniu reguł dla przekazywanych pakietów. Połączenia z / z komputera, na którym jest używany iptables, wymagają nieco większego wysiłku, ale powinno być również możliwe przetestowanie w ten sposób.

Oto przykład sekwencji poleceń, których można użyć:

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

To stworzy trzy sieciowe przestrzenie nazw do testowania i załaduje zestaw reguł iptables w jednym z nich. Pozostałe dwie pełnią rolę faceta w Internecie i hosta w sieci LAN.

W powyższym przykładzie pierwsze telnetpolecenie odmawia połączenia z test-iptables-lan-hostprzestrzeni nazw, drugie telnetpolecenie dostaje limit czasu, jeśli zestaw reguł upuści pakiet.

Nie dotyczy to początkowej przestrzeni nazw sieci, czyli tej, w której domyślnie będzie się odbywać cała produkcja. Jedynym sposobem na uzyskanie większej separacji od produkcji jest uruchomienie jej na osobnym hoście (fizycznym lub wirtualnym).

kasperd
źródło
0

świat zawodowy robi to za pomocą sprzętu / oprogramowania dostarczanego przez 2 firmy.

www.ixiacom.com

www.spirent.com

W pierwszym przypadku możesz użyć czegoś takiego jak podwozie Ixia 400T + Ixload.

W drugim przypadku linia Smartbits lub Testcenter z odpowiadającymi im aplikacjami

Urządzenia te mogą (między innymi) emulować wielu klientów wykonujących różnego rodzaju żądania na wybranym serwerze docelowym. Są gotowe do przetestowania bezpieczeństwa serwerów, w tym wstępnie zdefiniowanego zestawu testów ataku, a ponadto zawsze możesz zdefiniować własny zestaw. Mają także wiele innych możliwości, takich jak testy obciążeniowe i tym podobne.

Nie jest to tania opcja.

Poklepać
źródło
zdumiewające jest, jak zwykła ignorancja może po cichu obniżyć wiarygodne odpowiedzi ...
Pat