Praktyczny przewodnik po silniku elastycznych reguł AWS Network

24 maja 2021

AWS Network Firewall jest zarządzaną usługą, która znacznie ułatwia zapewnienie precyzyjnej ochrony sieci dla wszystkich wirtualnych chmur prywatnych Amazon Virtual Private Clouds (Amazon VPCs), aby zapewnić inspekcję, monitorowanie i rejestrowanie ruchu. Zapora automatycznie skaluje się wraz z ruchem sieciowym i oferuje wbudowane funkcje nadmiarowości zaprojektowane w celu zapewnienia wysokiej dostępności.

AWS Network Firewall oferuje elastyczny silnik reguł, który daje Ci możliwość napisania tysięcy zasad firewalla w celu szczegółowego egzekwowania reguł. Obsługuje przychodzące i wychodzące filtrowanie dla niezaszyfrowanego ruchu internetowego. W przypadku zaszyfrowanego ruchu internetowego AWS Network Firewall sprawdza nazwę domeny podaną przez wskaźnik nazwy serwera (SNI) podczas uzgadniania protokołu Transport Layer Security (TLS). Oprócz tego oferuje system zapobiegania włamaniom (IPS), który zapewnia aktywną kontrolę przepływu ruchu, aby pomóc w identyfikowaniu i blokowaniu luk w zabezpieczeniach.

Postępując zgodnie ze wskazówkami, które znajdziesz w tym artykule, będziesz mógł wdrożyć demonstracyjną zaporę sieciową AWS Network Firewall na swoim koncie AWS, aby bezpośrednio współdziałać z jego silnikiem reguł.

Zarys rozwiązania

Rozwiązanie przedstawione w tym artykule wykorzystuje tabele tras do wysyłania całego ruchu sieciowego do punktu końcowego zapory, tak jak ma to miejsce na rysunku nr 1.

Praktyczny_przewodnik_po_silniku_elastycznych_regul_AWS_Network_

Dzięki temu przewodnikowi dodasz reguły zapory, aby wpłynąć na przepływ ruchu do, jak i z serwera internetowego działającego w usłudze Amazon Elastic Compute Cloud (Amazon EC2) w chronionej podsieci. Dodatkowo zapora demonstracyjna jest skonfigurowana do wysyłania dzienników alertów do Amazon CloudWatch, więc zobaczysz filtrowanie wykonane przez stanowe grupy reguł.

Jak to działa?

AWS Network Firewall wykorzystuje silnik reguł, który przetwarza je w różny sposób w zależności od tego, czy przeprowadzasz inspekcję bezstanową, czy stanową.

W trakcie przeprowadzania inspekcji bezstanowej wszystkie pojedyncze pakiety w przepływie są oceniane pod kątem każdej reguły obecnej w Twojej polityce. Reguły są przetwarzane w ścisłej kolejności w oparciu o przypisany im priorytet, przy czym reguły o niższych numerach (na przykład 1) mają pierwszeństwo przed regułami o wyższych numerach (na przykład 100).

Reguły bezstanowe sprawdzają każdy pakiet oddzielnie, bez względu na czynniki takie jak kierunek ruchu lub to, czy pakiet jest częścią istniejącego, zatwierdzonego połączenia. Posiada to swego rodzaju korzystny wpływ na wydajność, ponieważ zasady bezpieczeństwa podejmują decyzję znacznie wcześniej. Mimo to oznacza to również, że polityka nie może uwzględniać większego kontekstu przepływu przed podjęciem decyzji. Na przykład, jeśli musisz automatycznie zezwolić na ruch pierwotny, nie jest to coś, do czego nadają się reguły bezstanowe.

Inspekcja reguł stanowych działa zupełnie inaczej. Silnik reguł stanowych przetwarza reguły w kolejności ich ustawień akcji, przy czym reguły przekazywania są najpierw przetwarzane, odrzucane, a następnie alarmowane. Silnik zatrzymuje przetwarzanie w momencie, gdy znajdzie dopasowanie. Zapora bierze również pod uwagę kolejność, w jakiej zasady pojawiają się w grupie reguł oraz priorytet przypisany do reguły, jeśli taki istnieje.

Na przykład reguła pass z priorytetem 1 będzie przetworzona przed regułą pass o priorytecie 2. Jednakże reguła drop z priorytetem 1 zawsze będzie przetwarzana po ocenie wszystkich reguł pass, włączając te z niższym priorytetem. Aby uzyskać więcej informacji na temat kolejności reguł, zapoznaj się z Rule actions in AWS Network Firewall w przewodniku AWS Network Firewall Developer.

Reguły stanowe uwzględniają cały przepływ od początku do końca, co wpływa na sposób oceny reguł.

Na przykład warto rozważyć poniższą regułę IPS:

drop tcp any any -> any any (msg:"Deny all other TCP traffic"; sid: 1000003; rev:1;)

Zapora rozpozna dopasowanie na początku uzgadniania protokołu TCP, tak jak przedstawiono na rysunku nr 2, po czym natychmiast porzuca dany ruch, jak i ten, który następuje po nim.

Praktyczny_przewodnik_po_silniku_elastycznych_regul_AWS_Network_

Dzieje się to ze względu na to, że silnik stanowy podejmuje decyzję dla całego przepływu, a nie tylko dla pojedynczych pakietów. Po tym, jak przepływ zostaje usunięty, żadne nowe reguły nie są oceniane dla tego przepływu. Takie zachowanie oznacza, że zasady, które pasują tylko do późniejszych części przepływu, nie będą oceniane.

Pora spojrzeć na kolejny przykład:

pass tls any any -> any any (tls.sni; content:"aws.amazon.com"; startswith; nocase; endswith; msg:"Permit HTTPS access to aws.amazon.com"; sid:1000002; rev:1;)

drop tcp any any -> any any (msg:"Deny all other TCP traffic"; sid: 1000003; rev:1;)

Tak jak napisano, pierwsza zasada nigdy nie będzie pasować, ponieważ protokół TCP jest pierwszym protokołem, jaki pojawi się w początkowym przepływie, zaczynając od uzgodnienia TCP. Dlatego też, kiedy rozpocznie się przepływ, podczas gdy pierwsza reguła będzie oceniana, nie będzie żadnego protokołu TLS do dopasowania, więc reguła drop zostanie dopasowana i porzuci cały ruch do aws.amazon.com. Aby tego uniknąć, należy utworzyć reguły, które są obliczane dopiero po ustanowieniu sesji przy użycia słowa kluczowego flow, na przykład:

 

pass tls any any -> any any (tls.sni; content:"aws.amazon.com"; startswith; nocase; endswith; msg:"Permit HTTPS access to aws.amazon.com"; sid:1000002; rev:1;)

 

drop tcp any any -> any any (flow:established,to_server; msg:"Deny all other TCP traffic"; sid: 1000003; rev:1;)

 

Teraz, gdy żądanie do aws.amazon.com zostało wysłane, zapora pozwoli na zakończenie uzgadniania TCP przed oceną reguły odrzucania TCP. W tym momencie kolejność działania reguły będzie miała pierwszeństwo, a reguła pass będzie zgodna, umożliwiając reszcie ruchu na przepływ.

Podsumowując, pisząc reguły stanowe dla AWS Network Firewall, będziesz chciał mieć na uwadze działanie reguły, priorytet (jeśli istnieje) oraz to, czy reguła ma pasować do przepływu w górę lub w dół dla konkretnego przepływu sieciowego.

Ważne: szablon kodu dostarczony w celu obsługi poniższej czynności instruktażowej jest przeznaczony do wdrożenia w środowisku programistycznym. Jego twórcy zapewnili pewne środki zwiększające bezpieczeństwo, ale przed wdrożeniem tego rozwiązania w środowisku produkcyjnym będą wymagane dalsze udoskonalenia. Aby uzyskać więcej informacji, zapoznaj się z Best Practices for Security, Identity & Compliance.

Warunki wstępne dotyczące przeglądu

  • Konto AWS w wymaganymi pozwoleniami. Jeśli nie posiadasz konta AWS, utwórz je i aktywuj

Przeprowadzanie wstępnych kroków wdrażania

Korzystasz ze zautomatyzowanej infrastruktury jako kodu (IaC) AWS CloudFormation w celu wdrożenia początkowej architektury wymaganej dla tego demo.

Aby zainicjować wdrożenie

  1. Korzystając z interfejsu wiersza poleceń (CLI), sprawdź repozytorium AWS GiT używane w tej demonstracji do lokalnego katalogu na urządzeniu: git clone https://github.com/aws-samples/aws-network-firewall-demo. Jeśli nie posiadasz klienta Git na swoich urządzeniu, pobierz poniższy plik i wyodrębnij go lokalnie: https://github.com/aws-samples/aws-network-firewall-demo/archive/main.zip.
  2. Zaloguj się do konsoli AWS Management Console i wybierz region AWS, do którego chciałbyś wdrożyć demo. Zobacz listę usług AWS Regional Services List, aby upewnić się, że AWS Network Firewall jest dostępne w wybranym przez Ciebie regionie. Jako przykład autorzy wybrali Północną Wirginię w USA.
  3. W polu wyszukiwania Na pasku nawigacji wprowadź CloudFormation, a następnie w wynikach wyszukiwania wybierz CloudFormation.
  4. Wybierz Create Stack -> Template is ready -> Upload a template file. Wybierz File w celu dobrania AWS-Network-Firewall-demo.yaml, który zapisałeś lokalnie.
  5. Wybierz Dalej. Wprowadź nazwę stosu (na przykład MyFirewallStack), następnie wybierz Dalej.
  6. Na kolejnych ekranach pozostaw wartości domyślne i kontynuuj wybieranie opcji Dalej, aż dojdziesz do kroku 4 Przegląd.
  7. W sekcji Capabilities zaznacz pole wyboru I acknowledge that AWS CloudFormation might create IAM resources with custom names, a następnie wybierz Utwórz stos.
  8. Status stosu to początkowe CREATE_IN_PROGRESS. Wybierz przycisk Odśwież, aby co jakiś czas odświeżyć stan. Po zakończeniu stan zmieni się na CREATE_COMPLETE.

Nawiązywanie połączeń sieciowych z serwerem WWW

Teraz, gdy wersja demo środowiska została wdrożona, będziesz mógł nawiązywać połączenia sieciowe do i z serwera WWW w chronionej podsieci za pośrednictwem AWS Network Firewall.

Aby nawiązać połączenia sieciowe z serwerem WWW

  1. W konsoli AWS CloudFormation przejdź do karty Outputs stosu zapory. W wartości WebServerURL otwórz menu kontekstowe (prawym przyciskiem myszy) i wybierz opcję Otwórz łącze w nowej karcie, tak jak przedstawiono na rysunku nr 3.

Praktyczny_przewodnik_po_silniku_elastycznych_regul_AWS_Network_

Zobaczysz odpowiedź Hello World z serwera WWW w nowej karcie przeglądarki, tak jak przedstawiono na rysunku nr 4.

Praktyczny_przewodnik_po_silniku_elastycznych_regul_AWS_Network_2. Aby wysłać żądania echa z protokołu Control Message Protocol (ICMP) do serwera sieci, w wierszu poleceń urządzenia wprowadź publiczną nazwę DNS serwera WWW ping (zastępując publiczną nazwę DNS serwera WWW wyjściem WebServerURL, bez prefiksu http://). Zobaczysz pomyślne odpowiedzi z echa serwera internetowego, tak jak pokazano na rysunku nr 5.

Praktyczny_przewodnik_po_silniku_elastycznych_regul_AWS_Network_

3. W konsoli zarządzania AWS przejdź do Usługi i wybierz EC2.

4. W konsoli EC2 w lewym panelu nawigacyjnym wybierz Instancje.

5. Wybierz instancję WebServer, a następnie Connect.

6. Wybierz Session Manager, a następnie Connect. Zapewni to bezpieczny dostęp do instancji bez użycia kluczy SSH lub hosta bastionu. Zauważ, że prywatny dostęp Session Manager został skonfigurowany w trakcie uruchamiania szablonu AWS CloudFormation podczas początkowych kroków wdrażania.

7. W konsoli Session Manager sprawdź, czy serwer WWW jest w stanie pobrać zawartość WWW z aws.amazon.com przy użyciu narzędzia cURL. Wprowadź curl https://aws.amazon.com, tak jak przedstawiono na rysunku nr 6.

Praktyczny_przewodnik_po_silniku_elastycznych_regul_AWS_Network_

Zobaczysz konsolę Session Manager wypełnioną wieloma stronami zawartości HTML, tak jak zaprezentowano na rysunku nr 7.

Praktyczny_przewodnik_po_silniku_elastycznych_regul_AWS_Network_

8. Powtórz poprzedni krok, aby potwierdzić, że jesteś w stanie pobrać zawartość również z innych witryn internetowych. Na przykład wprowadź curl https://www.amazon.com.

Tworzenie zasad zapory

Teraz, kiedy zweryfikowałeś nawiązywanie połączeń sieciowych do i z serwera, oznacza to, że zapora sieciowa AWS nie ogranicza żadnego ruchu. Utworzysz teraz reguły zapory sieciowej, aby ograniczyć te połączenia. Chociaż jest to możliwe do osiągnięcia z AWS CloudFormation, do tego konkretnego demo utworzysz reguły bezpośrednio w konsoli zarządzania AWS.

Aby utworzyć reguły zapory

  1. W konsoli zarządzania AWS w polu wyszukiwania na pasku nawigacji wpisz VPC, a następnie w wynikach wyszukiwania wybierz VPC.
  1. W lewym okienku nawigacji wybierz Grupy Reguł zapory sieciowej. Wybierz grupę reguł zapory sieciowej
  1. Aby dodać regułę blokującą Ping przez odrzucenie całego ruchu ICMP, w sekcji Reguły wybierz Edytuj reguły.
  2. Wybierz Dodaj regułę i wprowadź następujące wartości, tak jak pokazano na rysunku nr 8:
    • W polu Priority wpisz 5
    • W polu Protokół wybierz ICMP i wyczyść pole wyboru „wszystkie
    • W polu Źródło i miejsce docelowe wybierz Dowolny adres IPv4
    • W polu Akcja wybierz Drop
    • Wybierz Dodaj, a następnie Zapisz

Praktyczny_przewodnik_po_silniku_elastycznych_regul_AWS_Network_

  1. W lewym okienku nawigacji wybierz Grupy reguł Zapory Sieciowej. Wybierz grupę reguł zapory StatefulRuleGroup.
  2. Następnie dodasz trzy przykładowe reguły IPS zgodne z Suricata:
  • jedna, aby umożliwić przychodzący dostęp HTTP do serwera WWW opartego na EC2
  • jedna, aby umożliwić na wychodzący dostęp HTTPS do aws.amazon.com
  • jedna, aby odrzucić cały inny ruch TCP

Te konkretne reguły działają poprzez dopasowywanie określonych słów kluczowych w ładunku pakietu. Wybierz edytuj reguły. Zastąp wartość pola tekstowego następującym:

pass http any any -> any any (http.host; dotprefix; content:".amazonaws.com"; endswith; msg:"Permit HTTP access to the web server"; sid:1000001; rev:1;)

pass tls any any -> any any (tls.sni; content:"aws.amazon.com"; startswith; nocase; endswith; msg:"Permit HTTPS access to aws.amazon.com"; sid:1000002; rev:1;)

drop tcp any any -> any any (flow:established,to_server; msg:"Deny all other TCP traffic"; sid: 1000003; rev:1;)

  1.   Wybierz Zapisz grupę reguł

Zweryfikuj skuteczność reguł zapory

Aby sprawdzić, czy zapora ogranicza ruch na podstawie utworzonych reguł, wykonaj następujące kroki.

Weryfikacja skuteczności reguł zapory

  1. Potwierdź, że wciąż jesteś w stanie przeglądać stronę Hello World serwera WWW (przechodząc do adresu WebServerURL stosu zapory).
  2. W wierszu poleceń Twojego urządzenia wyślij żądania echa ICMP do serwera WWW, wprowadzając ping publicznej nazwy DNS serwera. Ze względu na to, że zapora filtruje ICMP, zauważ, że żądania wygasają, tak jak przedstawiono na rysunku nr 9.

Praktyczny_przewodnik_po_silniku_elastycznych_regul_AWS_Network_

  1. Połącz się z konsolą serwera WWW za pomocą Managera Sesji. W celu zweryfikowania, czy serwer sieciowy nadal może pobierać treści internetowe z aws.amazon.com, wprowadź curl https://aws.amazon.com.
  2. Spróbuj również pobrać zawartość z innych witryn internetowych. Na przykład wprowadź curl https://www.amazon.com. Zauważysz wtedy, że żądanie wygasło.

Wyświetl dzienniki alertów zapory

Kiedy uruchomiłeś szablon AWS CloudFormation podczas początkowych kroków wdrażania, zapora została wstępnie skonfigurowana, aby wysyłać dzienniki alertów do Amazon CloudWatch Logs. Możesz zobaczyć filtrowanie wykonane przez stanowe grupy reguł. Zaporę sieciową AWS można również skonfigurować do korzystania z innych docelowych miejsc rejestrowania, takich jak Amazon Simple Storage Service (Amazon S3) i Amazon Kinesis Data Firehose.

Aby wyświetlić dzienniki alertów zapory

  1. W polu wyszukiwania na pasku nawigacji wprowadź CloudWatch, następnie w wynikach wyszukiwania wybierz CloudWatch.
  2. Z lewego paska nawigacyjnego wybierz Insights, aby interaktywnie przeszukiwać i analizować swoje dane dziennika.
  3. Z rozwijanej listy Wybierz grupy dzienników zaznacz pole wyboru dla grupy dziennika, która zaczyna się od MyFirewallStack-AWSNetworkFirewallLogGroup, tak jak przedstawiono na rysunku nr 10. Wybierz opcję Uruchom zapytanie.

Praktyczny_przewodnik_po_silniku_elastycznych_regul_AWS_Network_

 

  1. Przewiń w dół, aby zobaczyć listę rekordów i wybierz jeden z nich, aby zobaczyć jego zawartość. Ze względu na to, że zapora ogniowa wysyła swoje dzienniki do CloudWatch z niewielkim opóźnieniem, jeśli nie widzisz listy rekordów, odczekaj kilka minut i ponownie uruchom zapytanie. Zobaczysz informacje o akcji alertu, skojarzonym podpisie i TLS SNI, tak jak pokazano na rysunku nr 11.

Praktyczny_przewodnik_po_silniku_elastycznych_regul_AWS_Network_

Na tym etapie kończy się przegląd. Możesz jednak nadal eksperymentować z silnikiem reguł AWS Network Firewall i równocześnie badać jego możliwości rejestrowania.

Sprzątanie

Zakończ zasoby, które zostały wdrożone w tym przeglądzie, aby uniknąć niepotrzebnych kosztów.

Aby usunąć swoje stosy w wersji demo

  1. Jeśli jakąkolwiek z dodatkowych grup reguł zapory utworzyłeś w sposób manualny i dodałeś do zasad zapory, usuń je z zasad zapory.
  2. Przejdź do usługi CloudFormation i wybierz stos, który utworzyłeś wcześniej, jak MyFirewallStack.
  3. Wybierz Usuń, a następnie Usuń Stos.
  4. Stan stosu to wstępnie DELETE_IN_PROGRESS. Okresowo wybieraj przycisk Odśwież, aby odświeżyć jego stan. Po zakończeniu stan zmienia się na DELETE_COMPLETE, a nazwa stosu nie pojawia się już na liście aktywnych stosów.

Wnioski

Podążając za wskazówkami zawartymi w tym artykule, wdrożyłeś przykładową AWS Network Firewall na swoim koncie AWS i eksperymentowałeś z silnikiem reguł. Obejmowało to interakcję z elastycznym silnikiem reguł zapory ogniowej, aby porzucić ruch ICMP i ograniczyć dostęp do określonych treści internetowych. AWS Network Firewall zapewnia precyzyjną kontrolę, która może obsługiwać wiele różnych przypadków użycia, takich jak blokowanie wychodzących żądań Server Message Bock (SMB), aby zapobiec rozprzestrzenianiu się złośliwej aktywności.

Jeśli chcesz dowiedzieć się więcej na temat zarządzania tymi regułami na różnych kontach, zapoznaj się z następującym artykułem: Enforce your AWS Network Firewall protections at scale with AWS Firewall Manager.

Jeśli posiadasz uwagi do tego artykułu, pozostaw je w sekcji Komentarze znajdującej się poniżej. Jeśli posiadasz pytania na temat tego artykułu, rozpocznij wątek na forum AWS Network Firewall lub skontaktuj się z pomocą techniczną AWS.