С 7 версии ОС у ASA наконец появилась хоть какая-то возможность управлять потоками пакетов. Т.е. появились зачатки QoS. В версии 8.0 эти возможности весьма расширили.
На ASA эту технологию, видимо, чтобы запутать админов, называют не так, как на маршрутизаторах. Там она называется MQC (Modular QoS CLI), а на asa — MPF. Однако, идея похожая: надо определить классы трафика при помощи команды
На ASA эту технологию, видимо, чтобы запутать админов, называют не так, как на маршрутизаторах. Там она называется MQC (Modular QoS CLI), а на asa — MPF. Однако, идея похожая: надо определить классы трафика при помощи команды
class-map
, затем создать политику (policy-map
), где для различным классам сопоставить различные действия для качества обслуживания (например, ограничить полосу до явно указанной), или другие сложные действия (например, поменять параметры в ТСР заголовке или отправить на модуль AIP-SSM). И последним шагом надо применить созданную политику при помощи команды service-policy
к интерфейсу либо глобально. Вот давайте с этими тремя шагами поподробнее познакомимся.
Классы трафика.
Как было упомянуто выше, для начала надо раскидать пакеты по классам. Помните, что все, что не указано явно, попадет в
Создаем класс:
class-default
.Создаем класс:
Asa(config)# class-map [ИМЯ_КЛАССА]
Сопоставляем классу трафик
Asa(config-cmap)# match ?
mpf-class-map mode commands/options:
access-list Match an Access List
any Match any packet
default-inspection-traffic Match default inspection traffic:
ctiqbe----tcp--2748 dns-------udp--53
ftp-------tcp--21 gtp-------udp--2123,3386
h323-h225-tcp--1720 h323-ras--udp--1718-1719
http------tcp--80 icmp------icmp
ils-------tcp--389 mgcp------udp--2427,2727
netbios---udp--137-138 radius-acct---udp--1646
rpc-------udp--111 rsh-------tcp--514
rtsp------tcp--554 sip-------tcp--5060
sip-------udp--5060 skinny----tcp--2000
smtp------tcp--25 sqlnet----tcp--1521
tftp------udp--69 waas------tcp--1-65535
xdmcp-----udp--177
dscp Match IP DSCP (DiffServ CodePoints)
flow Flow based Policy
port Match TCP/UDP port(s)
precedence Match IP precedence
rtp Match RTP port numbers
tunnel-group Match a Tunnel Group
Как видите, пакеты в класс можно определить списком доступа, по полю DSCP, по полю precedence, по заголовку RTP, по имени туннельной группы (это очень удобно для выделения , скажем, потока по IPSec к конкретному соседу). Также есть возможность разделить весь трафик по адресам назначения
Asa (config-cmap)# match flow ip destination-address
И по портам назначения
Asa (config-cmap)# match port tcp eq 80,443
И совсем загадочная строчка
Обычно спрашивают, можно ли добавить в этот default-inspection-traffic какой-нибудь еще протокол? Ответ – нет. Только с изменением версии ОС количество и версии исследуемых протоколов могут меняться. Следующий типичный вопрос: это чтож, получается что asa будет напрягаться по поводу всех протоколов, даже если это нам не надо? Ответ – нет. Список протоколов, по которому будет производиться глубокий анализ, вы зададите в политике.
default-inspection-traffic
. Это ключевое слово означает «весь трафик, который asa умеет обрабатывать глубоко», т.е. залезая уже в тело пакета и разыскивая элементы, характерные для конкретного протокола.Обычно спрашивают, можно ли добавить в этот default-inspection-traffic какой-нибудь еще протокол? Ответ – нет. Только с изменением версии ОС количество и версии исследуемых протоколов могут меняться. Следующий типичный вопрос: это чтож, получается что asa будет напрягаться по поводу всех протоколов, даже если это нам не надо? Ответ – нет. Список протоколов, по которому будет производиться глубокий анализ, вы зададите в политике.
Примечание: название
class-map
можно поменять вручную. Командой rename
, которая доступна из режима(config-cmap)
. Например, если частично настройка производилась через графическую оболочку и имена классов были выбраны самой asa. В этом случае они длинные и сложночитаемые.
Как правило, на asa уже создан один класс. Он называется inspection_default. Он создавался автоматически при переходе из 6 в 7 ОС. В этот класс попадают как раз все протоколы, которые asa умеет инспектировать глубоко.
Политика.
Для указания действия для классов трафика, необходимо создать политику.
Asa(config)# policy-map [POLICY_NAME]
Далее,указываем, для какого класса задавать действия:
Asa(config-pmap)# class [CLASS_NAME]
Asa(config-pmap-c)# ?
MPF policy-map class configuration commands:
csc Content Security and Control service module
exit Exit from MPF class action configuration mode
help Help for MPF policy-map class/match submode commands
inspect Protocol inspection services
ips Intrusion prevention services
no Negate or set default values of a command
police Rate limit traffic for this class
priority Strict scheduling priority for this class
quit Exit from MPF class action configuration mode
service-policy Configure QoS Service Policy
set Set connection values
shape Traffic Shaping
С точки зрения качества обслуживания наблюдаем весьма широкий набор:
Asa(config-pmap-c)# police {input/output} {SPEED} [BURST][conform-action] [exceed-action]
Т.е. мы может отдельно описать полосу пропускания на вход и выход, явно указав размер всплеска (burst) в байтах, действие при нормальных условиях и действие при превышении порога. Впрочем, можно ограничиться лишь скоростью. В этом случае всплеск будет выбран минимальным для указанной скорости.
Asa(config-pmap-c)# priority
Здесь все просто: просто приоритет. И все Если в классе есть пакет – наш ему приоритет!
asa(config-pmap-c)# shape average {SPEED} [{BPI}]
SPEED – скорость в битах в секунду, кратная 8000
BPI – bits per interval, количество бит, которые необходимо для нужной скорости отправить за раз. Кратно 128 битам. Однако, циска сама не рекомендует явно задавать этот параметр. Мол, алгоритм
сам разберется
Также можно делать вложенные политики при помощи указания команды
service-policy
, например, для того, чтобы трафик, направленный через IPSec к определенному соседу, внутри шифрованного канала имел определенную структуру. К примеру, приоритетно пропускал голос.
Примечание: в версиях ОС до 8.0 не было возможности делать сглаживание (shape) и применять вложенные политики.
Что у нас есть еще. Отправка трафика на модули антивируса или IPS.
asa(config-pmap-c)# ips {inline|promicsous} {fail-open|fail-close}
отправляем пакеты на ips либо в режиме
inline
, и тогда модуль может сам принять решение об уничтожении пакета. Режим удобен тем, что модуль активно влияет на проходящий трафик. Плох этот режим тем, что модуль может вносить дополнительную задержку, особенно при его предельной загрузке. Режим promiscous
означает, что модуль получит лишь копию пакета и сможет лишь детектировать атаку (такой режим еще называют IDS – Intrusion Detection System). Но этот режим не вносит задержек и не влияет на трафик.Fail-open
означает, что если модуль по каким-то причинам не отвечает (сломался) – трафик пойдет без анализаFail-close
означает, что если модуль неисправен, то пакеты этого класса не пройдут сквозь asa. Как правило, ставят fail-open. Fail-close – для безопасников-маньяков.asa(config-pmap-c)# csc {fail-open|fail-close}
Важно: пакеты для модулей перехватываются в обе стороны. Т.е. вся сессия попадет под пристальный взор модуля.
Еще одна возможность воздействовать на проходящий трафик – заставить изменять параметры пакетов при помощи команды set
Asa(config-pmap-c)# set connection ?
mpf-policy-map-class mode commands/options:
advanced-options Configure advanced connection parameters
conn-max Keyword to set the maximum number of all
simultaneous connections that are allowed. Default
is 0 which means unlimited connections.
decrement-ttl Decrement Time to Live field
embryonic-conn-max Keyword to set the maximum number of TCP embryonic
connections that are allowed. Default is 0 which
means unlimited connections.
per-client-embryonic-max Keyword to set the maximum number of TCP embryonic
connections that are allowed per client machine.
Default is 0 which means unlimited connections.
per-client-max Keyword to set the maximum number of all
simultaneous connections that are allowed per
client machine. Default is 0 which means unlimited
connections.
random-sequence-number Enable/disable TCP sequence number randomization.
Default is to enable TCP sequence number
randomization
timeout Configure connection timeout parameters
При помощи этого параметра можно указать максимальное количество открытых, полуоткрытых (ТСР) сессий на весь класс или поадресно. Также, можно указать размер таймаута для сессий данного класса, включить или выключить (по умолчанию для всех ТСР сессий включено) рандомизацию начальных номеров (initial sequence number).
Отдельно хочу отметить слово
Если хочется, чтобы все работало привычно, можно явно приказать asa уменьшать TTL как раз при помощи этой команды. Например, только для UDP и определенных портов или ICMP пакетов.
decrement-ttl
. Возможно, вы уже отмечали, что в команде tracert (traceroute) asa себя не показывает. Происходит это оттого, что по умолчанию asa не уменьшает размер TTL для проходящих пакетов. А значит и traceroute «проскочит» мимо.Если хочется, чтобы все работало привычно, можно явно приказать asa уменьшать TTL как раз при помощи этой команды. Например, только для UDP и определенных портов или ICMP пакетов.
Осталось не изученным только слово
inspect
. Разберем его подробно в следующей статье.
Очень важным является порядок обработки пакетов различными действиями. Так, asa не отслеживает, если один и тот же пакет попадет в разные классы. И для одного класса можно применить несколько действий. В таблице приведена последовательность обработки и направление анализируемого трафика (напомню, что NetFlow появилось только в версии 8.2)
Feature
|
| |
QoS input policing
| ||
TCP and UDP connection
limits and timeouts, and TCP sequence number randomization | ||
TCP normalization
| ||
TCP state bypass
| ||
CSC
| ||
Application inspection (multiple types)
| ||
IPS
| ||
NetFlow Secure Event Logging filtering
| ||
QoS output policing
| ||
QoS standard priority queue
| ||
QoS traffic shaping, hierarchical priority queue
|
Обратите внимание, что политика, примененная на интерфейс, отрабатывает иначе, нежели политика, примененная глобально. Глобально примененная политика никогда не отрабатывает в обе стороны одновременно.
Примечание: название политики тоже можно менять командой
rename
.
Важно: пакет одной технологией обрабатывается один раз! Т.е. если один и тот же пакет по недосмотру или специально попал в 2 разных класса, и в политике настроено одно и то же действие для этих разных классов, например, police, то пакет будет обработан этим полисером 1 раз с учетом тех настроек, которые попадутся первыми (что в конфиге написано первым).
Как правило, одна политика уже создана по умолчанию. И называется global_policy. В ней применен тот самый, созданный по умолчанию inspection_default класс, для которого включено несколько протоколов для инспектирования.
Применение политики
Осталось малость: применить правила. Для применения на интерфейс используем команду
При этом согласно таблице, часть правил будет работать на вход, часть на выход, а часть – в обе стороны.
Asa(config)# service-policy [POLICY_NAME] interface {INT}
При этом согласно таблице, часть правил будет работать на вход, часть на выход, а часть – в обе стороны.
Можно применить политику глобально:
Asa(config)# service-policy [POLICY_NAME] global
По умолчанию, политика global_policy уже применена глобально
Важно: бывает так, что политика, примененная глобально, конфликтует с политикой, примененной на интерфейс, хотя вроде как примененная на интерфейс имеет приоритет. Поэтому мой вам совет: старайтесь избегать одинаковых действий в политиках, примененных одновременно. Например, если в политике на интерфейсе включено инспектирование протокола FTP, выключите инспектирование, которое по умолчанию в глобальной политике включено. Иначе может быть конфликт (очень часто бывает так, что инспектирование FTP перестает работать вовсе)
Источник: anticisco.ru/blogs/2010/09/asa-статья-14-modular-policy-framework-mpf/
Комментариев нет:
Отправить комментарий