Сценарии применения
У Досгейта есть множество разных сценариев применения.
Он может быть использован как:
- пограничное устройство сети в виде пакетного фильтра
- stateless firewall
- полноценное standalone решение для защиты от ДДоС-атак.
Кроме этого, Досгейт может быть использован и напрямую интегрирован для разгрузки различных DPI, WAF, bot management, или NGFW систем.
Всё это доступно за счет единого конструктора правил, с помощью которого администратор системы сам выбирает какие функции и инструменты он комбинирует между собой для достижения той или иной цели.
В данной документации приведены примеры, как Досгейт может быть использован в разных случаях.
Incorrect TCP flags
Досгейт позволяет администратору системы завести набор правил, по которому можно сбрасывать некорректные TCP-флаги. Это может быть полезно как в случае эксплуатации Досгейта как Анти-ДДоС решения, так и пакетного файрволла
Данный набор правил рекомендуется для применения в внешних TCP-сервисах, например, на игровых серверах которые используют протокол TCP, а также веб-приложениях, которые защищаются только с использованием dosgate без WAF, bot management систем, и др. ПО которое обрабатывает HTTP/HTTPs трафик на прикладном уровне
Набор правил
Для каждого правила написан комментарий статистики для корректной визуализации в Collectd.
# В примере используется arena first и профиль test
# Создание цепочки правил (chain)
dgctl -u chain://first/test -c insert tcp_flags_chain Chain to drop TCP packets with malicious flags
# Наполнение цепочки правил
dgctl -u chain://first/test/tcp_flags_chain -c insert -- -m protocol tcp -m tcpflags fin,syn/fin,sin -j STATS INVALID_TCP_FLAG -j DROP
dgctl -u chain://first/test/tcp_flags_chain -c insert -- -m protocol tcp -m tcpflags syn,rst/syn,rst -j STATS INVALID_TCP_FLAG -j DROP
dgctl -u chain://first/test/tcp_flags_chain -c insert -- -m protocol tcp -m tcpflags fin,rst/fin,rst -j STATS INVALID_TCP_FLAG -j DROP
dgctl -u chain://first/test/tcp_flags_chain -c insert -- -m protocol tcp -m tcpflags fin/fin,ack -j STATS INVALID_TCP_FLAG -j DROP
dgctl -u chain://first/test/tcp_flags_chain -c insert -- -m protocol tcp -m tcpflags fin,psh,urg/fin,psh,urg -j STATS INVALID_TCP_FLAG -j DROP
dgctl -u chain://first/test/tcp_flags_chain -c insert -- -m protocol tcp -m tcpflags /sin,rst,ack -j STATS INVALID_TCP_FLAG -j DROP
dgctl -u chain://first/test/tcp_flags_chain -c insert -- -m protocol tcp -m tcpflags /syn,fin,rst,ack,psh,urg,ece,ecr -j STATS INVALID_TCP_FLAG -j DROP
dgctl -u chain://first/test/tcp_flags_chain -c insert -- -m protocol tcp -m tcpflags syn ! -m tcpmss 536-65535 -j STATS SUSPICIOS_MSS
dgctl -u chain://first/test/tcp_flags_chain -c insert -- -m protocol tcp -m sport 21,80,443 -m dport 80,443 -j STATS WEB_INVALID -j DROP
# Добавление правила в профиль защиты об отправке всех TCP пакетов на обработку через ранее созданную цепочку
dgctl -u profile://first/test -c insert -- -m protocol tcp -j GOTO tcp_flags_chain
Anti-DDoS
В качестве примера мы используем следующие вводные данные: Досгейт является устройством защиты внешнего периметра сети, на котором расположена 1 подсеть /24.
Основное преимущество Досгейта - возможность детализированного описания сервисов, как их легитимных, так и потенциальных вредоносных параметров, по которым можно сбрасывать атакующие пакеты, без привязанности к каким-то конкретным контрмерам и ограниченным настройкам.
Досгейт работает как единый конструктор правил, с помощью которого можно быстро и легко описать существующие сервисы, комбинировать наборы данных и функции между собой для создания эффективной ДДоС-защиты.
Правила фильтрации, созданные в данном документе являются примером использования существующих инструментов, а не регламентируют конкретный тип или порядок их использования.
В рамках сети работают как UDP, так и TCP сервисы. В рамках карты сервисов мы знаем, что:
- На IP-адресе .251 на порту TCP 8443 работает VPN, на порту TCP 22 работает SSH
- На IP-адресе .252 на порту TCP 443 работает веб-приложение с использованием HTTPs
- На IP-адресе .253 на порту UDP 53 и TCP 53 работает DNS-сервер
- На IP-адресах .251, .252, .253 - не живут никакие сервисы кроме описанных и они полностью под них зарезервированы
Помимо этих данных, мы знаем, что на остальных 252 адресах также время от времени появляются и удаляются внешние сервисы, которые тоже могут стать целью ДДоС-атаки, и мы должны защищать их в том числе.
В нашем примере arena имеет название first
Создание профиля защиты
dgctl -u arena://first -c add global all_services
Аллокация IP-адресов получателей к профилям
dgctl -u router://first/global -c insert -- x.x.x.0/24
Общие правила фильтрации
В рамках общих правил фильтрации мы сбрасываем самые популярные атаки, которые являются едиными для всех сервисов: VPN, WEB, DNS, SSH, и др.
Блокировка амплификаций
Сброс пакетов с вредоносных портов отправителя протокола UDP
dgctl -u profile://first/global -c insert -- -m protocol udp -m sport 19,6881,389,751,11211,1434,5353,137,111,17,27960,520,1900,27015,7001,3283,5683,37810,2362,30718,502,5351,53413,32414,161,3702,177,17185 -j STATS amplifications -j DROP
dgctl -u profile://first/global -c insert -- -m protocol udp -m sport 123 ! -m len what net:packet len 76 -j STATS amplifications -j DROP
dgctl -u profile://first/global -c insert -- -m protocol udp -m dport 53 -m len what net:packet len 1000-1500 -j STATS amplifications -j DROP
dgctl -u profile://first/global -c insert -- -m protocol udp -m sport 53 -m len what net:packet len 1000-1500 -j STATS dns_flood -j DROP
Сброс всех протоколов кроме часто-используемых
В этом примере: TCP, UDP, ICMP, ESP, GRE, IPIP, AH
dgctl -u profile://first/global -c insert -- -m protocol udp,tcp,icmp -j MARK how set value 2
dgctl -u profile://first/global -c insert -- -m protocol ah,esp,ipip,gre -j MARK how set value 2
dgctl -u profile://first/global -c insert -- ! -m mark 2 -j STATS incorrect_protocol -j DROP
Создание отдельных цепочек правил
Для каждого сервиса - своя индивидуальная цепочка правил, в которую пакет переходит из основного профиля
dgctl -u chain://first/global -c insert -- DNS
dgctl -u chain://first/global -c insert -- WEB
dgctl -u chain://first/global -c insert -- VPN_and_ssh
dgctl -u chain://first/global -c insert -- other
Маршрутизация сервисов
В зависимости от IP-получателя, пакет отправляется в специфичную для этого сервиса цепочку правил
dgctl -u profile://first/global -c insert -- ! -m dst x.x.x.251,x.x.x.252,x.x.x.253 -j GOTO other
dgctl -u profile://first/global -c insert -- -m dst x.x.x.251 -j GOTO VPN_and_ssh
dgctl -u profile://first/global -c insert -- -m dst x.x.x.252 -j GOTO WEB
dgctl -u profile://first/global -c insert -- -m dst x.x.x.253 -j GOTO DNS
Настройка цепочки правил other
Активация защиты по триггеру
В случае, если общий трафик, проходящий через это правило, составляет меньше 500 MBps, трафик пропускается сразу конечному получателю (bypass). Когда трафик становится выше 500 MBps - пакеты начинают проходить через остальные правила в профиле защиты (и в соединенных с профилем цепочках). В случае, если трафик стал ниже порога в 500 MBps - чтобы триггер перестал быть активным должно пройти еще 60 секунд (cooldown, для pulse wave атак)
dgctl -u chain://first/global/other -c insert -- -j RATELIMIT 2 key "" cooldown 60 bps 500m
dgctl -u chain://first/global/other -c insert -- -m verdict ratelimit conform -j ACCEPT
TCP-авторизация
Методом RST для защиты от IP-spoofing атак, авторизация IP отправителя на 3600 секунд. TCP-авторизация
dgctl -u chain://first/global/other -c insert -- ! -m hmark id 2 status valid -j TCPAUTH id 1 type hs atype hs
dgctl -u chain://first/global/other -c insert -- -m verdict tcpauth valid -j HMARK id 2 value 2 lifetime 3600
Защита от ботнетов
В случае, если 1 IP отправителя превышает 2000 пакетов в секунду, IP-адрес отправителя из пакета заносится в метку "hmark" ID 1 (быструю таблицу данных) и хранится там установленный lifetime (в нашем примере, 600 секунд). Правило по сбросу IP-адресов которые были заблокированы устанавливается на первое место после триггера о том что идет атака для ускорения работы системы, атаки ботнетами могут превышать сотни ГБит/с.
dgctl -u chain://first/global/other -c insert -i 3 -- -m hmark id 1 status valid -j STATS 2000pps -j DROP
dgctl -u chain://first/global/other -c insert -- -j RATELIMIT 1 key "l3_src" pps 2000
dgctl -u chain://first/global/other -c insert -- -m verdict ratelimit exceed -j HMARK id 1 value 1 lifetime 600
ACL для TCP
dgctl -u chain://first/global/other -c insert -- -m protocol tcp -m sport 0-1023 -j STATS bad_ports_tcp -j DROP
Защита от SYN flood ботами
Блокировка IP отправителя на 600 секунд при превышении 50 PPS SYN)
dgctl -u chain://first/global/other -c insert -- -m tcpflags syn/syn -j RATELIMIT 3 key "l3_src" pps 50
dgctl -u chain://first/global/other -c insert -- -m verdict ratelimit exceed -j HMARK id 1 value 2 lifetime 600
Сброс IP-фрагментации в UDP
dgctl -u chain://first/global/other -c insert -- -m protocol udp -m frag -j STATS fragmentation -j DROP
Сброс QUIC-flood атак
dgctl -u chain://first/global/other -c insert -- -m protocol udp -m sport 80,443 -m dport 80,443 -j DROP
Гео-шейпинг
Если может быть применим, для всех стран кроме России, Беларуси, Казахстана, Узбекистана, Кыргызстана, Грузии, Армении, и Азербайджана до 150 MBps
dgctl -u chain://first/global/other -c insert -- ! -m geoip cntr RU,BY,KZ,UZ,KG,GE,AM,AZ -j RATELIMIT 4 key "" bps 150m
dgctl -u chain://first/global/other -c insert -- -m verdict ratelimit exceed -j STATS geo_shaping -j DROP
Настройка цепочки правил DNS
ACL
Зная какой сервис расположен на этом адресе, мы заранее сбрасываем все проходимые пакеты не отправленные на порт получателя 53, а также те пакеты - которые не содержат DNS header в пакете.
dgctl -u chain://first/global/DNS -c insert -- ! -m dport 53 -j DROP
dgctl -u chain://first/global/DNS -c insert -- ! -m dns -j DROP
Активация защиты по триггеру
В случае если общий трафик проходимый через это правило составляет меньше 100 MBps, трафик пропускается сразу конечному получателю (bypass). Когда трафик становится выше 100 MBps - пакеты начинают проходить через остальные правила в профиле защиты (и в соединенных с профилем цепочках). В случае если трафик стал ниже порога в 100 MBps - чтобы триггер перестал быть активным должно пройти еще 60 секунд (cooldown, для pulse wave атак)
dgctl -u chain://first/global/DNS -c insert -- -j RATELIMIT 2 key "" cooldown 60 bps 100
dgctl -u chain://first/global/DNS -c insert -- -m verdict ratelimit conform -j ACCEPT
TCP-авторизация
Методом RST для защиты от IP-spoofing атак, авторизация IP отправителя на 3600 секунд. TCP-авторизация
dgctl -u chain://first/global/DNS -c insert -- ! -m hmark id 2 status valid -j TCPAUTH id 1 type hs atype hs
dgctl -u chain://first/global/DNS -c insert -- -m verdict tcpauth valid -j HMARK id 2 value 2 lifetime 3600
Защита от ботнетов
В случае, если 1 IP отправителя превышает 2000 пакетов в секунду, IP-адрес отправителя из пакета заносится в метку "hmark" ID 1 (быструю таблицу данных) и хранится там установленный lifetime (в нашем примере, 600 секунд). Правило по сбросу IP-адресов которые были заблокированы устанавливается на первое место после триггера о том что идет атака для ускорения работы системы, атаки ботнетами могут превышать сотни ГБит/с.
dgctl -u chain://first/global/DNS -c insert -i 5 -- -m hmark id 1 status valid -j STATS 2000pps -j DROP
dgctl -u chain://first/global/DNS -c insert -- -j RATELIMIT 1 key "l3_src" pps 2000
dgctl -u chain://first/global/DNS -c insert -- -m verdict ratelimit exceed -j HMARK id 1 value 1 lifetime 600
DNS geo shaping для всех стран кроме России до 100 MBps
dgctl -u chain://first/global/DNS -c insert -- ! -m geoip cntr RU -j RATELIMIT id 8 key "l3_dst" bps 100m
dgctl -u chain://first/global/DNS -c insert -- -m verdict ratelimit exceed -j DROP
Настройка цепочки правил VPN_and_ssh
ACL
dgctl -u chain://first/global/VPN_and_ssh -c insert -- -m dport 8443,22 -m protocol TCP -j MARK how set value 2
dgctl -u chain://first/global/VPN_and_ssh -c insert -- ! -m mark 2 -j DROP
Активация защиты по триггеру
В случае если общий трафик проходимый через это правило составляет меньше 100 MBps, трафик пропускается сразу конечному получателю (bypass). Когда трафик становится выше 100 MBps - пакеты начинают проходить через остальные правила в профиле защиты (и в соединенных с профилем цепочках). В случае если трафик стал ниже порога в 100 MBps - чтобы триггер перестал быть активным должно пройти еще 60 секунд (cooldown, для pulse wave атак)
dgctl -u chain://first/global/VPN_and_ssh -c insert -- -j RATELIMIT 2 key "" cooldown 60 bps 100m
dgctl -u chain://first/global/VPN_and_ssh -c insert -- -m verdict ratelimit conform -j ACCEPT
TCP-авторизация
Методом RST для защиты от IP-spoofing атак, авторизация IP отправителя на 3600 секунд. TCP-авторизация
dgctl -u chain://first/global/VPN_and_ssh -c insert -- ! -m hmark id 2 status valid -j TCPAUTH id 1 type hs atype hs
dgctl -u chain://first/global/VPN_and_ssh -c insert -- -m verdict tcpauth valid -j HMARK id 2 value 2 lifetime 3600
Защита от ботнетов
В случае, если 1 IP отправителя превышает 2000 пакетов в секунду, IP-адрес отправителя из пакета заносится в метку "hmark" ID 1 (быструю таблицу данных) и хранится там установленный lifetime (в нашем примере, 600 секунд). Правило по сбросу IP-адресов, которые были заблокированы, устанавливается на первое место после триггера о том, что идет атака для ускорения работы системы, атаки ботнетами могут превышать сотни ГБит/с.
dgctl -u chain://first/global/VPN_and_ssh -c insert -i 4 -- -m hmark id 1 status valid -j STATS 2000pps -j DROP
dgctl -u chain://first/global/VPN_and_ssh -c insert -- -j RATELIMIT 1 key "l3_src" pps 2000
dgctl -u chain://first/global/VPN_and_ssh -c insert -- -m verdict ratelimit exceed -j HMARK id 1 value 1 lifetime 600
GEO shaping для всех стран кроме России на 100 MBps на каждый IP-получателя
dgctl -u chain://first/global/VPN_and_ssh -c insert -- ! -m geoip cntr RU -j RATELIMIT id 8 key "l3_dst" bps 100m
dgctl -u chain://first/global/VPN_and_ssh -c insert -- -m verdict ratelimit exceed -j DROP
Настройка цепочки правил WEB
ACL
dgctl -u chain://first/global/WEB -c insert -- -m dport 443 -m protocol TCP -j MARK how set value 3
dgctl -u chain://first/global/WEB -c insert -- ! -m mark 3 -j DROP
Активация защиты по триггеру
В случае если общий трафик проходимый через это правило составляет меньше 200 MBps, трафик пропускается сразу конечному получателю (bypass). Когда трафик становится выше 200 MBps - пакеты начинают проходить через остальные правила в профиле защиты (и в соединенных с профилем цепочках). В случае если трафик стал ниже порога в 200 MBps - чтобы триггер перестал быть активным должно пройти еще 60 секунд (cooldown, для pulse wave атак)
dgctl -u chain://first/global/WEB -c insert -- -j RATELIMIT 2 key "" cooldown 60 bps 200m
dgctl -u chain://first/global/WEB -c insert -- -m verdict ratelimit conform -j ACCEPT
TCP-авторизация
Методом RST для защиты от IP-spoofing атак, авторизация IP отправителя на 3600 секунд. TCP-авторизация
dgctl -u chain://first/global/WEB -c insert -- ! -m hmark id 2 status valid -j TCPAUTH id 1 type hs atype hs
dgctl -u chain://first/global/WEB -c insert -- -m verdict tcpauth valid -j HMARK id 2 value 2 lifetime 3600
Защита от ботнетов
В случае, если 1 IP отправителя превышает 2000 пакетов в секунду, IP-адрес отправителя из пакета заносится в метку "hmark" ID 1 (быструю таблицу данных) и хранится там установленный lifetime (в нашем примере, 600 секунд). Правило по сбросу IP-адресов которые были заблокированы устанавливается на первое место после триггера о том что идет атака для ускорения работы системы, атаки ботнетами могут превышать сотни ГБит/с.
dgctl -u chain://first/global/WEB -c insert -i 4 -- -m hmark id 1 status valid -j STATS 2000pps -j DROP
dgctl -u chain://first/global/WEB -c insert -- -j RATELIMIT 1 key "l3_src" pps 2000
dgctl -u chain://first/global/WEB -c insert -- -m verdict ratelimit exceed -j HMARK id 1 value 1 lifetime 600
Stateless Firewall
В качестве примера мы используем следующие вводные данные: Досгейт является устройством защиты внешнего периметра сети, через которое ходит трафик. После этого трафик попадает внутрь сети. Досгейт используется как промежуточный пакетный фильтр, выполняющий, в том числе функции файрволла.
В данном файле можно найти примеры использования Досгейта, как пакетного фильтра, для решения задач межсетевого экрана, ACL-фильтра, белых и черных списков, контроля доступа
В нашем примере, arena имеет название first
, профиль имеет название firewall
Защита SSH-сервера от перебора паролей (bruteforce)
Блокировка IP-отправителя который перебирает пароль к SSH-сервису работающему на порту TCP 22 на 600 секунд, в случае если было больше 10 попыток установить соединение за минуту
# Проверка на IP-spoofing с помощью TCP-авторизации, чтобы атакующий не мог заблокировать легитимные IP-адреса от доступа к SSH
dgctl -u profile://first/firewall -c insert -- ! -m hmark id 1 status valid -j TCPAUTH id 1 type hs atype hs
dgctl -u profile://first/firewall -c insert -- -m verdict tcpauth valid -j HMARK id 1 value 1 lifetime 3600
# Блокировка IP-отправителя в случае если совершено больше 10 попыток соединения (определяется по пакету с SYN флагом в сторону TCP порта получателя 22) за 60 секунд с момента последней попытки
dgctl -u profile://first/firewall -c insert -- -m sdhmark id 1 status matches value 10-999 -j STATS ssh_bruteforce -j DROP
dgctl -u profile://first/firewall -c insert -- -m protocol tcp -m dport 22 -m tcpflags syn/syn -j SDHMARK id 1 how add value 1 lifetime 60
Сброс чужих IP-подсетей (тех, какие не занесены в белый список) в случае обращения к системным портам на сети
В этом примере системным является порт 22 по протоколам TCP и UDP. Это может применяться также на целые устройства на сети, например, когда нужно заблокировать доступ к определенному IP-получателя от всех кроме указанных масок, или даже стран (используя -m geoip
)
# Создание локального префикс-сета, активного только для этого профиля
dgctl -u prefixset://first/firewall/ -c new internal_access
# Добавление IP-масок в префикс-сет
dgctl -u prefixset://first/firewall/internal_access -c insert -- 1.4.4.3/32 1,1.4.4.5/32 1,1.4.6.0/24 1
# Применение префикс-сета
dgctl -u prefixset://first/firewall/internal_access -c commit
# Создание правила, которое отрабасывает весь трафик на порт получателя 22 на протоколе UDP и TCP, в случае если IP-отправителя не находится в префикс-сете internal_access
dgctl -u profile://first/firewall -c insert -- -m dport 22 ! -m pset internal_access class local what src value 1 -j STATS no_internal_access -j DROP
Blackholing
В случае если нам нужно заблокировать доступ к определенному IP-адресу, или от определенных IP-адресов. В этом примере адреса находятся сразу в правиле, но они также могут забираться из созданного префикс-сета
dgctl -u profile://first/firewall -c insert -- -m dst 7.7.7.7 -j STATS dst_7_7_7_7_blackhole -j DROP
dgctl -u profile://first/firewall -c insert -- -m src 5.5.5.5 -j STATS src_5_5_5_5_blackhole -j DROP
Географический шейпинг
В некоторых случаях, требуется ограничить доступ к определенным ресурсам, например, только Российскими сетями. В этом примере мы ограничиваем трафик из всех стран кроме России в сторону указанных IP-масок получателей в 10 MBps.
dgctl -u profile://first/firewall -c insert -- ! -m geoip cntr RU -m dst 3.3.3.3,3.2.2.0/24,3.7.6.2/28 -j RATELIMIT 1 key "" bps 10m
dgctl -u profile://first/firewall -c insert -- -m verdict ratelimit exceed -j STATS geo_shape -j DROP
Bandwidth enforcement
В сетевой инфраструктуре находится несколько групп клиентов, которые отправляют и получают трафик
Администратору системы необходимо ограничить полосу пропускания на входящий и исходящий трафик индивидуально для каждой группы клиентов
Такое может быть применимо, например, в операторе связи, который продает разные группы тарификации разным клиентам, или хостингу, который хочет ограничить полосу пропускания определенных виртуальных или серверных платформ
В этом примере, трафик на постоянной основе маршрутизируется через аппаратную платформу на которой установлено ПО. Создано две арены: одна на входящий трафик, другая на исходящий
arena:in eth1 > eth2 | arena:out eth2 > eth1
В данном примере также всего 2 группы клиентов, их может быть больше
Первая группа клиентов ограничивается в 100 MBps входящего трафика
и 100 MBps исходящего трафика
Вторая группа клиентов ограничивается в 50 MBps входящего трафика
и 25 MBps исходящего трафика
Создание профилей
dgctl -u arena://in -c add bandwidth
dgctl -u arena://out -c add bandwidth
Настройка маршрутизации всего трафика через эти профили
dgctl -u router://in/bandwidth -c insert -- 0.0.0.0/0
dgctl -u router://out/bandwidth -c insert -- 0.0.0.0/0
Создание префикс-сетов, как определителя группы клиентов
# Входящий трафик
dgctl -u prefixset://in/bandwidth/ -c new group1
dgctl -u prefixset://in/bandwidth/ -c new group2
# Исходящий трафик
dgctl -u prefixset://out/bandwidth/ -c new group1
dgctl -u prefixset://out/bandwidth/ -c new group2
Добавление IP-адресов в префикс-сеты
# Адреса первой группы
dgctl -u prefixset://in/bandwidth/group1 -c insert -- 1.1.1.0/24 1
dgctl -u prefixset://out/bandwidth/group1 -c insert -- 1.1.1.0/24 1
# Адреса второй группы
dgctl -u prefixset://in/bandwidth/group2 -c insert -- 1.1.2.0/24 1
dgctl -u prefixset://out/bandwidth/group2 -c insert -- 1.1.2.0/24 1
Правила для входящего трафика
# Ограничения для первой группы
dgctl -u profile://in/bandwidth -c insert -- -m pset group1 class local what dst -j RATELIMIT 1 key "l3_dst" bps 100m
dgctl -u profile://in/bandwidth -c insert -- -m verdict ratelimit exceed -j DROP
dgctl -u profile://in/bandwidth -c insert -- -j VERDICT clear
# Ограничения для второй группы
dgctl -u profile://in/bandwidth -c insert -- -m pset group2 class local what dst -j RATELIMIT 1 key "l3_dst" bps 50m
dgctl -u profile://in/bandwidth -c insert -- -m verdict ratelimit exceed -j DROP
dgctl -u profile://in/bandwidth -c insert -- -j VERDICT clear
Правила для исходящего трафика трафика
# Ограничения для первой группы
dgctl -u profile://out/bandwidth -c insert -- -m pset group1 class local what src -j RATELIMIT 1 key "l3_dst" bps 100m
dgctl -u profile://out/bandwidth -c insert -- -m verdict ratelimit exceed -j DROP
dgctl -u profile://out/bandwidth -c insert -- -j VERDICT clear
# Ограничения для второй группы
dgctl -u profile://out/bandwidth -c insert -- -m pset group2 class local what src -j RATELIMIT 1 key "l3_dst" bps 25m
dgctl -u profile://out/bandwidth -c insert -- -m verdict ratelimit exceed -j DROP
dgctl -u profile://out/bandwidth -c insert -- -j VERDICT clear