Защита Http-Трафика С Помощью Citrix Netscaler

Сегодня любая средняя и крупная организация в своей работе опирается на ряд инфраструктурных ИТ-продуктов и набор бизнес-приложений.

Безупречная работа инфраструктуры и бизнес-приложений — принципиально важное условие успешного функционирования организации.

Соответственно, основной задачей ИТ-службы является обеспечение бесперебойного, безопасного и продуктивного доступа в режиме реального времени к данной корпоративной платформе.

Решение при этом должно отвечать ряду высоких требований: обеспечивать непрерывность бизнес-процессов компании, соответствовать строгим стандартам безопасности, поддерживать высокую производительность ИТ-инфраструктуры и быть легко масштабируемым для обеспечения необходимого расширения в масштабах компании.

будущее в соответствии с ростом организации.

За последние несколько лет эта самая корпоративная платформа превратилась из емких и тяжеловесных приложений, работающих исключительно на определенных типах и даже версиях операционных систем, в легкие, масштабируемые и кроссплатформенные веб-приложения.

Я говорю не только о крупных веб-проектах, форумах и других высокопосещаемых ресурсах.

Современный бизнес переносит CRM, ERP и другие подобные платформы SAP и 1С в сеть.

Причины, надеюсь, всем понятны.

Но остается один маленький краеугольный камень, который современный бизнес часто игнорирует, а он, в свою очередь, напоминает о себе тогда, когда в лучшем случае останавливается работа всего предприятия, в худшем – происходит утечка или утрата конфиденциальной информации.

Так в моем случае заказчик разбудил меня в час ночи с просьбой решить проблему, так как их платформа подверглась DDoS-атаке, парализовавшей работу как всего предприятия, так и работу клиентов.

Нет четких инструкций или описаний того, как работает Netscaler, что и послужило основной помощью при написании этой статьи.



Защита HTTP-трафика с помощью Citrix Netscaler



Как это все началось

Первое, что нам пришлось сделать с веб-платформой заказчика, — закрыть внешний сетевой интерфейс.

Чтобы как-то снизить нагрузку, нам пришлось зарегистрировать пул IP-адресов для доступа и тестирования извне.

Затем веб-сервер был настроен на ограничение количества одновременных сеансов и запросов.

Затем страны постепенно начали открываться через GeoIP. Затем нам пришлось перекомпилировать веб-сервер, чтобы добавить функционал по отражению атак.

После этого был настроен Failtoban и написаны десятки строк cron-скриптов.

Это заняло около 16-20 часов, но удручало то, что многие «патчи» конфликтовали друг с другом и были «разбросаны» по системе.

А атака, тем не менее, продолжалась: система продолжала отвечать ошибкой 503. Превентивных мер никто не предпринимал, и возможности немедленно отреагировать не было.

Это было сделано как временная мера, чтобы настроить всё с чувством и смыслом в одном месте — в Citrix Netscaler. Netscaler — это многофункциональная платформа, способная решить большинство сетевых проблем и узких мест. Это изделие можно сравнить с конструктором Лего, из различных частей которого можно собрать универсальный трансформер – он будет компактным и в то же время иметь все необходимые инструменты для работы с дорожным движением.

Netscaler можно использовать либо как виртуальное устройство VPX на всех современных гипервизорах, либо как физическое устройство.



Установка и настройка виртуальных машин

Прежде всего нам понадобится регистр на сайте citrix.com. Если ваша компания уже использует Citrix, вы можете загрузить продукт, используя существующую учетную запись.

Если нет, то выберите «Создать учетную запись клиента», заполните необходимые поля, выберите имя пользователя и пароль, и вы уже вошли в свою учетную запись, вам даже не нужно подтверждать свой адрес электронной почты.



Загрузите, установите и настройте Netscaler
1. Зайти в раздел Загрузки .

2. В раскрывающемся меню выберите NetScaler ADC, затем «Оценочные версии и пробное программное обеспечение» и нажмите кнопку «Найти».

3. Разверните раздел с выпуском, где есть Просмотреть все пробные версии NetScaler Customer. 4. Выберите «Попробовать БЕСПЛАТНО».

5. Заполните форму и нажмите «Продолжить», чтобы загрузить.

6. На странице загрузки будут доступны образы для разных гипервизоров: выберите тот, который вам подходит. 7. Установите Netscaler в наш гипервизор.

8. При первом запуске в консоли появится мастер настроек.

Нам необходимо предоставить некоторую информацию.

Netscaler не принимает DHCP и логически имеет один интерфейс, несмотря на то, что у него может быть несколько физических или виртуальных.

Необходимо указать локальный IP-адрес, доступный в зоне DMZ. Я взял 172.16.0.100

Защита HTTP-трафика с помощью Citrix Netscaler

9. Откройте страницу в браузере http://172.16.0.100 и войдите в систему, используя имя пользователя/пароль nsroot/nsroot 10. Нас попросят указать часовой пояс, DNS и еще какой-нибудь IP-адрес.

172.16.0.100 — это адрес самого Netscaler. IP подсети — адрес, который будет использоваться для работы с другими серверами и сервисами.

То есть летает отдельно - котлеты тоже: управляющий IP один, для работы с сервисами - другой.

Внезапно у вас есть две зоны DMZ, или сети VLAN, или сети с разными масками.

Так как в моем случае сеть только одна, я указал 172.16.0.101. 11. После пары кликов Далее вы попадете на вкладку Конфигурация.



Защита HTTP-трафика с помощью Citrix Netscaler



Регистрация и лицензирование
1. Теперь вам нужно скачать файл лицензии.

Перейдите на страницу «Моя учетная запись», выберите «Активировать и распределить лицензии», нажмите «Не видите свой продуктЭ».

ссылка в углу.

и введите лицензионный код, который мы получили по электронной почте.

Дважды нажмите «Продолжить», и теперь мы видим наш продукт в списке.

С этого момента начался отсчет срока действия лицензии.

2. Скопируйте Host Id (это MAC-адрес нашего Netscaler) со страницы конфигурации веб-интерфейса Netscaler в буфер и вернитесь на сайт, где нужно скачать лицензию.

3. Вставьте MAC-адрес в поле Host ID, нажмите «Продолжить», затем «Подтвердить», затем «ОК» и начнется загрузка файла с расширением LIC. 4. Готово, это наша лицензия сроком на 90 дней.

5. Обновляем страницу интерфейса Netscaler (далее NS), авторизуемся, нас снова попросят указать лицензию.

Выбираем файл, скачиваем его, и после успешной загрузки вам потребуется перезагрузить систему, о чем вам сообщит окно.

6. После перезагрузки во вкладке лицензирования появится список того, что нам доступно на 90 дней.



Защита HTTP-трафика с помощью Citrix Netscaler



Настройка серверов, сервисов, политик, политик и правил

1. Сразу надо уточнить, что предыдущая версия всегда доступна для бесплатного ознакомления.

К сожалению, для полного управления и настройки через графический интерфейс требуется Java версии 7/45 x86. В новой версии NS вы сможете работать с последней версией любой JRE. Если вы не хотите переходить на более раннюю версию, вы можете использовать командную строку.

Все необходимые команды будут в конце раздела.

Для этого вам необходимо открыть терминальную SSH-сессию на IP нашего NS с логином/паролем nsroot/nsroot. 2. Начнем с того, что у вас есть сайт, который необходимо защитить.

Он имеет собственное доменное имя и ему присвоен IP-адрес.

Его родной IP-адрес останется, но нам нужно прописать виртуальный сервер в NS. Для этого вам понадобится бесплатный IP-адрес, который будет называться VIP, и через него пользователи будут получать доступ к вашему настоящему веб-серверу.

Если веб-сервис внешний, то IP внешний, если внутренний — соответственно.

Возьмем, к примеру, 172.16.0.102. 3. Перейдите в «Управление трафиком», затем в «Виртуальные серверы» и нажмите кнопку «Добавить».

Придумываем имя, выбираем протокол HTTP, указываем ВИП (виртуальный IP) и порт, на котором будет работать этот виртуальный сервер, нажимаем Создать и затем Закрыть.



Защита HTTP-трафика с помощью Citrix Netscaler

4. Заходим в Серверы, нажимаем Добавить и указываем данные нашего веб-сервера.

По сути, нам нужно указать имя и указать IP-адрес или имя.

Порт не нужен, так как на сервере и на разных портах могут быть другие сервисы.



Защита HTTP-трафика с помощью Citrix Netscaler

5. Теперь нам нужно связать наш виртуальный сервер с реальным в виде определенного сервиса.

Заходим в Сервисы, снова нажимаем Добавить, даем имя, выбираем протокол, сервис и порт, по которому наш сервер принимает соединения.



Защита HTTP-трафика с помощью Citrix Netscaler

6. Остаётся только добавить созданный сервис на наш виртуальный сервер.

Перейдите в раздел «Виртуальные серверы», нажмите «Открыть», проверьте столбец «Активный» и подтвердите «ОК».

После этого ваш виртуальный сервер начнет работать.



Защита HTTP-трафика с помощью Citrix Netscaler

7. После всех изменений необходимо нажать на значок дискеты, чтобы сохранить текущую конфигурацию.

8. Откройте страницу в браузере http://172.16.0.102 и вуаля, наш сайт открывается.

Не совсем понятно, как это работает с первого раза, поэтому давайте посмотрим, что мы сделали: а) создал виртуальный сервер, который будет работать на виртуальном IP-адресе по протоколу HTTP через порт 80. б) добавлены данные о нашем реальном сервере в) указал, что наш сервер имеет HTTP-сервис на порту 80 г) предложил нашему виртуальному серверу обрабатывать данные для конкретного сервиса д) сохранил конфигурацию.

9. Через командную строку

  
  
  
   

add lb vserver CRM-virtual-server HTTP 172.16.0.102 80 add server CRM-server 172.16.0.10 add service CRM-service CRM-server HTTP 80 bind lb vserver CRM-virtual-server CRM-service save config



Сжатие и сжатие трафика
Наш виртуальный сервер работает. Если реальный сервер выдает HTML-контент с условными ссылками, то вы даже сможете серфить, в противном случае вам придется менять все полные ссылки на условные или менять DNS-сервер, если ссылки указывают на доменное имя.

Допустим, у вас есть сайт, на котором написаны полные ссылки, например ссылка , то вам нужно изменить его на связь .

Если нет возможности быстро изменить его, то в DNS переназначаете А-запись на www, а головной домен на IP-адрес вашего виртуального сервера, то есть на 172.16.0.102. Первое, что мы можем организовать — это GZIP-сжатие.

В этом случае сжатие на реальном сервере можно отключить.

Нет, NS не будет распаковывать и перепаковывать трафик, но чтобы разделить ресурсы процессора, пусть веб-сервер делает то, что должен делать - производит готовый контент, NS берет его с сервера как есть и отдает до конца Пользователь уже сжат в соответствии с теми правилами, которые мы ему указываем.

1. В меню Система > Настройки > Настройка основных функций установите флажок Сжатие HTTP. 2. В веб-интерфейсе переходим в Управление трафиком > Балансировка нагрузки > Службы, выбираем сервис, нажимаем Открыть, переходим на вкладку Дополнительно и ставим галочку, что хотим сжимать трафик.

Вы также можете указать другие параметры, например максимальное количество клиентов и запросов.



Защита HTTP-трафика с помощью Citrix Netscaler

3. С этого момента наш трафик сжимается по стандартным настройкам NS. Но не все сжимается.

Допустим, некоторые веб-серверы в своих настройках MIME указывают application/x-javascript для расширения js вместо text/javascript, поэтому сжатия не происходит. Мы можем исправить эту ситуацию, добавив собственную политику.

Перейдите в меню «Оптимизация» > «Сжатие HTTP» > «Политики», нажмите «Добавить», нажмите «Переключиться на классический синтаксис» и добавьте новое правило.



Защита HTTP-трафика с помощью Citrix Netscaler

4. Правило создано, но оно не активно и пока не работает. Щелкаем правой кнопкой мыши по правилу, выбираем Policy Manager, выбираем вкладку Response, затем Default Global, нажимаем Insert Policy и выбираем наше правило, установив высший приоритет. 5. Такие правила также можно задать для pdf, json и других типов.

Вы также можете указать минимальный размер для сжатия, из каких подсетей, для каких браузеров и т. д. и т. п.

Правила можно сделать не глобальными, а для конкретного сервиса.

6. Через командную строку:

enable ns feature cmp set service CRM-service -CMP yes add cmp policy ns_cmp_javascript -rule "RES.HTTP.HEADER Content-Type CONTAINS javascript" -resAction COMPRESS add cmp policy ns_cmp_json -rule "RES.HTTP.HEADER Content-Type CONTAINS json" -resAction COMPRESS add cmp policy ns_cmp_pdf -rule "RES.HTTP.HEADER Content-Type CONTAINS application/pdf" -resAction COMPRESS bind cmp global ns_cmp_javascript -priority 10001 -state ENABLED bind cmp global ns_cmp_json -priority 10002 -state ENABLED bind cmp global ns_cmp_pdf -priority 10003 -state ENABLED save config



Защита данных
"Ну и что?" ты говоришь.

И вы будете правы.

Стандартный веб-сервер может делать все, что описано выше.

Что касается защиты данных от взлома, то стандартный сервер обучить невозможно.

Нам всегда приходится полагаться на корректность исходного кода, который в большинстве случаев мы писали не сами.

И никто никогда не может гарантировать, что в исполняемом коде нет ошибок или недостатков.

В свое время, разрабатывая большой интернет-проект в небольшой команде, я всерьез озаботился защитой от SQL-инъекций и написал API для доступа к базе данных.

Я относился к проекту спокойно, пока не начал проверять, чем занимаются программисты из моей команды.

Вместо передачи значений по ссылке они по привычке «собирали» SQL-запрос, конкатенируя запрос со строковыми и числовыми переменными, не заботясь не только об экранировании, но даже и о банальной проверке переменных на валидность их значений.

Что уж говорить о сайтах некоторых онлайн-банков, где я за 10-15 минут обнаружил несколько уязвимостей SQL. А кроме этого есть еще межсайтовый скриптинг, подделка cookie, генерация вредоносных запросов JSON и XML и т.д. К нашей радости, Netscaler довольно успешно с этим борется.

1. В меню Система > Настройки > Настройка основных функций установите флажок Брандмауэр приложений.

2. В меню Безопасность > Брандмауэр приложений запустите Мастер Брандмауэра приложений.

3. Выбираем название нашей конфигурации и тип Web 2.0. 4. В поле «Указать правило» оставьте все как есть и нажмите «Далее».

5. В следующем диалоге отмечаем, на чем работает наш веб-сервер.

6. В действии «Выбрать подпись» оставляем все как есть.

7. В разделе «Выбор глубокой защиты» отметьте первые 4 параметра.

Стоит отметить, что межсайтовый скриптинг HTML по умолчанию запрещает передачу любых HTML-тегов в запросах GET и POST. Это не страшно, так как для любого правила можно задать фильтры и условия.

8. В разделе «Выбрать глубокие действия» вам необходимо установить флажки для опций, которые вы хотите заблокировать.

На начальном этапе рекомендуется не блокировать, а пройтись по сайту, инсценировать все возможное поведение пользователей и, как только статистика будет собрана, решить, что блокировать и где создавать дополнительные правила.

Все, кроме межсайтового скриптинга, может быть немедленно заблокировано.

9. После создания правила необходимо открыть его и произвести дополнительные настройки.

а) установить кодировку б) создать страницу, на которую будет перенаправлен пользователь в случае попытки взлома.

Обычно это главная страница, но можно создать отдельную с информацией о том, что ваши действия показались подозрительными и она будет отправлена администрации, а при необходимости и в компетентные органы.

в) множество других тонких настроек, описание которых можно найти в документации.

10. Теперь заходим на наш сайт, открываем страницы с фиктивной SQL-инъекцией.

http://172.16.0.102/ЭSearch=00&q=CB506-67902' UNION SELECT aaa FROM aaa и смотрим, как нас перебрасывают на главную страницу.

11. Установите в браузер плагин, позволяющий редактировать куки, исправлять парочку и обновлять страницу.

Файлы cookie на вашей стороне не изменяются, но не передаются на веб-сервер.

NS кэширует все файлы cookie, которые исходный сервер передал на хранение.

Если в следующем запросе REQ NS обнаружит несоответствие между ранее установленными файлами cookie, он просто заблокирует их.

12. Если вы установили флажок Блокировать в разделе «Межсайтовый скриптинг», то попробуйте отправить HTML с помощью запроса GET или POST и вы также будете перенаправлены на главную страницу.

13. Разве это не здорово? Если вы покопаетесь в настройках, то найдете для себя много интересного и полезного.

Файлы cookie могут быть закодированы для большей безопасности, которые пользователь не может просто подделать, поскольку NS декодирует их своим собственным ключом, прежде чем передать их на веб-сервер.

Вы можете указать формат данных в виде регулярных выражений для проверки или экранирования типов или имен полей.

Вы можете сделать исключения для определенных страниц или полей для проверки HTML или SQL. При правильно настроенной НС безопасность вашего сайта возрастет в сотни раз.

14. Через командную строку

enable ns feature AppFW add appfw profile crm-appfw-profile -type HTML XML set appfw profile crm-appfw-profile -cookieConsistencyAction block log stats learn set appfw profile crm-appfw-profile -bufferOverflowAction block log stats set appfw profile crm-appfw-profile -crossSiteScriptingAction log stats learn set appfw profile crm-appfw-profile -SQLInjectionAction block log stats learn set appfw profile crm-appfw-profile -startURLAction log stats learn set appfw profile crm-appfw-profile -defaultCharSet utf-8 add appfw policy crm-appfw-policy true crm-appfw-profile bind appfw global crm-appfw-policy 10 save config



Отражение DDoD-атак
Наконец мы подошли к тому, о чем все это шло.

Не вдаваясь в подробности о том, как работает защита, можно прочитать статью Модуль Nginx для борьбы с DDoS .

Принцип тот же, но запустить этот модуль как надо в реальной ситуации мне не удалось.

1. Перейдите в меню «Безопасность» > «Функции защиты» > «HTTP DoS» и, как обычно, нажмите «Добавить».

2. Помимо имени есть два поля, куда нужно вставить значения.

Давайте разберемся, как их посчитать.

Первое поле, Глубина очереди, представляет собой количественное значение пользователей, ожидающих ответа сервера.

Допустим, у вас 86400 уникальных пользователей в день или 3500 в час, или 60 в минуту, или 1 в секунду.

Конечно, ночью их нет; их много в течение дня.

Умножаем на 10 раз для большей значимости и получаем 10 пользователей в секунду.

В общем, можно посмотреть статистику.

Допустим, один пользователь запрашивает в среднем 5-10 запросов на страницу (html, css, js, img и т.д.) и просматривает их 5-10 секунд (поэтому и рулит AJAX).

То есть сервер примерно во время пиковой нагрузки обрабатывает до 100 ответов в секунду.

Давайте представим, что ваш веб-сервер способен отправлять максимум 500 ответов в секунду, но принимает 10 000 запросов в секунду, или в 20 раз больше.

Сколько реальных пользователей в настоящее время сталкиваются с этой проблемой? Правильно, те же 10, остальные - атака.

Когда следует начинать паниковать? Сразу после 10? Нам бы хотелось, но минимальное значение — 21, поэтому оставим как есть.

То есть, как только в очереди на получение данных окажется 21 и более сеансов, включится автоматическая защита от атаки.

Теперь со вторым полем Скорость обнаружения клиента.

Это процент пользователей, которых проверят на вши.

Если поставить 1% на верификацию, при автоматическом включении безопасности, то количество ответов от сервера будет всего 5 (500*0,01), а в очереди будет стоять 10 000. Другими словами, верифицировано будет только 0,05% реальных пользователей.

Однако если уровень проверки высокий (например, при значении 10% будет проверяться 1000 запросов), то это может засорить проверками весь исходящий трафик, который и так перегружен атакой, если у вас узкий канал.

Но я бы поставил 30-35%, чтобы сразу начать отбивать атаку, так как канал очень толстый.

Поле можно оставить пустым и в зависимости от ширины канала, который может измерить NS, количества запросов, ответов и других показателей, может варьироваться уровень проверки.

3. Далее переходим в меню «Управление трафиком» > «Балансировка нагрузки» > «Службы», открываем наш сервис с помощью кнопки «Открыть» и вставляем вновь созданную политику во вкладку «Policies/HTTP DoS».



Защита HTTP-трафика с помощью Citrix Netscaler

4. Через командную строку

enable ns feature HttpDoSProtection add dos policy crm-ddos-policy -qDepth 21 -cltDetectRate 33 bind service CRM-service -policyName crm-ddos-policy save config



Что еще может сделать Netscaler?

Эта штука может многое.

Что может понадобиться для веб-сайтов: 1. Разделение статического и динамического контента для разгрузки.

2. Проксирование статического контента.

3. Кэширование динамического контента и сброс кеша при определенных условиях или времени.

4. Проксирование и кэширование MySQL и других реляционных баз данных для уменьшения количества выборок.

5. Разделение трафика и контента по сетевым адресам, геолокации и многим другим параметрам.

6. Шифрование трафика.

7. Работа DNS-сервером.

8. По умолчанию в NS уже есть защита сети, например от ICMP-флуда и т.п.



Заключение

Настраивается все довольно легко, хотя и не всегда интуитивно.

инструкции доступен на сайте продавец.

Об основных возможностях на русском языке можно прочитать на сайте.

http://netscaler.kz .

Отсутствие информации на русском языке об этой платформе сильно влияет на ее распространенность в странах СНГ.

Видимо поэтому наши современные сетевые администраторы недооценили возможности этого продукта.

Не зря два года назад Cisco официально заявила, что прекращает дальнейшее развитие своего балансировщика ACE, а недавно Netscaler вошел в состав некоторой серии коммутаторов Cisco. Спасибо! Теги: #Citrix #netscaler #security #protection #ddos #sql-injection #http #межсайтовый скриптинг #информационная безопасность

Вместе с данным постом часто просматривают: