Анализ и фильтрация трафика по сигнатурам протоколов EcoNAT Documentation / Анализ и фильтрация трафика по сигнатурам протоколов
Подсистема DPI способна анализировать трафик по сигнатурам протоколов и применять к трафику распознанных протоколов действие, заданное в настройках DPI-списка. Подлежащие распознаванию протоколы можно указывать как по отдельности, так и категориями. Для этого в настройках DPI-списка служат параметры protocols и proto_categories соответственно (см. раздел "Создание и настройка DPI-списков"). Можно указать несколько протоколов и категорий через пробел, а также при необходимости добавлять и удалять протоколы и категории с помощью операторов += и -=.
Полный список поддерживаемых протоколов выводится командой show protocols all, список категорий протоколов – командой show protocols categories.
Для вывода информации об интересующем протоколе необходимо отправить команду show protocols <имя_протокола>. Вывод команды содержит краткое название протокола (name), полное название протокола (full name), название категории, к которой относится протокол (category), и краткое описание протокола (descripton). Пример:
EcoSGE:system.dpi# show protocols ssh
name ssh
full name Secure Shell
category Encrypted
description Secure Shell (SSH), sometimes known as Secure Socket Shell, is a UNIX-based command interface and a protocol for obtaining secure access to a remote computer.
Для быстрого поиска протоколов по названию введите первые буквы названия после show protocols и нажмите клавишу Tab. При наличии нескольких вариантов будет выведен список совпадений. Если вариант один, то после нажатия клавиши Tab будет выведена аббревиатура протокола. Например:
EcoSGE:system.dpi# show protocols ss [TAB]
# There are several choices:
ssdp
ssh
ssl
sscopmce
ss
По каждому распознанному протоколу подсистема DPI ведёт подсчёт исходящих и входящих сессий, байтов и пакетов. Счётчики можно вывести в CLI или опросить по SNMP.
Для вывода счётчиков в CLI необходимо отправить команду show protocounters { all | diff } :
- с аргументом all команда покажет суммарные значения с момента запуска системы EcoSGE;
- с аргументом diff будут показаны только изменения за последнюю минуту.
Счётчики в выводе команд сгруппированы по протоколам, а группы счётчиков, в свою очередь, упорядочены по убыванию суммарного количества байт.
Примеры вывода:
EcoSGE:# show protocounters all
Printing proto counters...
Core total, cr_dpi_total_base_egress_bytes: 1750
Core total, cr_dpi_total_base_ingress_bytes: 948
Core total, cr_dpi_total_base_egress_pkts: 25
Core total, cr_dpi_total_base_ingress_pkts: 14
Core total, cr_dpi_total_ip_egress_bytes: 1688
Core total, cr_dpi_total_ip_ingress_bytes: 948
Core total, cr_dpi_total_ip_egress_pkts: 24
Core total, cr_dpi_total_ip_ingress_pkts: 14
Core total, cr_dpi_total_tcp_egress_bytes: 1688
Core total, cr_dpi_total_tcp_ingress_bytes: 948
Core total, cr_dpi_total_tcp_egress_pkts: 24
Core total, cr_dpi_total_tcp_ingress_pkts: 14
Core total, cr_dpi_total_smpp_egress_sessions: 1
Core total, cr_dpi_total_smpp_egress_bytes: 848
Core total, cr_dpi_total_smpp_ingress_bytes: 678
Core total, cr_dpi_total_smpp_egress_pkts: 12
Core total, cr_dpi_total_smpp_ingress_pkts: 10
Core total, cr_dpi_total_imaps_egress_sessions: 2
Core total, cr_dpi_total_imaps_egress_bytes: 280
Core total, cr_dpi_total_imaps_egress_pkts: 4
EcoSGE:# show protocounters diff
Printing proto counters diff...
Core total-diff, cr_dpi_total_base_egress_bytes: 906
Core total-diff, cr_dpi_total_base_ingress_bytes: 474
Core total-diff, cr_dpi_total_base_egress_pkts: 13
Core total-diff, cr_dpi_total_base_ingress_pkts: 7
Core total-diff, cr_dpi_total_ip_egress_bytes: 844
Core total-diff, cr_dpi_total_ip_ingress_bytes: 474
Core total-diff, cr_dpi_total_ip_egress_pkts: 12
Core total-diff, cr_dpi_total_ip_ingress_pkts: 7
Core total-diff, cr_dpi_total_tcp_egress_bytes: 844
Core total-diff, cr_dpi_total_tcp_ingress_bytes: 474
Core total-diff, cr_dpi_total_tcp_egress_pkts: 12
Core total-diff, cr_dpi_total_tcp_ingress_pkts: 7
Core total-diff, cr_dpi_total_smpp_egress_bytes: 424
Core total-diff, cr_dpi_total_smpp_ingress_bytes: 339
Core total-diff, cr_dpi_total_smpp_egress_pkts: 6
Core total-diff, cr_dpi_total_smpp_ingress_pkts: 5
Core total-diff, cr_dpi_total_imaps_egress_sessions: 1
Core total-diff, cr_dpi_total_imaps_egress_bytes: 140
Core total-diff, cr_dpi_total_imaps_egress_pkts: 2
Для опроса счётчиков по SNMP следует использовать шаблон запроса 1.3.6.1.4.1.45555.1.6.<a>.<b>.<c>, где:
<a> – определяет запрашиваемое значение:
- 0 – суммарное значение с момента запуска системы;
- 1 – изменение за последнюю минуту;
<b> – номер (id) протокола в MIB;
<c> – подсчитываемые единицы:
- 0 – исходящие сессии,
- 1 – входящие сессии,
- 2 – исходящие байты,
- 3 – входящие байты,
- 4 – исходящие пакеты,
- 5 – входящие пакеты.
Пример SNMP-опроса счётчиков для протокола SMPP (ID 738):
snmpwalk -v2c -c public 192.168.5.2:161 1.3.6.1.4.1.45555.1.6.0.738
iso.3.6.1.4.1.45555.1.6.0.738.0.0 = Counter64: 1
iso.3.6.1.4.1.45555.1.6.0.738.1.0 = Counter64: 0
iso.3.6.1.4.1.45555.1.6.0.738.2.0 = Counter64: 848
iso.3.6.1.4.1.45555.1.6.0.738.3.0 = Counter64: 678
iso.3.6.1.4.1.45555.1.6.0.738.4.0 = Counter64: 12
iso.3.6.1.4.1.45555.1.6.0.738.5.0 = Counter64: 10
Если в SNMP Manager загружен MIB-файл счётчиков для протоколов, то в SNMP-ответах вместо OID будут указаны имена счётчиков. Пример:
snmpwalk -v2c -m Proto-MIB -c public 192.168.5.2:161 1.3.6.1.4.1.45555.1.6.0.738
Proto-MIB::econatTotalSmppEgressSessions.0 = Counter64: 1
Proto-MIB::econatTotalSmppIngressSessions.0 = Counter64: 0
Proto-MIB::econatTotalSmppEgressBytes.0 = Counter64: 848
Proto-MIB::econatTotalSmppIngressBytes.0 = Counter64: 678
Proto-MIB::econatTotalSmppEgressPkts.0 = Counter64: 12
Proto-MIB::econatTotalSmppIngressPkts.0 = Counter64: 10
Все счётчики подсистемы DPI являются скалярными объектами в MIB, поэтому при опросе таких счётчиков по отдельности необходимо после OID указывать ".0". Пример запроса суммарного количества исходящих пакетов протокола SMPP:
snmpget -v2c -m Proto-MIB -c public 192.168.5.2:161 1.3.6.1.4.1.45555.1.6.0.738.4.0"
Proto-MIB::econatTotalSmppEgressPkts.0 = Counter64: 12
Для сброса счётчиков необходимо отправить команду clear counters.
При распознавании какого-либо протокола по базе сигнатур подсистема DPI сохраняет уникальный набор данных об этом протоколе (5-tuple) в специальную таблицу – DPI flow table. Если в дальнейшем будет обнаружена попытка открытия сессии, у которой 5-tuple совпадает с сохранённым в таблице, то подсистема DPI уже по первому пакету определит протокол. Это оптимизирует производительность DPI.
Каждая запись 5-tuple хранится в таблице в течение фиксированного времени, которое нельзя изменить. Однако предусмотрена возможность принудительной очистки DPI flow table. Для этого необходимо отправить команду clear dpi_worker_flows. С данной командой связаны два счётчика:
- cr_dpi_worker_flush_try регистрирует каждую попытку очистки таблицы;
- cr_dpi_worker_flush регистрирует количество удалённых записей.