info СКАТ — Настройка классификации трафика, тарифные планы, абоненты

Система СКАТ маркирует трафик на основании распознанных протоколов (которых около 6000), а также по номерам автономных систем или по подсетям (предварительно присвоив их какой-нибудь автономной системе с приватной нумерацией).
Мы будем использовать комбинацию этих методов.

Классификация на основе протоколов

Создадим текстовый файл protocols.txt и в него запишем классификацию по протоколам следующим образом:
ftp-data cs7
ftps-data cs7
Bittorrent cs7
default cs5
dns cs4
http cs4
https cs4
rtsp cs3
sip cs2
AOL/ICQ cs2
Yahoo cs2
Battlefield cs2
Steam cs2
Halflife2 cs2
RTP cs2
CrossFire cs2
WARCRAFT3 cs2
Skype cs2
H323 cs2

Тут надо не забыть, что cs7 – наименее приоритетный трафик, а cs0 – наиболее приоритетный.

# Преобразование полученного файла во внутренний формат:
cat protocols.txt | lst2dscp /etc/dpi/protocols.dscp

Трафик, который невозможно определить по протоколу, необходимо классифицировать по направлениям (номерам автономных систем – AS) аналогичным образом в текстовом файле:
8987 cs3
15169 cs2
33844 pass

Ключевое слово pass говорит о том, что этот трафик не будет обрабатываться DPI, что может быть полезно для платежных систем и банков – абоненты смогут совершить оплату, имея при этом учетную запись в состоянии блокировки.
В случае явного отсутствия у требуемого сервиса собственной AS реализована возможность присвоения IP-адресам автономных систем с приватной нумерацией путем создания текстового файла aslocal.txt с последующим добавлением в него соответствующих записей:
192.0.2.100/32 65000

Полученные файлы конфигурации необходимо преобразовать во внутренний формат:
cat aslocal.txt|as2bin /etc/dpi/aslocal.bin
cat asnum.txt|as2dscp /etc/dpi/asnum.dscp

Параметр pass используется для пропуска трафика без обработки.
Для этой же цели создаются «белые списки» в виде файлов, в которые заносят данные о URL, IP-адресах, и полей CN сертификатов.

Создаем текстовый файл white_url.txt, указываем URL без префикса //
www.example.org

Создаем текстовый файл white_ip.txt:
192.0.2.200 443

Создаем текстовый файл white_cn.txt:
www.example.org

После создания всех файлов необходимо преобразовать их и переместить в папку:
/var/lib/dpi

Преобразование файлов во внутренний формат:
cat white_url.txt|url2dic my_url_list.dic
cat white_ip.txt|ip2bin my_ip_list.bin
cat white_cn.txt|url2dic my_cn_list.dic

Перемещение файлов:
mv my_url_list.dic /var/lib/dpi/whlist.bin
mv my_cn_list.dic /var/lib/dpi/whlistcn.bin
mv my_ip_list.bin /var/lib/dpi/whlistip.bin

Все это будет работать при условии, что в блокировочном тарифном плане будет выделена полоса для работы http и https, иначе у абонентов не будет пропускаться трафик по данным спискам, вдобавок не будет выполняться перенаправление при попытке отобразить ресурс, отсутствующий в белых списках.

Создание тарифных планов

Для примера разберем создание двух тарифных планов (ТП) – блокировочного и рабочего.
Каждый ТП создается в своем файле, и его конфигурация выглядит аналогично ограничениям общей полосы в файле fastdpi.conf.
В блокировочном тарифе все классы будут иметь полосу 8bit (то есть 0) кроме http/https, так как они необходимы для работы перенаправлений и белых списков, блокировочный ТП необходимо применить ко всему пространству IP-адресов, используемых в сети, так как по умолчанию весь трафик пропускается без ограничений.
Конфигурации ТП в нашем примере будем хранить в каталоге /etc/dpi/cfg/rateplans/ (созданный нами каталог).
В блокировочном ТП запрещаем работу всех классов трафика кроме класса, к которому относится http (для работы перенаправлений при блокировки абонента). Если под этот класс будет попадать трафик, отличный от http/https, то потенциально он может пропускаться шейпером на скорости, описанной в блокировочном ТП. В случае использования https proxy трафик также может быть не заблокирован. Выставленная нами скорость для класса трафика cs4 небольшая (14 кбит/с), поэтому проблем быть не должно.

Конфигурация тарифного плана блокировки:
htb_inbound_root=rate 14kbit
htb_inbound_class0=rate 8bit ceil 8bit
htb_inbound_class1=rate 8bit ceil 8bit
htb_inbound_class2=rate 8bit ceil 8bit
htb_inbound_class3=rate 8bit ceil 8bit
htb_inbound_class4=rate 8bit ceil 14kbit
htb_inbound_class5=rate 8bit ceil 8bit
htb_inbound_class6=rate 8bit ceil 8bit
htb_inbound_class7=rate 8bit ceil 8bit
htb_root=rate 14kbit
htb_class0=rate 8bit ceil 8bit
htb_class1=rate 8bit ceil 8bit
htb_class2=rate 8bit ceil 8bit
htb_class3=rate 8bit ceil 8bit
htb_class4=rate 8bit ceil 14kbit
htb_class5=rate 8bit ceil 8bit
htb_class6=rate 8bit ceil 8bit
htb_class7=rate 8bit ceil 8bit

Другие тарифы описываем в виде двух конфигурационных файлов (для дневного и ночного периода). Это позволит с помощью cron изменять тарифные скорости для абонентов в разное время суток.

Покажем пример конфигурации для дневного тарифного плана №10:
htb_inbound_root=rate 95mbit
htb_inbound_class0=rate 8bit ceil 95mbit
htb_inbound_class1=rate 8bit ceil 95mbit
htb_inbound_class2=rate 8bit ceil 95mbit
htb_inbound_class3=rate 8bit ceil 95mbit
htb_inbound_class4=rate 8bit ceil 95mbit
htb_inbound_class5=rate 8bit ceil 95mbit
htb_inbound_class6=rate 8bit ceil 95mbit
htb_inbound_class7=rate 8bit ceil 95mbit
htb_root=rate 95mbit
htb_class0=rate 8bit ceil 95mbit
htb_class1=rate 8bit ceil 95mbit
htb_class2=rate 8bit ceil 95mbit
htb_class3=rate 8bit ceil 95mbit
htb_class4=rate 8bit ceil 95mbit
htb_class5=rate 8bit ceil 95mbit
htb_class6=rate 8bit ceil 95mbit
htb_class7=rate 8bit ceil 95mbit

Конфигурация для ночного ТП №10:
htb_inbound_root=rate 50mbit
htb_inbound_class0=rate 8bit ceil 50mbit
htb_inbound_class1=rate 8bit ceil 50mbit
htb_inbound_class2=rate 8bit ceil 50mbit
htb_inbound_class3=rate 8bit ceil 50mbit
htb_inbound_class4=rate 8bit ceil 50mbit
htb_inbound_class5=rate 8bit ceil 50mbit
htb_inbound_class6=rate 8bit ceil 50mbit
htb_inbound_class7=rate 8bit ceil 50mbit
htb_root=rate 50mbit
htb_class0=rate 8bit ceil 50mbit
htb_class1=rate 8bit ceil 50mbit
htb_class2=rate 8bit ceil 50mbit
htb_class3=rate 8bit ceil 50mbit
htb_class4=rate 8bit ceil 50mbit
htb_class5=rate 8bit ceil 50mbit
htb_class6=rate 8bit ceil 50mbit
htb_class7=rate 8bit ceil 50mbit

Значение 95 Мбит/с выставлено, чтобы ограничить скорость несколько раньше, чем это сделает порт FastEthernet коммутатора доступа.

Теперь мы можем применять тариф к IP-адресам.
Выглядит это примерно таким образом:
fdpi_ctrl load profile --policing /etc/dpi/cfg/rateplans/142_day.cfg –ip 192.0.2.3

Начиная с версии 4.0 в ПО появились профили, которые придали значительную гибкость DPI. Профили дают некую абстракцию, позволяют не привязывать файлы к настройкам абонента, вдобавок они дают возможность использовать разные правила перенаправлений для разных абонентов, а не делать это на один и тот же URL из глобальной конфигурации. Профили можно изменять на лету, и их конфигурация будет применена ко всем абонентам, к которым прикреплен профиль.
Таким образом, мы получаем возможность удобно изменять скорость на тарифе или переключать между дневным и ночным режимами полисинга.

 Конфигурация профиля для заблокированных абонентов:
fdpi_ctrl load profile --service 5 --profile.name stop --profile.json '{ "url_list" : "/var/lib/dpi/whlist.bin", "cn_list" : "/var/lib/dpi/whlistcn.bin", "ip_list" : "/var/lib/dpi/whlistip.bin", "redirect" : "example.org/stop" }'

 Конфигурация профиля для абонентов на паузе:
 fdpi_ctrl load profile --service 5 --profile.name pause --profile.json '{ "url_list" : "/var/lib/dpi/whlist.bin", "cn_list" : "/var/lib/dpi/whlistcn.bin", "ip_list" : "/var/lib/dpi/whlistip.bin", "redirect" : "example.org/pause" }'
 

 Конфигурация профиля для однократного оповещения абонента:
fdpi_ctrl load profile --service 6 --profile.name notify --profile.json '{ "redirect" : "example.org/notify", "check" : false }'
 

Параметр check = false означает, что СКАТ не обязательно должен «видеть» трафик, который проходит к указанному URL, чтобы снять сервис перенаправления, а сделает это, как только отправит 302 код HTTP клиенту.
Конфигурация профилей для полисинга:

fdpi_ctrl load profile --policing /etc/dpi/cfg/rateplans/block.cfg --profile.name stop
fdpi_ctrl load profile --policing /etc/dpi/cfg/rateplans/10_day.cfg --profile.name 10

Работа с абонентами

Сначала необходимо заблокировать прохождение трафика для всех подсетей, используемых в нашей сети. Создадим текстовый файл, в котором опишем наши подсети.
# Описание абонентских подсетей:
192.0.2.0/24 198.51.100.0/24 203.0.113.0/24

Затем необходимо применить блокировочный ТП к этому файлу, а также подключить для всех этих адресов сервис, выполняющий перенаправление.
# Блокировка всех абонентов по умолчанию:
fdpi_ctrl load --policing --profile_name stop --file networks.txt
fdpi_ctrl load --service 5 --profile_name unknown_subscriber --file networks.txt

Похожую операцию выполняем с гостевым диапазоном адресов.
# Описание гостевых подсетей:
172.24.0.0/16
# Блокировка гостевых адресов по умолчанию:
fdpi_ctrl load --policing --profile_name stop --file guests.txt
fdpi_ctrl load --service 5 --profile_name guest --file guests.txt

После проведенных манипуляций необходимо разрешить работу абонентам. Произведем это с помощью аналогичной операции, применив ТП к IP-адресу.
# Применение ТП к IP-адресу и отмена работы перенаправления:
fdpi_ctrl load --policing --profile_name 10 --ip 192.0.2.4
fdpi_ctrl del --service 5 --ip 192.0.2.4

Для уведомления абонента можно включить определенный сервис, который покажет однократное уведомление абоненту.
#Включение уведомления:
fdpi_ctrl load --service 6 --profile_name notify --ip 192.0.2.4

Чтобы посмотреть, какие параметры скорости применены к абоненту и какие сервисы для него активированы, можно воспользоваться командой list в утилите fdpi_ctrl
# Включение уведомления:
fdpi_ctrl list --service –ip 192.0.2.5
fdpi_ctrl list --policing --ip 192.0.2.5

В примере ниже мы видим вывод этих команд с профилем №6 для полисинга и отсутствием примененных профилей для перенаправлений:

fdpi_ctrl list --policing --ip 192.0.2.5
Autodetected fastdpi params : dev='lo', port=29000
connecting 127.0.0.1:29000 ...
 ================================
192.0.2.5     HTB     dnlnk_rate=0.00mbit     dnlnk_ceil=0.00mbit
rrate=11875000(95.00mbit)     rburst=5937500(47.50mbit)
rceil=11875000(95.00mbit)     rcburst=5937500(47.50mbit)     rate0=0.00mbit     
ceil0=95.00mbit     rate1=0.00mbit     ceil1=95.00mbit     rate2=0.00mbit
ceil2=95.00mbit     rate3=0.00mbit     ceil3=95.00mbit     rate4=0.00mbit
ceil4=95.00mbit     rate5=0.00mbit     ceil5=95.00mbit     rate6=0.00mbit
ceil6=95.00mbit     rate7=0.00mbit     ceil7=95.00mbit     
HTB_INBOUND         rrate=11875000(95.00mbit)     rburst=5937500(47.50mbit)
rceil=11875000(95.00mbit)     rcburst=5937500(47.50mbit)     rate0=0.00mbit
ceil0=95.00mbit     rate1=0.00mbit     ceil1=95.00mbit     rate2=0.00mbit
ceil2=95.00mbit     rate3=0.00mbit     ceil3=95.00mbit     rate4=0.00mbit
ceil4=95.00mbit     rate5=0.00mbit     ceil5=95.00mbit     rate6=0.00mbit
ceil6=95.00mbit     rate7=0.00mbit     ceil7=95.00mbit     6
---------------------------------
Result processing ip=192.0.2.5 :
 ------------------
 1/1/0
 fdpi_ctrl list --service –ip 192.0.2.5
Autodetected fastdpi params : dev='lo', port=29000
connecting 127.0.0.1:29000 ...
================================
192.0.2.5         0
 ---------------------------------
Result processing ip= 192.0.2.5 :
 ------------------
1/0/1