До перехода на замечательные WiFi точки доступа UniFi с центральным контроллером, имелось некоторое количество условно-открытых отдельных AP предоставляющих доступ исключительно в Интернет через MikroTik. Спустя некоторое время после запуска этих AP было замечено их непрофильное использование некоторыми пользователями, а именно торренты, видео-хостинги и прочий тяжёлый контент, запрещённый в корпоративной сети. Т.к. в данном случае фильтры и жёсткие ограничения устанавливать было нельзя, пришлось удовлетвориться:

— ограничением ширины канала до каждой AP
— установкой дневного лимита входящего трафика, после которого скорость на AP сильно ограничивается (до выяснения обстоятельств) и отсылается уведомление администраторам по email

Основой всего этого начинания являются очереди (queues) RouterOS — и скорость ограничат, и трафик посчитают, ну а логика конечно в скриптах.

Для начала сделаем такую простую очередь:

/queue simple
add burst-limit=5M/5M burst-threshold=2512k/2512k burst-time=8s/8s comment="" \
    direction=both disabled=no dst-address=0.0.0.0/0 interface=all limit-at=\
    0/0 max-limit=2M/2M name=WiFi2 parent=none priority=8 queue=\
    default-small/default-small target-addresses=172.16.15.3/32 total-queue=\
    default-small

При стандартном использовании сети Интернет пользователями я крайне рекомендую использовать burst, т.к. это заметно повышает удовлетворённость пользователей, практически не увеличивая нагрузку на канал.

Как я говорил выше, очередь также заботливо собирает нам статистическую информацию (которую мы сможем получить и скриптом):

Скриптов у нас будет два:

1. Простенький «ResetWiFiCounters», сбрасывающий счётчик трафика и восстанавливающий скорость доступа:

/queue simple reset-counters WiFi1
/queue simple reset-counters WiFi2
 
/queue simple set WiFi1 max-limit=2M/2M
/queue simple set WiFi2 max-limit=2M/2M

Выполняем его шедулером каждый день в 00:05:00:

/system scheduler
add comment="" disabled=no interval=1d name=ResetWiFI on-event=\
    "/system script run ResetWiFiCounters" policy=\
    reboot,read,write,policy,test,sniff,sensitive start-date=jan/01/1970 \
    start-time=00:05:00

2. Сильно замороченный «CheckWiFi1» («CheckWiFi2», «CheckWiFi3» и т.д. по необходимости):

:local WiFiName "WiFi1"
:local BytesIN
:local BytesOUT
 
:local Bytes [/queue simple get [find name="$WiFiName"] bytes]
 
:for i from=( [:len $Bytes] - 1) to=0 do={ 
:if ( [:pick $Bytes $i] = "/") do={ 
:set BytesOUT ([:pick $Bytes 0 $i] / 1048576)
}
}
 
:for i from=0 to=( [:len $Bytes] - 1) do={ 
	:if ( [:pick $Bytes $i] = "/") do={
		:set BytesIN ([:pick $Bytes ($i + 1) [:len $Bytes]] / 1048576)
	}
}
 
:if (($BytesIN > 500) || ($BytesOUT > 500)) do {
/tool e-mail send to=admin@domain.ru from=wifi@domain.ru server=smtp.domain.ru subject="Traffic warning for $WiFiName" body="Traffic warning for $WiFiName" user=username password=p@ssw0rd
 
/queue simple set [find name="$WiFiName"] max-limit=30k/30k
}

Почему именно так получать статистику — без понятия, долго экспериментировал, гарантированно работает на 3.28, на более свежих не проверял.

Запускаем раз в минуту:

/system scheduler
add comment="" disabled=no interval=1m name=CheckWiFi1 on-event=\
    "/system script run CheckWiFi1" policy=\
    reboot,read,write,policy,test,password,sniff,sensitive start-date=\
    jan/01/1970 start-time=00:00:00

В принципе — всё: пришло уведомление на почту — идём смотреть что-же там происходит.