Вопрос: Примеры применения ACL типа Packet Content Filtering на DES-3200 Series

Ответ: 

Рассмотрим принцип работы Packet content filtering (PCF) в серии DES-3200 на простейшем примере (ping request):

На рисунке выше представлены основные части пакета, которыми можно оперировать при составлении правила PCF.
Таким образом, можно выделить:
•    destination_mac — MAC-адрес назначения;
•    source_mac — MAC-адрес источника;
•    s_tag — внешний тег (при использовании Q-in-Q);
•    c_tag — тег 802.1Q;
•    L2 — часть, начинающаяся сразу после тега 802.1Q (или от начала ether type);
•    L3 — часть, начинающаяся по окончании ether type;
•    L4 — часть, начинающаяся по окончании IP заголовка.

1.  Создадим правило для блокировки пакета (ping request):

Представим имеющиеся у нас данные в более удобном виде и для наглядности выделим части пакета:


Выборку будем осуществлять по ether type (IP), протоколу (icmp) и по типу icmp 8 (request).
В рассматриваемом нами пакете ether type находится в L2 части в 1 и 2 байте (смещение 0), информация о протоколе (icmp) находится в L3 части в 10 байте (смещение 8), тип icmp находится в первом байте L4 части (смещение 0). Анализируемые значения выделены красным.

Создадим сначала профиль:

create access_profile packet_content_mask offset1 l2 0 0xffff offset2 l3 8 0x00ff offset3 l4 0 0xff00 profile_id 1

Приведенная выше команда означает, что первым обрабатываемым полем (offset1) в нашем случае будет нулевое смещение в L2 части. Маску значений задаем равной 0xffff , это означает, что в создаваемых в этом профиле правилах, манипулировать мы будем 1 и 2 байтами L2 части.

Второе обрабатываемое поле (offset2) будет находиться по восьмому смещению в L3 части.
Маску значений задаем равной 0x00ff , в итоге вместе со смещением это означает, что в создаваемых в этом профиле правилах, манипулировать мы будем 10-м байтом L3 части.

И наконец, третье обрабатываемое поле (offset3) будет находиться по нулевому смещению в L4 части. Маску значений задаем равной 0xff00 , это означает, что в создаваемых в этом профиле правилах, манипулировать мы будем 1-м байтом L4 части.

Создадим и само правило с учетом приведенных выше значений.

config access_profile profile_id 1 add access_id auto_assign packet_content offset1 0x0800 offset2 0x0001 offset3 0x0800 port 1 deny


В общем виде получим следующее:

create access_profile packet_content_mask offset1 l2 0 0xffff offset2 l3 8 0x00ff offset3 l4 0 0xff00 profile_id 1
config access_profile profile_id 1 add access_id auto_assign packet_content offset1 0x0800 offset2 0x0001 offset3 0x0800 port 1 deny


Результат: указанное выше правило запретит ICMP реквесты на 1 порту коммутатора.

2.  Необходимо заблокировать SMB трафик (порты 135, 137, 138, 139, 445) на физических портах коммутатора 1-24.
Рассмотрим такой пакет, взятый из Ethereal:


Выборку будем осуществлять по порту назначения.
В рассматриваемом нами пакете такая информация находится в L4 части в 3 и 4 байте (смещение 2). Анализируемые значения выделены красным. В данном случае значение — 008b (шестнадцатиричная СС), что соответствует числу 139 в десятичной системе счисления, а значит блокировать мы будем 139 порт.

create access_profile packet_content_mask offset1 l4 2 0xFFFF profile_id 1
config access_profile profile_id 1 add access_id 1 packet_content offset1 0x008b port 1-24 deny

По аналогии создадим правила, блокирующие другие порты: 135 (87h), 137 (89h), 138 (8ah), 445 (1bdh)

config access_profile profile_id 1 add access_id 2 packet_content offset1 0x0087 port 1-24 deny
config access_profile profile_id 1 add access_id 3 packet_content offset1 0x0089 port 1-24 deny
config access_profile profile_id 1 add access_id 4 packet_content offset1 0x008a port 1-24 deny
config access_profile profile_id 1 add access_id 5 packet_content offset1 0x01bd port 1-24 deny

Таким образом, общий вид правил будет следующим:

create access_profile packet_content_mask offset1 l4 2 0xFFFF profile_id 1
config access_profile profile_id 1 add access_id 1 packet_content offset1 0x008b port 1-24 deny
config access_profile profile_id 1 add access_id 2 packet_content offset1 0x0087 port 1-24 deny
config access_profile profile_id 1 add access_id 3 packet_content offset1 0x0089 port 1-24 deny
config access_profile profile_id 1 add access_id 4 packet_content offset1 0x008a port 1-24 deny
config access_profile profile_id 1 add access_id 5 packet_content offset1 0x01bd port 1-24 deny