Zarządzanie równoległymi regułami dla ipv4 i ipv6 iptables?

10

Niedawno zaczęliśmy eksperymentować z IPv6, a jednym z pierwszych problemów, z którymi musimy się zmierzyć, jest całkowicie oddzielny zestaw reguł zapory ogniowej (Linux iptables / ip6ables) dla dwóch stosów protokołów. Nasza logika zapory oparta jest w dużej mierze na wielu sieciach specyficznych dla celu (np. 10.0.0.0/24 to sieć stacji roboczych personelu, 10.1.0.0/24 to sieć baz danych, 10.2.0.0/24 to sieć serwerów WWW itp. ), a logika zarówno dla IPv6, jak i IPv4 będzie w dużej mierze taka sama, modulo różne prefiksy sieciowe.

Co robią ludzie zarządzają taką sytuacją? Idealnie chciałbym móc generować zestawy reguł iptables i ip6table z tych samych plików źródłowych. Już rzuciłem coś za pomocą bash, ale niekoniecznie jest ładna i podejrzewam, że gdzieś tam musi istnieć lepsze rozwiązanie.

Byłbym szczególnie zainteresowany rozwiązaniem opartym na Puppet, które dobrze wykorzystuje własne mechanizmy zależności Puppet do implementacji względnego uporządkowania reguł (lub grup reguł).

Larsks
źródło

Odpowiedzi:

5

Firewall Builder ma dokładnie to, czego potrzebujesz. Możesz utworzyć jeden zestaw reguł, oznaczyć go jako „połączone ipv4 + ipv6” i umieścić sieci ipv4 i ipv6 przypisane do tego samego segmentu (np. „Sieć baz danych” etC) w tej samej regule. Następnie program generuje dwie osobne konfiguracje iptables, jedną dla ipv4 i drugą dla ipv6. Ilustruje to niniejszy rozdział Podręcznika użytkownika, chociaż przykładowo wykorzystuje on listy dostępu do routerów Cisco. Działa dokładnie tak samo dla iptables.

http://www.fwbuilder.org/4.0/docs/users_guide5/combined-ipv4-ipv6-rule-set.html

Vadimk
źródło
4

Ostatnio spotkałem się również z tworzeniem reguł iptables zarówno dla IPv4, jak i IPv6. Po kilku poszukiwaniach skończyłem na filmie FireHOL IPv6 autorstwa Phila Whineraya .

FireHOL to generator zapory ogniowej iptables produkujący stanowe zapory ogniowe filtrujące pakiety iptables, na hostach i routerach Linux z dowolną liczbą interfejsów sieciowych, dowolną liczbą tras, dowolną liczbą obsługiwanych usług, dowolną złożonością między odmianami usług (w tym dodatnimi i ujemnymi wyrażenia). (Źródło: strona FireHOL)

Niestety oficjalna wersja nie obsługuje IPv6. Ale Phil Whineray dodał wsparcie w nietypowym oddziale.

Kilka przykładów, jak wygląda konfiguracja:

# allowing outgoing http and https requests for ipv4 and ipv6 (default setting when nothing is specified):
client "http https" accept

# allow incoming ssh only on ipv4
ipv4 server ssh accept

# allow incoming IMAP requests only for ipv6
ipv6 server imap accept

Możesz sprawdzić tę gałąź ognistego ognia pod adresem:

git clone git://repo.or.cz/fireholvi.git

Dodatkową dokumentację można znaleźć w oficjalnej dokumentacji FireHOL lub w dodatkowym pliku Readme na temat IPv6 .

Osobiście prawdopodobnie byłbym ostrożny podczas używania go na maszynie produkcyjnej, gdzie ważna jest w 100% niezawodna zapora ogniowa. Niemniej jednak warto rzucić okiem.

generowanie BB
źródło
3

W trosce o ciągłą ewangelizację sprawy sugeruję, aby wykorzystać Puppet do podnoszenia. Obecnie nie ma dobrego skryptu do obsługi reguł iptables 4 i 6, ale napisanie go po dostosowaniu do języka nie byłoby zbyt dużym wyzwaniem.

Publiczne repozytorium git Mediawiki jest fantastyczną kopalnią wzorców konfiguracji i zawiera klasę iptables , która zapewni dobrą bazę na początek. Możesz go edytować, aby domyślnie zastosować reguły do ​​obu stosów jednocześnie i mieć flagi dla różnych reguł, gdy opierasz się na regułach IPv4 lub IPv6.

Ostateczną zaletą na końcu jest to, że reguły zapory dla usługi można zapisać w definicji usługi i automatycznie wdrażać i usuwać, gdy usługa jest wdrażana lub usuwana.

Jeff Ferland
źródło
Spojrzę na to. Jak dotąd nie byłem pod wrażeniem typowych opartych na marionetce rozwiązań do zarządzania iptables. W szczególności wydaje się, że wszystkie jawnie implementują porządkowanie, albo poprzez nazwy plików fragmentów plików, albo poprzez jawne indeksy przewidziane w regułach Puppet, zamiast używać mechanizmów rozwiązywania zależności Puppet, czego naprawdę chcę. Jeśli zastosowane tutaj rozwiązanie pozwoli uniknąć tych problemów, jestem na to gotowy.
larsks
@larsks Zgadzam się i byłem tak samo sfrustrowany, że dobre ogólne rozwiązanie nie zostało wydane ... ale może nadszedł czas, żebym sam to zrobił. Puppet pozwoli na użycie before => Resource['declared_name']dowolnej definicji, więc możesz zamówić je za pomocą implementacji, która nie próbuje uporządkować rzeczy z fragmentami. Dobre wykorzystanie Augueas do struktury również zapobiegłoby temu problemowi - dodaj komentarze z górnego drzewa i zamawiaj poniżej, jak chcesz.
Jeff Ferland
Moje własne próby rozwiązania tego nie zaszły tak daleko. Na razie zrobiłem (a) zainstaluj fragmenty w podkatalogu, a następnie (b) użyj rcorder, aby ustawić je w kolejności zależności. Działa, ale ponieważ opiera się wyłącznie na zarządzaniu fragmentami plików, nie nadaje się do mieszanego środowiska ipv4 / ipv6. Tak naprawdę nie przyjrzałem się bliżej użyciu Augeasa, aby rozwiązać problem. Byłbym ciekawy, jeśli masz jakiś prototypowy kod.
larsks 30.01.12
2

Odpowiadając na moje pytanie tutaj, ale pomyślałem, że ta informacja może być w ogólnym interesie:

Patrząc na to pytanie natknąłem się na ufw ( Uncomplicated FireWall) od ludzi z Ubuntu. Po włączeniu IPV6 w konfiguracji ufw ufw będzie równolegle zarządzał regułami iptables i ip6tables. Oznacza to, że możesz zrobić coś takiego:

# ufw allow ssh/tcp

I kończy się na:

# ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere (v6)

Co powoduje, że reguły iptables / ip6tables wyglądają tak:

# iptables-save | grep 'dport 22'
-A ufw-user-input -p tcp -m tcp --dport 22 -j ACCEPT
# ip6tables-save | grep 'dport 22'
-A ufw6-user-input -p tcp -m tcp --dport 22 -j ACCEPT

Ufw obsługuje również profile aplikacji, które pozwalają tworzyć nazwane grupy portów. Możesz to zrobić:

# ufw allow 'WWW Full'

I w końcu otwierają oba porty 80 i 443 (zarówno dla IPv4, jak i IPv6).

Dopiero zacząłem na to patrzeć, ale wydaje się, że jest dość dobrze złożony.

Larsks
źródło
0

Ponieważ wciąż nie ma go na liście: Shorewall to powszechnie przyjęte i regularnie aktualizowane bogate w funkcje narzędzie do konfiguracji filtrów pakietów. Od pewnego czasu obsługuje IPv6 .

the-wabbit
źródło
1
Rozumiem, że „shorewall” to tylko ipv4, a „shorewall6” to tylko ipv6, anod należy użyć obu, aby objąć oba protokoły. Czy mogą dzielić wspólną konfigurację?
larsks