Ułatwienie konserwacji iptables

14

Moja sieć jest całkowicie zablokowana, z wyjątkiem kilku witryn znajdujących się na białej liście. Wszystko to odbywa się za pomocą iptables, które wyglądają mniej więcej tak:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 101.102.103.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 101.102.103.0/24 -j ACCEPT
...

Oczywiście adresy te są hipotetyczne, ale masz pomysł. Mój firewall staje się ogromny. Byłoby o wiele łatwiej utrzymać, gdybym mógł to zrobić:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d google.com -j ACCEPT
iptables -A zone_lan_forward -p udp -d google.com -j ACCEPT

Wierzę, że jest to możliwe, ponieważ man iptablesmówi:

Adres może być albo nazwą sieci, nazwą hosta (pamiętaj, że określenie dowolnej nazwy, która ma zostać rozwiązana za pomocą zdalnego zapytania, takiego jak DNS, to naprawdę zły pomysł), sieciowego adresu IP (z / mask) lub zwykłego adresu IP.

Ale martwię się o to, że „określenie jakiejkolwiek nazwy do rozwiązania ... DNS to naprawdę zły pomysł”. Dlaczego to zły pomysł? Czy to wszystko spowalnia?

Jeśli naprawdę nie powinienem używać nazw hostów w regułach iptables, to co powinienem zrobić, aby uprościć mój firewall?

Big McLargeHuge
źródło
Uzyskasz lepszą odpowiedź na security.stackexchange.com
Jim B
Być może masz rację, że to pytanie należy do tej witryny, ale jeśli masz problem z zaakceptowaną odpowiedzią, wyjaśnij dlaczego.
Big McLargeHuge
Jeśli chcesz wiedzieć o blokowaniu sieci i jak to zrobić, zapytaj o bezpieczeństwo, jeśli chcesz korzystać z iptables (w przeciwieństwie do korzystania z IPtables), to jest to miejsce.
Jim B

Odpowiedzi:

28
  • Nazwy DNS są rozwiązywane po dodaniu reguł, a nie podczas sprawdzania pakietów. To narusza oczekiwania większości ludzi.
    • Reguła nie jest aktualizowana w celu odzwierciedlenia zmienionych wyników DNS. Jest rozwiązany po dodaniu i to wszystko. Będziesz musiał okresowo przeładowywać reguły, w przeciwnym razie niektóre strony mogą się zepsuć.
  • Problem z bezpieczeństwem polega na tym, że zasadniczo przekazujesz kontrolę nad regułami zapory sieciowej podmiotowi zewnętrznemu.
    • Co się stanie, jeśli twój nadrzędny serwer DNS zostanie przejęty i zwróci fałszywe dane.

Jeśli Twoim celem jest zablokowanie dostępu HTTP, zwykle znacznie lepiej jest skonfigurować oprogramowanie zaprojektowane do filtrowania na tym poziomie (np. Squid + squidquard).

Zoredache
źródło
1) Rozumiem, jak to może być problem - google.com może rozwiązać dzisiaj 1.2.3.4, ale jutro ten adres jest nieprawidłowy. Czy wystarczy zrestartować zaporę? 2) Czy nadal występuje problem z bezpieczeństwem, jeśli serwer DNS jest dobrze znany - na przykład DNS Google lub OpenDNS?
Big McLargeHuge
1
Oznacziłem to jako odpowiedź, ponieważ wyjaśnia, dlaczego nie powinienem używać nazw hostów w regułach iptables i daje mi sposób na uproszczenie mojej zapory ogniowej.
Big McLargeHuge
Chciałbym dodać moje wsparcie dla Squid. Wdrożyłem Squid dla mojego biura i po skonfigurowaniu jest bardzo łatwy w utrzymaniu dla hostów z białej listy (chociaż używam go do czarnej listy). Wygląda na to, że masz na rękach monumentalne przedsięwzięcie; Na przykład nie wiedziałbym nawet, od czego zacząć od białej listy Google. www.google.com rozwiązuje tylko 5 adresów IP, co nie znaczy nic dla ssl.gstatic.com, i wszystkich innych hostów zaangażowanych w uwierzytelnianie, G + itp., które prawdopodobnie dotyczą wielu adresów IP.
s.co.tt
Monumental to dobry sposób, aby to ująć. Ale użyłem Google jako przykładu. Podstawowy zarys mojej firwall wygląda następująco: jeśli miejsce docelowe pakietu znajduje się na białej liście, zaakceptuj je. W przeciwnym razie wyślij go za pośrednictwem serwera proxy.
Big McLargeHuge
Istnieje również problem z systemami, które używają DNS do równoważenia obciążenia. Możesz nie uzyskiwać takich samych wyników, jeśli poszukasz takiej domeny dwa razy z rzędu, więc pojedyncze wyszukiwanie nawet nie da ci wyczerpującej listy adresów IP, na które domena mogłaby prawdopodobnie rozwiązać.
cdhowie
10

Jeśli używasz nazw hostów w swojej zaporze, twoja zapora jest teraz zależna od DNS. Otwiera to zaporę ogniową na szereg problemów:

  • Wyszukiwanie DNS przy dużych woluminach może powodować opóźnienia.
  • Zmiany DNS nie rozprzestrzeniają się natychmiast. Twoja zapora sieciowa może używać buforowanych adresów IP.
  • DNS może być sfałszowany, przejęty, zhakowany.
  • DNS może zawieść - co oznacza, że ​​zapora nie działa.
  • Twoje reguły zapory są teraz kontrolowane przez firmę zewnętrzną.

Jeśli używasz nazw hostów i nie kontrolujesz DNS, to ktoś inny skutecznie kontroluje twoje reguły IPtables. Błędy, błędy lub problemy związane z bezpieczeństwem stają się dla Ciebie problemami.

Jedyne razy, kiedy widziałem, jak dobrze używane są nazwy hostów, są operacje wewnętrzne. Pracowałem w biurze, w którym adresy IP i nazwy hostów były przypisywane przez DHCP. Zapory wykorzystywały nazwy hostów do stawiania barier między różnymi grupami. Ponieważ wszystko to było kontrolowane wewnętrznie, działało dobrze.

jeffatrackaid
źródło
2
To dobra odpowiedź, ale brakuje jej części, która pomogłaby mi uprościć zaporę ogniową.
Big McLargeHuge
3

Możesz użyć otoki wokół iptables, takiej jak ściana brzegowa, aby ułatwić utrzymanie reguł.

Jure1873
źródło
To dobry pomysł, ale nie powiedziałeś mi, dlaczego nie powinienem używać nazw hostów w regułach iptables.
Big McLargeHuge
Nie wiem dużo o Shorewall, ale mam wrażenie, że davidkennedy85 nadal musiałby utrzymywać listy każdego adresu IP usługi, na którą chciałby zezwolić w konfiguracjach Shorewall. Może to nieco ułatwić zarządzanie netfilter [itd.], Ale nie rozwiązałoby jego podstawowego problemu, jakim jest ogromna lista adresów IP.
s.co.tt
2

Jak już powiedzieli inni, nie powinieneś używać nazw rozpoznawalnych DNS w regułach iptables. Są one niedokładne, kontrolowane przez osoby trzecie i generalnie są złą rzeczą (tm). Dodam również, że twój DNS może zawieść lub być niedostępny podczas uruchamiania usługi iptables. W takim przypadku reguła nie zostanie w ogóle dodana i może wystąpić zupełnie nowy rodzaj problemów (takich jak utrata dostępu ssh po ponownym uruchomieniu).

Co możesz zrobić to:

  1. Użyj łańcuchów niestandardowych, aby logicznie rozdzielić reguły
  2. Użyj ipsets, aby pogrupować adresy i oddzielić je od reguł
  3. Dodaj komentarze do zasad

Nikt też nie powiedział nic złego na temat nazw hostów, które nie są rozwiązywane przez DNS (tj. Są określone w hosts. Możesz ich użyć, jeśli naprawdę potrzebujesz.

skarap
źródło
Tak, ipsetsą odpowiedzią. Ze skryptem uruchamianym z crontab, aby zaktualizować ipset.
mivk
2

Osobiście przypisuję nazwę hosta do adresu IP ręcznie w / etc / hosts, a następnie używam go w iptables.

W ten sposób ty

  1. Nie odciążaj reguł zapory ogniowej do zewnętrznego podmiotu
  2. Mają łatwe w utrzymaniu iptables
T4cC0re
źródło