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ł).

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


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.


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.


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.


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 .


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.