Мне нужно настроить собственный фильтр для виртуального хоста, который требует как проверки IP-адреса, так и проверки URL-адреса. Вот так:
_if_ _(_ http-request matches url _and_ ip is from certain host/net range _)_
_or_ ip is from a certain VIP range _then_ let the request through
Интересно, следует ли мне попытаться перенести проверки IP на фильтры пакетов, а затем дважды выполнить проверку IP (чтобы обойти проверки URL-адресов для диапазона VIP) или можно оставить его в пределах производительности irule?
Я бы сделал все в одном iRule.
Вот пример, который выполняет списки ACL уровня 4 для каждого виртуального сервера:
https://devcentral.f5.com/wiki/iRules.AccessControlBasedOnNetworkOrHost.ashx
Вы можете проверить IP-адрес клиента по группе данных в CLIENT_ACCEPTED, а затем проверить URI в HTTP_REQUEST, используя [HTTP :: uri].
Вот пример использования команды класса:
https://devcentral.f5.com/wiki/iRules.class.ashx
when CLIENT_ACCEPTED {
# Check if the client IP is in the allowed_hosts_dg data group
if {[class match [IP::client_addr] equals allowed_hosts_dg]}{
set allowed_ip 1
} else {
set allowed_ip 0
}
}
when HTTP_REQUEST {
# If the client is a legal source IP check if the HTTP path is in the allowed_paths_dg data group
if {$allowed_ip == 1 && [class search allowed_paths_dg contain [string tolower [HTTP::path]]]}{
# allow the request
} else {
# Send a 403 blocking response
HTTP::respond 403 content {Illegal request!}
}
}
Аарон
Это очень распространенная вещь в iRule, и если у вас нет сильно загруженного BIG-IP, у вас не должно возникнуть проблем.
Если вас это беспокоит, вы можете включить тайминги iRule, чтобы увидеть, сколько циклов процессора используется правилом. DevCentral имеет старый, но хороший статья о том, как это сделать. Единственная устаревшая часть - в версии 11, вам понадобится tmsh вместо bigpipe (например, «правило show / ltm»).
Если вы действительно хотите избежать использования iRules, альтернативным методом является класс HTTP (Локальный трафик> Профили> Протокол> Класс HTTP), однако он классифицируется по URI, а не по IP-адресу источника. Это дает вам возможность отправлять совпадающие URI в другой пул или возвращать перенаправление. Вы можете объединить это с новым атрибутом Source на виртуальных серверах в v11.3, чтобы создать несколько виртуальных серверов, каждый из которых обрабатывает только трафик. из конкретная сеть.
Однако, если у вас есть много диапазонов источников, которые нужно охватить, я бы просто использовал iRule и группу данных типа адреса (используйте команду «match class .. equals» для поиска IP-адреса клиента в группе данных немного так же, как вы бы с таблица маршрутизации).
Фильтры пакетов жестоки и вызывают тайм-ауты для клиента, тогда как параметры HTTP Class или iRule позволяют вам выбрать, отбрасывать ли запрос, выбрать другой пул, вернуть перенаправление или вернуть страницу с ошибкой.