Среди моих коллег в Edgenexus широко распространено мнение, что, хотя балансировщики нагрузки F5 LTM являются чрезвычайно мощными и гибкими, зависимость от использования сценариев iRules для выполнения некоторых базовых функций приводит к ненужной сложности.
Достаточно выполнить поиск в Интернете по запросу «F5 iRules», чтобы понять, через какую боль и муки приходится проходить многим ИТ-специалистам в процессе создания функциональных iRules. Хотя расширение функциональности ‘Local Traffic Policies’ в последних версиях программного обеспечения F5 и устранило некоторую необходимость в создании iRules для обычных функций манипулирования HTTP-заголовками, многие пользователи все еще остаются с устаревшими iRules в конфигурации своей системы.
Локальные политики трафика, похоже, не позволяют манипулировать данными HTML, хотя политики Stream позволяют, но они довольно громоздки и ими трудно управлять. По умолчанию они одинаково влияют на трафик в любом направлении, хотя обычно это нежелательно. Это означает возврат к iRules для выполнения таких функций, как замена ссылки http:// на https:// в тексте URL, которая может потребоваться в сочетании с перенаправлением http:// на https, которое может быть выполнено с помощью локальных политик трафика.
Введите Edgenexus flightPATH — управление движением стало проще
В компании Edgenexus мы по праву гордимся мощью и простотой настройки нашей функции HTTP-манипуляции flightPATH Layer 7.
Если Вы уже являетесь пользователем F5, использующим iRules для работы с HTTP или HTML, мы будем рады возможности продемонстрировать Вам балансировщик нагрузки Edgenexus ALB-X и показать Вам, насколько просто настраивается flightPATH для выполнения некоторых относительно сложных функций. Мы бы хотели, чтобы нас протестировали, чтобы помочь перевести Ваши существующие функции iRules в правила flightPATH.
В качестве примера ниже мы привели подборку правил F5 iRules с эквивалентными снимками экрана конфигурации правила Edgenexus flightPATH.
IP-адрес источника Рулевой сервер содержимого
Вот пример того, как можно использовать F5 iRules, чтобы направлять пользователей из определенного диапазона IP-адресов в один пул серверов, а пользователей из другого диапазона — в другой пул серверов.
F5:
Название: | IP_Choice |
Определение: | when HTTP_REQUEST { if { ( [IP::addr [IP::client_addr] equals 24.24.15.100] ) or ( [IP::addr [IP::client_addr] equals 10.1.1.2] ) } { pool pool2 } } |
Edgenexus:
нажмите здесь, чтобы увеличить
- Создайте новое правило flightPATH с именем IP_Choice_Pool_1 через веб-интерфейс. Добавьте краткое описание, чтобы можно было определить, какую функцию выполняет правило flightPATH.
- Добавьте новое условие, выбрав Source IP из обширного выпадающего списка. Выберите «Делает» из выпадающего списка «Смысл». Один из вариантов — выбрать Start из выпадающего списка Check (в качестве альтернативы Вы можете использовать другие опции, такие как RegEx, чтобы обеспечить большую гибкость для IP-адреса ‘Value’). Введите начальный диапазон IP-адресов в поле «Значение».
- Добавьте новое действие. В раскрывающемся окне Действие выберите опцию Использовать сервер (есть также опция Использовать безопасный сервер, если требуется). В поле Target (Цель) введите IP-адрес и порт требуемого места назначения. Обычно это другой интерфейс виртуальной службы, чтобы обеспечить балансировку нагрузки на другой пул реальных серверов.
Перенаправление с HTTP на HTTPS
Несмотря на то, что теперь у F5 есть альтернатива использованию iRules для выполнения перенаправления с HTTP на HTTPs, существует множество примеров, когда люди все еще используют iRules для этой функции. iRules также позволяет больше настраивать параметры перенаправления.
F5:
Название: | Перенаправление HTTP_HTTPs |
Определение: | когда HTTP_REQUEST { HTTP::redirect «https://[HTTP::host][HTTP::uri]» } |
Edgenexus:
нажмите здесь, чтобы увеличить
- Создайте новое правило flightPATH с именем Перенаправление HTTP на HTTPS через веб-интерфейс. Добавьте краткое описание, чтобы можно было определить, какую функцию выполняет правило flightPATH.
- Для большинства приложений требование о выполнении перенаправления с HTTP на HTTPS должно выполняться для всего трафика, попадающего на службу HTTP. В этом случае нет необходимости создавать правило условия. Существует большая гибкость в создании правил условий, если правило flightPATH должно влиять только на определенный трафик.
- Добавьте новое действие, выбрав Redirect 302 из выпадающего списка Action (также доступно Redirect 301). Edgenexus ALB-X автоматически создает переменные для определенных ключевых параметров трафика, обрабатываемого ALB-X, включая хост, путь и строку запроса. В поле Target введите данные о том, куда должен быть перенаправлен запрос. В данном случае предваряйте запись https:// и используйте переменные $host$$path$$querystring$ для вставки данных из оригинального http-запроса. Как Вы можете видеть, здесь есть гибкость, чтобы определить совершенно другое место назначения, если это необходимо.
Маскируйте номера кредитных карт
Вот пример сложности iRules и того, как F5 обрабатывает манипуляции с телом HTML.
F5:
Название: | Маскировка номера кредитной карты |
Определение: | когда HTTP_REQUEST { # Запретите серверу отправлять сжатый ответ # удалите предложения по сжатию из клиента HTTP::header удалите «Accept-Encoding». # Не допускайте измельчения данных ответа if { [HTTP::version] eq «1.1» } { # Принудительное понижение до HTTP 1.0, но при этом разрешение соединений keep-alive. # Поскольку HTTP 1.1 по умолчанию работает в режиме keep-alive, а 1.0 — нет, # нам нужно убедиться, что заголовки отражают статус keep-alive. # Проверьте, является ли это соединение «keep alive». if { [HTTP::header is_keepalive] } { # Замените значение заголовка соединения на «Keep-Alive». HTTP::header replace «Connection» «Keep-Alive» } # Установите версию запроса на стороне сервера на 1.0 # Это заставит сервер отвечать без разбивки на части HTTP::version «1.0» } } когда HTTP_RESPONSE { # Проверяйте только те ответы, которые имеют текстовый тип содержимого (text/html, text/xml, text/plain и т.д.). if { [HTTP::header «Content-Type»] starts_with «text/» } { # Получите длину содержимого, чтобы мы могли собрать данные (для обработки в событии HTTP_RESPONSE_DATA) # Ограничьте коллекцию до 1 Мб (1048576 минус немного на запас) — Подробности см. в разделе SOL6578 if { [HTTP::header exists «Content-Length»] } { if { [HTTP::header «Content-Length»] > 1048000 }{ # Content-Length более 1 Мб, поэтому собирайте 1 Мб. set content_length 1048000 } else { # Content-Length меньше 1 Мб, поэтому собирайте фактическую длину установить content_length [HTTP::header «Content-Length»] } } else { # В ответе не было заголовка Content-Length, поэтому используйте значение по умолчанию 1 Мб. set content_length 1048000 } # Не собирайте содержимое, если значение заголовка Content-Length равно 0 if { $content_length > 0 } { HTTP::collect $content_length } } } when HTTP_RESPONSE_DATA { # Найдите ВСЕ возможные номера кредитных карт за один проход set card_indices [regexp -all -inline -indices\ {(?:3[4|7]\d{2})(?:[ ,-]?(?:\d{5}(?:\d{1})?)){2}|(?:4\d{3})(?:[ ,-]?(?:\d{4})){3}|(?:5[1-5]\d{2})(?:[ ,-]?(?:\d{4})){3}|(?:6011)(?:[ ,-]?(?:\d{4})){3}}\ [HTTP::payload]] foreach card_idx $card_indices { set card_start [lindex $card_idx 0] установите card_end [lindex $card_idx 1] set card_len [expr {$card_end — $card_start + 1}] set card_number [диапазон строк [HTTP::payload] $card_start $card_end] # Удалите тире или пробел, если они есть, и подсчитайте их количество в переменных вырезания. Установите вырезы [regsub -all {[-]} $card_number «» card_number] # Адъюнкт переменной card_len, но сохраните ее для последующего использования. set new_card_len [expr {$card_len — $cutouts}] set double [expr {$new_card_len & 1}] установите chksum 0 установить isCard invalid # Вычислите MOD10 for { set i 0 } { $i < $new_card_len } { incr i } { набор c [string index $card_number $i] if {($i & 1) == $double} { if {[incr c $c] >= 10} {incr c -9} } incr chksum $c } # Определите тип карты switch [string index $card_number 0] { 3 { set type AmericanExpress } 4 { установить тип Visa } 5 { установить тип MasterCard } 6 { set type Discover } по умолчанию { установить тип Неизвестно } } # Если номер карты действителен, то замаскируйте цифры с помощью крестиков if { ($chksum % 10) == 0 } { установить isCard valid HTTP::payload replace $card_start $card_len [string repeat «X» $card_len] } # Результаты журнала log local0. «Found $isCard $type CC# $card_number» } } |
Edgenexus:
нажмите здесь, чтобы увеличить
- Создайте новое правило flightPATH и предоставьте содержательное описание
- Это еще один пример, когда сопоставление условий может не потребоваться, поскольку обычно Вы хотите защитить любые ответы сервера. Конечно, такая возможность существует, если она необходима.
- Добавьте новое «Действие» и выберите «Body Replace All» из выпадающего меню. Для подбора целевого текста, который будет заменен этим действием, используются регулярные выражения. Используйте \b(?:\d[ \t-]?){12}\b в качестве цели для обнаружения и замены первых 12 цифр номеров кредитных карт. В поле Данные введите xxxx-xxx-xxx в качестве текста для замены. При этом последние 4 цифры останутся нетронутыми в качестве идентификатора.
- Повторите этот процесс для других конфиденциальных типов данных, таких как номера национального страхования, используя \b(?:\d[ \t-]?){7}\b вместо xxx-xxxx и \b(?:\d[ \t-]?){6}\b вместо xxx.xxx.
- При разумном использовании регулярных выражений самые разнообразные последовательности символов могут быть сопоставлены и замаскированы просто с помощью действия Body Replace. Body Replace First и Body Replace Last — это другие варианты действий, которые можно использовать, когда необходимо заменить только первый или последний экземпляр последовательности символов на странице.
Удалите потенциально опасные для безопасности X-заголовки
В качестве хорошей практики часто упоминается избегание предоставления ненужной информации о серверной инфраструктуре, используемой для доставки приложения, путем удаления определенных HTTP-заголовков, которые по умолчанию вставляются приложением или серверной технологией. Чем больше хакер знает о системе, которую он хочет взломать, тем легче ему это сделать. Между публикацией информации об уязвимостях системы и выпуском исправлений часто проходит некоторое время. Именно в этот период системы подвергаются наибольшей опасности, и именно тогда процесс сокрытия деталей платформы доставки приложений оказывается наиболее полезным.
Много ненужной информации содержится в X-Header’ах. Следующее правило iRule выполняет полное удаление X-Header, которое может быть нежелательным.
F5:
Название: | HTTP X-Server Header Removal |
Определение: | когда HTTP_RESPONSE { # Удалите все экземпляры заголовка Server HTTP::удаление заголовков Сервер # Удалите все заголовки, начинающиеся с x-. foreach Имя_заголовка [HTTP::header names] { if {[string match -nocase x-* $header_name]}{ HTTP::header remove $header_name } } } |
Edgenexus:
нажмите здесь, чтобы увеличить
- Создайте новое правило flightPATH с осмысленным названием, например, «Удалить HTTP-заголовки».
- Это пример правила flightPATH, в котором, скорее всего, не требуется подбора условий. При необходимости можно воспользоваться полным набором критериев отбора.
- Добавьте новое действие ‘Remove Response Header’ (Удалить заголовок ответа), в поле Target (Цель) введите значение заголовка, которое необходимо удалить. Добавьте запись действия Remove Response Header для определения каждого из тех полей заголовка, которые Вы хотите скрыть от ответов сервера. Общее действие по удалению всех пользовательских заголовков с X- префиксом может иметь пагубные последствия, поэтому flightPATH требует, чтобы Вы определили конкретные заголовки, которые необходимо удалить.
- Примените созданный flightPATH к каждой из служб, где требуется выполнить действие.
Применение правил flightPATH к виртуальным службам
flightPATH — это очень мощный, но простой в использовании инструмент для работы с HTTP. Вы можете создать «библиотеку» правил flightPATH для выполнения различных действий с HTTP-трафиком по мере его прохождения через устройство балансировки нагрузки ALB-X. К одному виртуальному сервису можно применить несколько правил flightPATH. Правила flightPATH обрабатываются в том порядке, в котором они применяются к сервису. Некоторые правила flightPATH прерывают обработку. Вы можете использовать перетаскивание для изменения порядка, чтобы убедиться, что все действия выполняются так, как нужно. Имеется всестороннее протоколирование и трассировка flightPATH, что позволяет отладить работу flightPATH. edgeNEXUS может предложить профессиональные услуги для помощи в переводе и создании более сложных правил flightPATH.
Хотите узнать больше?
Для получения дополнительной информации о манипулировании трафиком Edgenexus нажмите здесь.
Чтобы загрузить бесплатную пробную версию ALB-X , нажмите здесь.
Мы будем рады возможности продемонстрировать функциональность Edgenexus ALB-X и flightPATH. Запросите персональную, быструю демонстрацию техники здесь.