ASA, как устройство для обеспечения безопасности, по умолчанию может выполнять некоторые хитрые манипуляции с TCP, которые могут оказаться вредными для нашей сети.
Мы рассмотрим некоторые подобные случаи и методы их обхода.
Рассмотрим следующую схему.
На двух роутерах поднят BGP. Проблема возникнет если BGP использует Authentication.
На ASA функционирует модуль, который называется Normalizer - он анализирует проходящий трафик и может менять TCP пакеты и их заголовки по своему усмотрению.
Дело в том, что BGP для Аутентификации использует Option 19, а Normalizer её удаляет.
Также мы отключим ISN Randomizing.
Для выполнения данной задачи мы также будем использовать политики + TCP Map.
TCP Map - собственно задаёт поведение ASA при обработке пакетов TCP.
tcp-map OPTION-19 tcp-options range 19 19 allow class-map BGP match port tcp eq bgp policy-map global_policy class BGP set connection advanced-options OPTION-19 set connection conn-max 0 embryonic-conn-max 0 per-client-max 0 per-client-embryonic-conn-max 0 random-sequence-null
Рассмотрим как происходит инициализация соединения TCP:
Проблема может возникнуть, если по каким либо причинам запросы и ответы идут разными путями (asymmetric routing), и ASA видит только часть этого "разговора". В этом случае ASA (а точнее Normalizer) не будет пропускать такое соединение, посчитав его "неправильным".
Для решения данной ситуации мы будем использовать TCP State Bypass.
tcp-map all-traffic match any policy-map global_policy class all-traffic set connection advanced-options tcp-state-bypass
Syn-Flood Attack - это атака при которой инициатор в пакете SYN ставит подложный Source IP address либо игнорирует ответы от сервера Syn + Ack. При открытии тысяч таких половинчатых сессий тратятся ресурсы сервера, который вынужден запоминать параметры каждой и в итоге может отказать.
Для решения данной проблемы ASA использует TCP SYN Cookies: ASA защищает сервер и не транслирует на него все соединения. Вместо того чтобы запоминать все эти половинчатые сессии, ASA тупо отвечает на каждую из них, но фактическое соединение с сервером осуществляет только при получении 3-го ответа Ack.
access-list outside_mpc line 1 extended permit tcp any object dmz-server real class-map no-syn-flood-class match access-list outside_mpc policy-map NO-SYN-FLOOD class no-syn-flood-class set connection conn-max 0 embryonic-conn-max 5 per-client-max 0 per-client-embryonic-conn-max 0 random-sequence-number enable service-policy NO-SYN-FLOOD interface outside
Здесь embryonic-conn-max 5 означает, что максимум будет разрешени до 5 половинчатых соединений.
Добавить комментарий