Jak zabezpieczyć samodzielnie zarządzaną usługę DNS przed atakami DDoS za pomocą AWS Global Accelerator i AWS Shield Advanced?
Z tego artykułu można dowiedzieć się jak poprawić odporność usługi DNS na ataki DDoS (Distributed Denial of Service) poprzez zastosowanie AWS Global Accelerator oraz AWS Shield Advanced. Można skorzystać z tych usług, aby wykorzystać niektóre z technik stosowanych przez Amazon Route 53 do ochrony przed atakami DDoS.
DNS kieruje użytkowników do aplikacji poprzez szybkie przetłumaczenie nazwy domeny czytelnej dla człowieka na adres IP czytelny dla maszyny. Chroniąc dostępność aplikacji przed atakami DDoS, ważne jest, aby wziąć pod uwagę każdą część systemu, w tym DNS. Zalecaną najlepszą praktyką jest tworzenie stref hostowanych w Route 53 - skalowalnej, wysoko dostępnej usłudze DNS, która jest chroniona przed dużymi atakami typu „flood” czy DDoS. Usługa Route 53 wykorzystuje routing typu anycast do obsługi zapytań DNS z ponad 150 lokalizacji brzegowych na całym świecie. Dzięki temu, zapytania DNS są obsługiwane z lokalizacji znajdujących się bliżej użytkowników, a globalnie rozproszone możliwości mitygacji ataków DDoS od Amazon Web Services (AWS) zmniejszają ich wpływ.
Opcjonalnie, można również zbudować własną usługę DNS na Amazon Elastic Compute Cloud (Amazon EC2). Na przykład, uruchamiając własny serwer DNS, aby skorzystać z niestandardowych funkcji, które zostały użyte do integracji z istniejącą usługą DNS, która nie jest uruchomiona na AWS. Podczas rejestracji nazwy domeny, zazwyczaj należy dostarczyć co najmniej dwa serwery nazw, które mogą odpowiadać na zapytania od użytkowników. Możliwe jest zbudowanie usługi DNS tylko na dwóch instancjach, ale zapewnia to ograniczoną odporność DDoS.
Podgląd rozwiązania
Aby chronić usługę DNS za pomocą tego rozwiązania, trzeba dobrze znać podstawy protokołu DNS oraz wiedzieć jak obsługiwać rozproszoną, samodzielnie zarządzaną usługę DNS na Amazon EC2. Rozwiązanie to ulepsza istniejącą usługę DNS poprzez znaczne zwiększenie jej odporności na ataki DDoS. Istnieją dwa komponenty, które należy dodać do swojej infrastruktury:
- Global Accelerator, aby dostarczyć swojej aplikacji dwa statyczne adresy IP, które działają jako stały punkt wejścia do instancji Amazon EC2 w wielu regionach AWS. Global Accelerator wykorzystuje routing typu anycast do kierowania ruchu do punktu wejścia w pobliżu źródła ruchu. Oprócz korzyści związanych z dostępnością i wydajnością, daje to dostęp do globalnej zdolności mitygacji skutków DDoS poprzez AWS.
- Shield Advanced do monitorowania dostępności swojej aplikacji i automatycznego zaangażowania AWS Shield Response Team (SRT), jeśli na jej dostępność wpływa atak DDoS. Po przypisaniu „healthchecków” Route 53 do zasobów, Shield Advanced wykorzystuje „zdrowie” aplikacji jako dane wejściowe do wykrywania i jako sygnał do SRT, aby w razie potrzeby skontaktować się z centrum operacyjnym. Można również współpracować z SRT w celu napisania własnych procedur mitygacyjnych dla swojej aplikacji. W przypadku korzystania z self-managed DNS, może to obejmować metody, takie jak walidacja pakietów DNS i ocena podejrzeń, które dają wyższy priorytet zapytań, co do których istnieje większe prawdopodobieństwo, że będą stanowić prawidłowy ruch dla aplikacji.
W ramach tego przykładu, zostanie utworzone rozwiązanie DNS, które wykorzystuje usługę Amazon CloudWatch do aktualizacji stanu healthckecka Route 53, jeśli usługa DNS przestanie odpowiadać na zapytania.
Przykładowa architektura wykorzystująca DNS oparty o instancje Amazon EC2, stojące za Global Accelerator’em i Shield’em jest pokazana na rysunku 1.
Tworzenie i konfigurowanie akceleratora
Aby rozpocząć, należy utworzyć akcelerator i dodać istniejące serwery DNS jako punkty końcowe. Nowo utworzony akcelerator będzie otrzymywał zapytania i przekazywał je do Twojej usługi DNS.
Tworzenie i skonfigurowanie akceleratora
Krok 1: Utworzenie akceleratora
- Należy przejść do AWS Global Accelerator dashboard.
- Wybrać opcję Create accelerator.
- Wprowadzić nazwę dla akceleratora.
- Kliknąć Next.
Step 2: Dodanie listenerów
Ponieważ DNS używa zarówno protokołu TCP jak i UDP, należy stworzyć osobne listenery do obsługi żądań dla każdego protokołu.
W kroku Add Listeners, należy wpisać następująco:
- Ports: 53
- Protocol: TCP
- Client affinity:None
Należy ponownie kliknąć w Add listener, aby dodać listener UDP. Następnie należy wprowadzić:
- Ports: 53
- Protocol: UDP
- Client affinity:None
- Wybrać Next
Aby dowiedzieć się więcej o różnych opcjach dostępnych w tym kroku, warto zobaczyć To create a listener w sekcji Getting started with AWS Global Accelerator.
Step 3: Dodanie grup punktów końcowych
Zaczynając od listenera TCP, należy wprowadzić następujące ustawienia:
- Region: Wybierz Region, w którym znajdują się instancje DNS, na przykład, us-east-1.
- Traffic dial: 100
- Jeśli aplikacja posiada dodatkowe instancje DNS w innym Regionie AWS, należy wybrać
Add endpoint group i powtórzyć kroki a) oraz b), wprowadzając odpowiedni Region. - Należy powtórzyć kroki od a) do c), aby dodać grupy punktów końcowych dla listenera UDP, a następnie o kliknąć w Next.
Aby dowiedzieć się więcej o różnych opcjach dostępnych w tym kroku, na przykład o Traffic dial, warto zobaczyć Add endpoint groups w sekcji Getting started with AWS Global Accelerator.
Krok 4: Dodaj punkty końcowe
Zaczynając od listenera TCP, w polach formularza dla każdego Regionu określonego w poprzednim kroku należy wpisać następujące dane:
- Endpoint type: należy wybrać EC2 instance z rozwijanej listy.
- Endpoint: Należy wybrać DNS instance z rozwijanej listy.
- Weight: 128
Jeśli aplikacja posiada dodatkowe instancje DNS w regionie, należy wybrać Add endpoint i powtórzyć poprzednie kroki, ale pamiętając, aby wybrać instancję DNS, która nie została dodana jako punkt końcowy.
Powtórzyć wszystkie poprzednie kroki dla listenera UDP, a następnie należy wybrać opcję Create accelerator.
Aby dowiedzieć się więcej o różnych opcjach dostępnych w tym kroku, warto zobaczyć Add endpoints w części Getting started with AWS Global Accelerator.
Krok 5: Weryfikacja
Po kliknięciu w przycisk Create accelerator, zostanie otworzona konsola Global Accelerator, która wyświetli listę wszystkich akceleratorów na koncie. Na tej stronie, oprócz aktualnego statusu, można zobaczyć globalne IP i nazwę DNS przypisaną do nowo utworzonego akceleratora.
Należy poczekać, aż status akceleratorów zmieni się na Deployed przed przystąpieniem do jakichkolwiek testów.
Konfiguracja usług Shield Advanced i Shield Advanced
Po uruchomieniu usługi Shield Advanced, zespół SRT (Shield Response Team) nawiąże bezpośredni kontakt w przypadku, gdy healthcheck Amazon Route 53 związany z chronionym zasobem zmieni status na unhealthy podczas zdarzenia wykrytego przez Shield Advanced.
Konfiguracja proactive engagement
Krok 1: Utworzenie healthchecka Route 53
Jeśli infrastruktura posiada już healthcheck Route 53, który monitoruje dostępność usługi DNS, należy przejść do kroku 2 tej sekcji. Jeśli nie, można użyć szablonu AWS CloudFormation template, aby ją utworzyć. Szablon ten wykona:
- Utworzenie funkcji Lambda, która zapytuje serwer DNS poprzez globalne IP akceleratora. Funkcja ta umieszcza metryki w CloudWatch, aby wskazać, czy zapytanie zakończyło się sukcesem, czy też nie.
- Utworzenie alarmu CloudWatch, który wykryje czy zapytania DNS zakończyły się niepowodzeniem.
- Stworzenie healthchecka Route 53, który monitoruje alarm CloudWatch i zmienia stan na unhealthy, gdy alarm zmieni stan na Alarm.
Krok 2: Usługa Shield Advanced
Należy pamiętać, że koszt AWS Shield Advanced, wynosi 3000 dolarów miesięcznie za każdą organizację. Ponadto, opłata pobierana jest również za transfer dla zasobów AWS, dla których uruchomiono AWS Shield Advanced Data.
- Należy przejść do strony AWS Shield console.
- Na pasku nawigacji AWS Shield, należy wybrać Getting started, a następnie Subscribe to Shield Advanced.
- Na stronie Subscribe to Shield Advanced, należy zapoznać się z warunkami umowy, a następnie zaznaczyć wszystkie pola wyboru w ramach zaakceptowania tych warunków.
- Należy kliknać w Subscribe to Shield Advanced.
Krok 3: Dodanie zasobów do ochrony
- Należy wykonać jedną z poniższych czynności, w zależności od tego, czy aplikację zapisano już do Shield Advanced.
- Jeśli aplikacja została dopiero zapisana do programu Shield Advanced, wykonując krok 2 powyżej, należy wybrać opcję Add resources to protect.
- Jeśli aplikacja została wcześniej zapisana do programu Shield Advanced, należy otworzyć konsolę Shield i wybrać opcję Protected Resources, a następnie wybrać Add resources to protect.
- Na stronie Choose resources to protect with Shield Advanced, należy wybierać Regiony
i typy zasobów, które mają być chronione, a następnie wybrać Load resources. - Należy wybrać docelowe zasoby, a następnie kliknąć Protect with Shield Advanced.
- Na stronie Configure health check based DDoS detection, w sekcji Protected resources , należy dodać healthckeck Route 53 (ten, który stworzono wcześniej ręcznie, lub stworzony przez szablon AWS CloudFormation), jako Associated Health Check.
- Należy klikać Next, aż do strony z Review and configure DDoS mitigation and visibility, a następnie przejrzeć ustawienia i wybrać Finish configuration.
Krok 4: Dodawanie kontaktów
- Należy przejść do zakładki Overview w konsoli AWS Shield.
- W sekcji Proactive engagements and contacts, wybrać Edit pod nagłówkiem Contacts.
- W formularzu Add contact, należy dodać Email, Numer kontaktowy oraz Notatki.
- Następnie należy kliknąć Save.
Krok 5: Żądanie proactive engagement
- Należy wybrać Edit proactive engagement feature.
- Kliknąć Enable.
- Zapisać za pomocą Save.
Krok 6: Przegląd konfiguracji z zespołem SRT
Po włączeniu opcji proactive engagement, stan będzie ustawiony na Proactive engagement requested and pending.
Zespół SRT nawiąże kontakt, aby zaplanować przegląd konfiguracji. Będzie on obejmował przegląd konfiguracji Route 53 oraz konsultacje na temat niestandardowych środków zaradczych, które można skonfigurować w przypadku użycia DNS. Po zakończeniu procesu, SRT zamknie wniosek, jednocześnie uruchamiając usługę.
Podsumowanie
DNS jest fundamentalną częścią user experience dla każdej aplikacji, która jest dostępna za pośrednictwem czytelnej dla człowieka nazwy. Usługa DNS powinna być wysoce dostępna, odporna na ataki DDoS i dostępna dla użytkowników z minimalnym opóźnieniem. Jeśli uruchamiana jest własna usługa DNS na Amazon EC2, można poprawić jej odporność na ataki DDoS używając Global Accelerator i Shield Advanced. Te rozwiązania dostarczają użytkownikom ścieżkę o niskich opóźnieniach do usługi DNS i zapewniają odporność na zagrożenia typu DDoS, dzięki mechanizmom, które chronią Route 53. Aby dowiedzieć się więcej o dobrych praktykach DDoS, warto przeczytać artykuł AWS Best Practices for DDoS Resiliency.
Źródło: https://aws.amazon.com/blogs/aws/