В данной заметке рассмотрим работу Mikrotik с NetFlow.
Так же установим и настроим Nfsen для сбора и визуализации трафика.
Пару слов о Nfsen:)
Название происходит от NetflowSensor.
При установке Nfsen в FreeBSD по мимо web-интерфейса так же устанавливаются несколько утилит для работы с NetFlow:
- nfcapd — коллектор NetFlow
- nfdump для работы с данными nfcapd
- nfprofile — профилировщик сетевых потоков
Для каждого потока требуется запуск отдельного экземпляра nfcapd.
Немного вводных данных:
- FreeBSD 12.1 (192.168.88.2)
- NGINX
- PHP (включая php-fpm)
- Mikrotik (192.168.88.1)
- Локальная сеть — 192.168.88.0/24
- nfsen.mydomain.ru — имя виртуального хоста
Предполагается, что у вас настроен NGINX и php-fpm, если нет, то дело 10 минут.
Обязательно в php.ini пропишите свою часовую зону, иначе Nfsen будет считать время UTC:
vi /usr/local/etc/php.ini date.timezone = Europe/Moscow
Ставить будем из портов:
portsnap fetch update cd /usr/ports/net-mgmt/nfsen && make install clean echo nfsen_enable=\"YES\" >> /etc/rc.conf
Сразу перезапустим php-fpm:
/etc/usr/local/rc.d/php-fpm restart
На всякий случай сделаем копию конфигурационного файла Nfsen:
cp /usr/local/etc/nfsen.conf /usr/local/etc/nfsen.conf.sample
Опишем в конфигурационном файле Nfsen наш канал данных Netflow (предварительно удалив тестовые данные из него):
vi /usr/local/etc/nfsen.conf %sources = ( 'Mikrotik3011' => { 'port' => '9995', 'col' => '#0000ff', 'type' => 'netflow' }, );
Добавим данный канал (source) в Nfsen командой:
nfsen reconfig New sources to configure : Mikrotik3011 Continue? [y/n] y Add source 'Mikrotik3011' Reconfig done!
Запустим Nfsen:
/usr/local/etc/rc.d/nfsen start
Включим Trafic Flow в Mikrotik и создадим цель (Targets), сделаем через консоль:
/ip traffic-flow set cache-entries=1M enabled=yes /ip traffic-flow target add dst-address=192.168.88.2 port=9996 version=5
Настроим NGINX, подключим конфигурационные файлы виртуальных хостов из директории /usr/local/etc/nginx/conf.d, указав это в блоке http nginx.conf.
Обратите внимание на запись allow 192.168.88.0/24; — этой записью мы разрешили доступ только для сети 192.168.88.0/24:
vi /usr/local/etc/nginx/nginx.conf include conf.d/*.conf; mkdir /usr/local/etc/nginx/conf.d /var/nginx/nfsen vi /usr/local/etc/nginx/conf.d/nfsen.mydomain.conf server { listen 80; server_name nfsen.mydomain.ru; root /usr/local/www/nfsen; access_log /var/log/nginx/nfsen/access.log; error_log /var/log/nginx/nfsen/error.log error; index nfsen.php; location / { allow 192.168.88.0/24; deny all; } location ~* \.(gif|jpg|png)$ { expires 30d; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; } }
Перезапустим NGINX:
nginx -s reload
Заходим на страницу http://nfsen.mydomain.ru браузером, если все сделали верно, то вывод будет похож на мой (раздел Details):
Интерес представляет окно для ввода фильтров (Filter):
К примеру правило — src net 192.168.3.0/24 отфильтрует только обращения из данной сети (у меня на ней живут Wi-Fi пользователи CapsMan), так же фильтры можно сохранять для повторного использования:
Aggregated flows 4724 Top 10 flows ordered by flows: Date first seen Duration Proto Src IP Addr:Port Dst IP Addr:Port Out Pkt In Pkt Out Byte In Byte Flows 2020-06-25 11:12:45.369 16629.730 TCP 192.168.3.30:41887 <-> 107.155.52.117:5222 0 139 0 16309 64 2020-06-25 13:57:57.059 2153.250 TCP 192.168.3.30:60650 <-> 213.180.204.60:443 0 105 0 7086 37 2020-06-25 13:57:42.489 2167.820 TCP 192.168.3.30:58360 <-> 5.255.255.60:443 0 540 0 135310 37 2020-06-25 13:57:57.039 2153.270 TCP 192.168.3.30:54289 <-> 87.250.251.60:443 0 530 0 32709 37 2020-06-25 13:57:45.139 2165.170 TCP 192.168.3.30:36134 <-> 213.180.204.63:443 0 49 0 4357 37 2020-06-25 13:57:59.109 2151.200 TCP 192.168.3.30:39327 <-> 77.88.21.60:443 0 49 0 3744 37 2020-06-25 13:57:59.129 2151.180 TCP 192.168.3.30:39328 <-> 77.88.21.60:443 0 56 0 6568 37 2020-06-25 10:09:09.049 20465.500 UDP 192.168.3.13:138 <-> 192.168.3.255:138 0 75 0 17803 35 2020-06-25 09:54:21.089 6349.450 TCP 192.168.3.15:47477 <-> 64.233.165.188:5228 0 65 0 4340 30 2020-06-25 10:27:52.749 3291.370 TCP 192.168.3.15:42707 <-> 77.88.21.125:993 0 99 0 6957 21 Summary: total flows: 6389, total bytes: 15.5 M, total packets: 179085, avg bps: 5762, avg pps: 8, avg bpp: 86 Time window: 2020-06-25 09:45:00 - 2020-06-25 15:50:58 Total flows processed: 3773370, Blocks skipped: 0, Bytes read: 211320808 Sys: 0.730s flows/second: 5165617.6 Wall: 0.720s flows/second: 5237547.3
Для более детального изучения синтаксиса построения фильтров — рекомендую man nfdump
На этом вроде все:)