Назад | Перейти на главную страницу

F5 Фильтрация пакетов или iRules, или и то, и другое?

Мне нужно настроить собственный фильтр для виртуального хоста, который требует как проверки 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 позволяют вам выбрать, отбрасывать ли запрос, выбрать другой пул, вернуть перенаправление или вернуть страницу с ошибкой.