# Flow Accounting - Учет сетевых потоков

> Настройка и использование Flow Accounting в VyOS для мониторинга сетевого трафика с поддержкой NetFlow v5, v9, IPFIX и sFlow

Source: https://opennix.org/docs/vyos/system/vyos-flow-accounting/


## Введение

Flow Accounting (учет сетевых потоков) - это механизм мониторинга и анализа сетевого трафика, позволяющий собирать статистику о потоках данных, проходящих через маршрутизатор. VyOS поддерживает несколько протоколов экспорта потоков: NetFlow (версии 5, 9, 10), IPFIX и sFlow.

### Основные компоненты

Flow Accounting состоит из трех основных компонентов:

1. **Exporter (Экспортер)** - VyOS-маршрутизатор, который собирает информацию о пакетах и агрегирует их в потоки
2. **Collector (Коллектор)** - сервер, который принимает и сохраняет данные о потоках
3. **Application (Приложение)** - программное обеспечение для анализа и визуализации данных о потоках

### Поддерживаемые протоколы

- **NetFlow v5** - классическая версия, поддерживает только IPv4
- **NetFlow v9** - расширенная версия с поддержкой шаблонов и IPv6
- **NetFlow v10 (IPFIX)** - стандартизированная версия NetFlow, RFC 7011
- **sFlow** - технология семплирования пакетов (не рассматривается в данном документе)

## Базовая конфигурация

### Включение Flow Accounting на интерфейсах

Flow Accounting необходимо явно включить на каждом интерфейсе, где требуется мониторинг трафика:

```bash
set system flow-accounting interface eth0
set system flow-accounting interface eth1
set system flow-accounting interface eth2
```

### Настройка коллектора NetFlow

Минимальная конфигурация для экспорта потоков на коллектор:

```bash
# Настройка коллектора
set system flow-accounting netflow server 192.168.100.50 port 2055

# Выбор версии NetFlow
set system flow-accounting netflow version 9

# Указание исходного адреса для пакетов NetFlow
set system flow-accounting netflow source-address 192.168.0.1
```

## NetFlow версия 5

NetFlow v5 - наиболее широко поддерживаемая версия, но ограничена только IPv4 трафиком.

### Полная конфигурация NetFlow v5

```bash
# Включение интерфейсов
set system flow-accounting interface eth0
set system flow-accounting interface eth1

# Настройка NetFlow v5
set system flow-accounting netflow version 5
set system flow-accounting netflow server 192.168.100.50 port 2055
set system flow-accounting netflow source-address 192.168.0.1

# Настройка Engine ID (идентификатор маршрутизатора)
set system flow-accounting netflow engine-id 1

# Настройка таймаутов
set system flow-accounting netflow timeout expiry-interval 60
set system flow-accounting netflow timeout flow-generic 3600
set system flow-accounting netflow timeout tcp-generic 3600
set system flow-accounting netflow timeout tcp-fin 300
set system flow-accounting netflow timeout tcp-rst 120
set system flow-accounting netflow timeout udp 300

# Ограничение максимального количества отслеживаемых потоков
set system flow-accounting netflow max-flows 10000

# Применение конфигурации
commit
save
```

### Параметры NetFlow v5

- **engine-id** - уникальный идентификатор маршрутизатора (0-255)
- **timeout expiry-interval** - интервал экспорта потоков в секундах (0-2147483647)
- **timeout flow-generic** - таймаут для обычных потоков в секундах
- **timeout tcp-generic** - таймаут для TCP-соединений
- **timeout tcp-fin** - таймаут для TCP-соединений с флагом FIN
- **timeout tcp-rst** - таймаут для TCP-соединений с флагом RST
- **timeout udp** - таймаут для UDP-потоков
- **max-flows** - максимальное количество одновременно отслеживаемых потоков

## NetFlow версия 9

NetFlow v9 поддерживает шаблоны, IPv6 и расширенные метаданные.

### Конфигурация NetFlow v9

```bash
# Включение интерфейсов
set system flow-accounting interface eth0
set system flow-accounting interface eth1
set system flow-accounting interface eth2

# Настройка NetFlow v9
set system flow-accounting netflow version 9
set system flow-accounting netflow server 192.168.100.50 port 2055
set system flow-accounting netflow source-address 192.168.0.1

# Настройка частоты обновления шаблонов
set system flow-accounting netflow timeout template 60

# Настройка таймаутов
set system flow-accounting netflow timeout expiry-interval 60
set system flow-accounting netflow timeout flow-generic 3600

# Применение конфигурации
commit
save
```

### Дополнительные параметры NetFlow v9

- **timeout template** - интервал отправки шаблонов в секундах (1-86400)

## IPFIX (NetFlow v10)

IPFIX - это стандартизированная версия NetFlow, определенная в RFC 7011. Является рекомендуемой версией для новых развертываний.

### Конфигурация IPFIX

```bash
# Включение интерфейсов
set system flow-accounting interface eth0
set system flow-accounting interface eth1

# Настройка IPFIX (NetFlow v10)
set system flow-accounting netflow version 10
set system flow-accounting netflow server 192.168.100.50 port 4739
set system flow-accounting netflow source-address 192.168.0.1

# Настройка таймаутов
set system flow-accounting netflow timeout expiry-interval 60
set system flow-accounting netflow timeout flow-generic 3600
set system flow-accounting netflow timeout tcp-generic 3600
set system flow-accounting netflow timeout tcp-fin 300
set system flow-accounting netflow timeout tcp-rst 120
set system flow-accounting netflow timeout udp 300

# Применение конфигурации
commit
save
```

### Стандартные порты

- NetFlow v5/v9: обычно используется порт **2055** (UDP)
- IPFIX: стандартный порт **4739** (UDP)

## Sampling Rate (Частота семплирования)

Семплирование позволяет снизить нагрузку на маршрутизатор, анализируя только каждый N-й пакет.

### Настройка семплирования

```bash
# Анализировать каждый 100-й пакет
set system flow-accounting netflow sampling-rate 100

# Анализировать каждый 1000-й пакет (для высоконагруженных сетей)
set system flow-accounting netflow sampling-rate 1000

# Анализировать каждый 10-й пакет (для малых сетей)
set system flow-accounting netflow sampling-rate 10
```

### Рекомендации по семплированию

| Нагрузка сети | Рекомендуемый sampling-rate | Точность |
|---------------|----------------------------|----------|
| < 100 Mbps | 10-50 | Высокая |
| 100-500 Mbps | 100-200 | Средняя |
| 500 Mbps - 1 Gbps | 500-1000 | Базовая |
| > 1 Gbps | 1000-5000 | Обзорная |

**Важно**: Без семплирования (sampling-rate 1) каждый пакет анализируется, что может привести к высокой нагрузке на CPU при большом объеме трафика.

## Настройка нескольких коллекторов

VyOS поддерживает экспорт потоков на несколько коллекторов одновременно для обеспечения отказоустойчивости.

### Конфигурация с несколькими коллекторами

```bash
# Основной коллектор
set system flow-accounting netflow server 192.168.100.50 port 2055

# Резервный коллектор
set system flow-accounting netflow server 192.168.100.51 port 2055

# Коллектор в другом дата-центре
set system flow-accounting netflow server 10.200.50.10 port 2055

commit
save
```

## Aggregation (Агрегация)

Агрегация позволяет объединять потоки по определенным критериям для уменьшения объема экспортируемых данных.

### Настройка агрегации

```bash
# Агрегация по исходному AS (Autonomous System)
set system flow-accounting netflow aggregation source-as

# Агрегация по целевому AS
set system flow-accounting netflow aggregation destination-as

# Агрегация по префиксам источника
set system flow-accounting netflow aggregation source-prefix

# Агрегация по префиксам назначения
set system flow-accounting netflow aggregation destination-prefix

# Агрегация по портам протоколов
set system flow-accounting netflow aggregation protocol-port

commit
save
```

### Типы агрегации

- **source-as** - группировка по исходной автономной системе
- **destination-as** - группировка по целевой автономной системе
- **source-prefix** - группировка по префиксу источника
- **destination-prefix** - группировка по префиксу назначения
- **protocol-port** - группировка по протоколу и порту

## In-Memory Flow Table (не рекомендуется для продакшена)

VyOS может сохранять потоки в таблице в памяти для локального просмотра.

### Настройка локальной таблицы

```bash
# ВНИМАНИЕ: Не рекомендуется для продакшена!
set system flow-accounting buffer-size 10485760  # 10 MB

commit
save
```

**Предупреждение**: Использование локальной таблицы потоков может привести к:
- Повышенной нагрузке на CPU
- Нестабильной работе маршрутизатора
- Переполнению памяти при высокой нагрузке

Рекомендуется использовать внешние коллекторы вместо локальной таблицы.

## Пример для Yandex Cloud

### Экспорт NetFlow в систему мониторинга Yandex Cloud

```bash
# Конфигурация VyOS в Yandex Cloud
configure

# Включение Flow Accounting на внешнем и внутреннем интерфейсах
set system flow-accounting interface eth0  # Внешний интерфейс
set system flow-accounting interface eth1  # Внутренний интерфейс (подсети в VPC)

# Настройка IPFIX для экспорта в коллектор в Yandex Cloud
set system flow-accounting netflow version 10
set system flow-accounting netflow server 10.128.0.50 port 4739
set system flow-accounting netflow source-address 10.128.0.1

# Семплирование для оптимизации нагрузки
set system flow-accounting netflow sampling-rate 200

# Настройка таймаутов
set system flow-accounting netflow timeout expiry-interval 60
set system flow-accounting netflow timeout flow-generic 3600
set system flow-accounting netflow timeout tcp-generic 3600
set system flow-accounting netflow timeout tcp-fin 300
set system flow-accounting netflow timeout tcp-rst 120
set system flow-accounting netflow timeout udp 300

# Ограничение количества потоков
set system flow-accounting netflow max-flows 50000

# Резервный коллектор в другой зоне доступности
set system flow-accounting netflow server 10.129.0.50 port 4739

commit
save
exit
```

### Интеграция с Yandex Monitoring

Для интеграции с Yandex Monitoring можно использовать следующие коллекторы:

- **ntopng** - развернутый на VM в Yandex Compute Cloud
- **ElastiFlow** - на базе Elasticsearch в Yandex Managed Service for Elasticsearch
- **Grafana + ClickHouse** - для долгосрочного хранения и анализа

Пример установки ntopng на Ubuntu в Yandex Cloud:

```bash
# На коллекторе в Yandex Cloud
sudo apt-get update
sudo apt-get install software-properties-common wget
sudo add-apt-repository universe

wget https://packages.ntop.org/apt/ntop.key
sudo apt-key add ntop.key

echo "deb https://packages.ntop.org/apt/stable/ $(lsb_release -cs) main" | \
  sudo tee /etc/apt/sources.list.d/ntop-stable.list

sudo apt-get update
sudo apt-get install ntopng nprobe

# Настройка nProbe для приема NetFlow/IPFIX
sudo nano /etc/nprobe/nprobe.conf
```

Конфигурация nProbe:

```
--zmq=tcp://127.0.0.1:5556
--collector-port=4739
--collector-protocol=ipfix
-i=none
```

Конфигурация ntopng:

```
--zmq=tcp://127.0.0.1:5556
-i=tcp://127.0.0.1:5556
```

## Пример для VK Cloud

### IPFIX для анализа трафика в VK Cloud

```bash
# Конфигурация VyOS в VK Cloud
configure

# Включение Flow Accounting на всех активных интерфейсах
set system flow-accounting interface eth0  # Внешний интерфейс (ext-net)
set system flow-accounting interface eth1  # Внутренний интерфейс (private network)
set system flow-accounting interface eth2  # DMZ интерфейс

# Настройка IPFIX
set system flow-accounting netflow version 10
set system flow-accounting netflow server 10.0.10.100 port 4739
set system flow-accounting netflow source-address 10.0.10.1

# Умеренное семплирование для баланса точности и производительности
set system flow-accounting netflow sampling-rate 100

# Настройка Engine ID (уникальный ID маршрутизатора)
set system flow-accounting netflow engine-id 10

# Таймауты для различных типов потоков
set system flow-accounting netflow timeout expiry-interval 60
set system flow-accounting netflow timeout flow-generic 3600
set system flow-accounting netflow timeout tcp-generic 3600
set system flow-accounting netflow timeout tcp-fin 300
set system flow-accounting netflow timeout tcp-rst 120
set system flow-accounting netflow timeout udp 300
set system flow-accounting netflow timeout icmp 300

# Максимальное количество отслеживаемых потоков
set system flow-accounting netflow max-flows 100000

# Агрегация по протоколам и портам для упрощения анализа
set system flow-accounting netflow aggregation protocol-port

# Резервный коллектор
set system flow-accounting netflow server 10.0.20.100 port 4739

commit
save
exit
```

### Использование ElastiFlow в VK Cloud

ElastiFlow - популярное решение для анализа NetFlow/IPFIX на базе Elastic Stack.

Установка ElastiFlow на VM в VK Cloud:

```bash
# Установка Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# Создание docker-compose.yml для ElastiFlow
mkdir elastiflow && cd elastiflow
nano docker-compose.yml
```

Пример docker-compose.yml:

```yaml
version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - "ES_JAVA_OPTS=-Xms2g -Xmx2g"
    ports:
      - "9200:9200"
    volumes:
      - esdata:/usr/share/elasticsearch/data

  kibana:
    image: docker.elastic.co/kibana/kibana:7.17.0
    container_name: kibana
    ports:
      - "5601:5601"
    environment:
      ELASTICSEARCH_HOSTS: http://elasticsearch:9200

  elastiflow:
    image: robcowart/elastiflow-logstash-oss:4.0.1
    container_name: elastiflow
    network_mode: host
    environment:
      - ELASTIFLOW_ES_HOST=127.0.0.1:9200
      - ELASTIFLOW_NETFLOW_IPV4_PORT=2055
      - ELASTIFLOW_SFLOW_IPV4_PORT=6343
      - ELASTIFLOW_IPFIX_TCP_IPV4_PORT=4739

volumes:
  esdata:
```

Запуск ElastiFlow:

```bash
sudo docker-compose up -d
```

После запуска Kibana будет доступна по адресу: `http://<VM_IP>:5601`

## Мультиинтерфейсная конфигурация

### Селективный мониторинг интерфейсов

```bash
configure

# Мониторинг только внешних интерфейсов
set system flow-accounting interface eth0  # WAN1
set system flow-accounting interface eth1  # WAN2

# Исключаем внутренние интерфейсы для снижения нагрузки
# set system flow-accounting interface eth2  # LAN - не мониторим

# Настройка NetFlow v9
set system flow-accounting netflow version 9
set system flow-accounting netflow server 192.168.100.50 port 2055
set system flow-accounting netflow source-address 192.168.0.1
set system flow-accounting netflow sampling-rate 500

commit
save
exit
```

## Расширенная конфигурация с фильтрацией

### Настройка для мониторинга только критичных потоков

```bash
configure

# Включение на всех интерфейсах
set system flow-accounting interface eth0
set system flow-accounting interface eth1
set system flow-accounting interface eth2

# Настройка IPFIX с агрессивным семплированием
set system flow-accounting netflow version 10
set system flow-accounting netflow server 192.168.100.50 port 4739
set system flow-accounting netflow server 192.168.100.51 port 4739  # Резервный
set system flow-accounting netflow source-address 192.168.0.1
set system flow-accounting netflow sampling-rate 1000  # Каждый 1000-й пакет

# Короткие таймауты для быстрого обновления
set system flow-accounting netflow timeout expiry-interval 30
set system flow-accounting netflow timeout flow-generic 1800
set system flow-accounting netflow timeout tcp-generic 1800
set system flow-accounting netflow timeout tcp-fin 120
set system flow-accounting netflow timeout tcp-rst 60
set system flow-accounting netflow timeout udp 120
set system flow-accounting netflow timeout icmp 120

# Большое количество потоков для высоконагруженных сетей
set system flow-accounting netflow max-flows 500000

# Агрегация для уменьшения объема данных
set system flow-accounting netflow aggregation protocol-port
set system flow-accounting netflow aggregation destination-prefix

commit
save
exit
```

## Проверка конфигурации

### Просмотр текущей конфигурации

```bash
# Показать всю конфигурацию Flow Accounting
show configuration system flow-accounting

# Показать только настройки NetFlow
show configuration system flow-accounting netflow
```

Пример вывода:

```
flow-accounting {
    interface eth0
    interface eth1
    netflow {
        engine-id 1
        max-flows 10000
        sampling-rate 100
        server 192.168.100.50 {
            port 2055
        }
        source-address 192.168.0.1
        timeout {
            expiry-interval 60
            flow-generic 3600
            tcp-fin 300
            tcp-generic 3600
            tcp-rst 120
            udp 300
        }
        version 9
    }
}
```

## Операционные команды

### Просмотр статистики потоков

```bash
# Показать потоки на интерфейсе eth0
show flow-accounting interface eth0

# Показать потоки на интерфейсе eth1
show flow-accounting interface eth1

# Показать потоки для конкретного хоста
show flow-accounting interface eth0 host 192.168.1.100

# Показать топ 20 потоков по объему трафика
show flow-accounting interface eth0 | head -20
```

Пример вывода `show flow-accounting interface eth0`:

```
flow-accounting for interface eth0

Src IP Addr:Port    Dst IP Addr:Port    Proto    Packets    Bytes
192.168.1.10:443    8.8.8.8:53         UDP      1234       567890
192.168.1.20:80     1.1.1.1:443        TCP      5678       2345678
192.168.1.30:22     10.0.0.50:54321    TCP      910        123456
```

### Фильтрация вывода

```bash
# Показать только TCP потоки
show flow-accounting interface eth0 | grep TCP

# Показать только потоки от конкретной подсети
show flow-accounting interface eth0 | grep "192.168.1."

# Показать потоки на порт 443 (HTTPS)
show flow-accounting interface eth0 | grep ":443"

# Показать топ 10 потоков и отсортировать по байтам
show flow-accounting interface eth0 | sort -k5 -n -r | head -10
```

## Мониторинг экспорта NetFlow

### Проверка отправки пакетов NetFlow

```bash
# Проверка активных соединений с коллектором (на VyOS)
sudo netstat -anu | grep 2055

# Проверка с помощью tcpdump
sudo tcpdump -i any port 2055 -n

# Проверка UDP трафика к коллектору
sudo tcpdump -i any host 192.168.100.50 and port 2055 -vv
```

### Проверка на стороне коллектора

```bash
# На коллекторе: прослушивание NetFlow пакетов
sudo tcpdump -i eth0 port 2055 -n -vv

# Проверка открытого порта на коллекторе
sudo netstat -anu | grep 2055
sudo ss -anu | grep 2055
```

## Отладка проблем

### Включение отладочного режима

```bash
# Проверка логов системы
show log | grep flow

# Мониторинг системных ресурсов
show system resource

# Проверка загрузки CPU
top
```

### Проверка доступности коллектора

```bash
# Ping до коллектора
ping 192.168.100.50

# Проверка маршрута
traceroute 192.168.100.50

# Проверка UDP связности (требует nc/netcat)
nc -u 192.168.100.50 2055
```

### Типичные проблемы и решения

#### 1. NetFlow пакеты не достигают коллектора

**Симптомы**:
- Коллектор не получает данные
- tcpdump на VyOS показывает исходящие пакеты, но коллектор их не видит

**Решения**:

```bash
# Проверить, что source-address корректный
show configuration system flow-accounting netflow source-address

# Проверить правила firewall
show firewall

# Убедиться, что исходящий трафик не блокируется
set firewall name WAN_LOCAL rule 100 action accept
set firewall name WAN_LOCAL rule 100 destination port 2055
set firewall name WAN_LOCAL rule 100 protocol udp
commit
save
```

#### 2. Высокая нагрузка CPU

**Симптомы**:
- CPU использование > 80%
- Задержки в обработке пакетов

**Решения**:

```bash
# Увеличить sampling-rate
set system flow-accounting netflow sampling-rate 1000  # Было 100
commit

# Уменьшить max-flows
set system flow-accounting netflow max-flows 10000  # Было 100000
commit

# Отключить Flow Accounting на неважных интерфейсах
delete system flow-accounting interface eth2
commit
save
```

#### 3. Переполнение таблицы потоков

**Симптомы**:
- Потоки отбрасываются
- Неполные данные на коллекторе

**Решения**:

```bash
# Увеличить max-flows
set system flow-accounting netflow max-flows 200000
commit

# Уменьшить таймауты для более быстрого освобождения
set system flow-accounting netflow timeout flow-generic 1800  # Было 3600
set system flow-accounting netflow timeout tcp-generic 1800
commit
save
```

#### 4. Несовместимость версий NetFlow

**Симптомы**:
- Коллектор не распознает формат
- Ошибки парсинга на коллекторе

**Решения**:

```bash
# Попробовать другую версию NetFlow
delete system flow-accounting netflow version
set system flow-accounting netflow version 5  # Самая совместимая
commit

# Или использовать IPFIX (v10)
set system flow-accounting netflow version 10
commit
save
```

#### 5. Проблемы с агрегацией

**Симптомы**:
- Слишком много или слишком мало потоков
- Потеря детализации

**Решения**:

```bash
# Отключить агрегацию для полной детализации
delete system flow-accounting netflow aggregation
commit

# Или использовать селективную агрегацию
delete system flow-accounting netflow aggregation
set system flow-accounting netflow aggregation protocol-port
commit
save
```

## Best Practices (Лучшие практики)

### 1. Выбор версии NetFlow

- **NetFlow v5**: Используйте для максимальной совместимости, только IPv4
- **NetFlow v9**: Используйте для поддержки IPv6 и расширенных метаданных
- **IPFIX (v10)**: Рекомендуется для новых развертываний, стандартизирован

### 2. Семплирование

Рекомендации по настройке sampling-rate:

```bash
# Для офисных сетей (< 100 Mbps)
set system flow-accounting netflow sampling-rate 10

# Для корпоративных сетей (100-500 Mbps)
set system flow-accounting netflow sampling-rate 100

# Для высоконагруженных сетей (500 Mbps - 1 Gbps)
set system flow-accounting netflow sampling-rate 500

# Для очень высоких нагрузок (> 1 Gbps)
set system flow-accounting netflow sampling-rate 1000
```

**Важно**: Чем выше sampling-rate, тем меньше нагрузка на CPU, но ниже точность подсчета объемов трафика.

### 3. Оптимизация таймаутов

```bash
# Для динамичных сетей (много коротких соединений)
set system flow-accounting netflow timeout expiry-interval 30
set system flow-accounting netflow timeout tcp-fin 120
set system flow-accounting netflow timeout tcp-rst 60
set system flow-accounting netflow timeout udp 120

# Для стабильных сетей (долгоживущие соединения)
set system flow-accounting netflow timeout expiry-interval 60
set system flow-accounting netflow timeout tcp-fin 300
set system flow-accounting netflow timeout tcp-rst 120
set system flow-accounting netflow timeout udp 300
```

### 4. Резервирование коллекторов

Всегда настраивайте минимум 2 коллектора:

```bash
# Основной коллектор
set system flow-accounting netflow server 192.168.100.50 port 2055

# Резервный коллектор (в другом сегменте сети)
set system flow-accounting netflow server 192.168.200.50 port 2055
```

### 5. Сегментация мониторинга

Мониторьте только критичные интерфейсы:

```bash
# Мониторим внешние интерфейсы (интернет)
set system flow-accounting interface eth0  # WAN1
set system flow-accounting interface eth1  # WAN2

# НЕ мониторим внутренние интерфейсы для экономии ресурсов
# Исключение: интерфейсы с критичным трафиком или для расследования инцидентов
```

### 6. Ограничение max-flows

Выбирайте разумное значение max-flows:

```bash
# Для малых сетей (< 50 пользователей)
set system flow-accounting netflow max-flows 10000

# Для средних сетей (50-200 пользователей)
set system flow-accounting netflow max-flows 50000

# Для крупных сетей (> 200 пользователей)
set system flow-accounting netflow max-flows 200000
```

### 7. Использование source-address

Всегда явно указывайте source-address:

```bash
# Используйте адрес интерфейса управления или loopback
set system flow-accounting netflow source-address 192.168.0.1

# Это помогает идентифицировать источник на коллекторе
# Особенно важно при использовании нескольких VyOS-маршрутизаторов
```

### 8. Мониторинг производительности

Регулярно проверяйте нагрузку:

```bash
# Проверка CPU
show system resource

# Проверка количества активных потоков
show flow-accounting interface eth0 | wc -l

# Если CPU > 70%, увеличьте sampling-rate или уменьшите max-flows
```

### 9. Документирование конфигурации

Используйте комментарии для документирования:

```bash
# ПРИМЕЧАНИЕ: VyOS не поддерживает комментарии в конфигурации напрямую
# Документируйте конфигурацию в отдельном файле или системе управления конфигурациями

# Пример документации:
# eth0 - WAN1 (провайдер Ростелеком, 500 Mbps)
# eth1 - WAN2 (провайдер МТС, 300 Mbps)
# Коллектор 192.168.100.50 - основной (ntopng)
# Коллектор 192.168.200.50 - резервный (ElastiFlow)
```

### 10. Безопасность

Защитите трафик NetFlow:

```bash
# Настройте firewall для ограничения доступа к коллекторам
set firewall name LAN_OUT rule 100 action accept
set firewall name LAN_OUT rule 100 destination address 192.168.100.50
set firewall name LAN_OUT rule 100 destination port 2055
set firewall name LAN_OUT rule 100 protocol udp
set firewall name LAN_OUT rule 100 source address 192.168.0.1

# Рассмотрите использование VPN для защиты NetFlow трафика
# особенно при отправке через недоверенные сети
```

## Интеграция с популярными коллекторами

### ntopng

ntopng - популярное решение с web-интерфейсом для анализа NetFlow/IPFIX.

Конфигурация VyOS для ntopng:

```bash
configure

set system flow-accounting interface eth0
set system flow-accounting interface eth1
set system flow-accounting netflow version 9
set system flow-accounting netflow server 192.168.100.50 port 2055
set system flow-accounting netflow source-address 192.168.0.1
set system flow-accounting netflow sampling-rate 100

commit
save
exit
```

### nfsen/nfdump

nfsen/nfdump - классическое решение для хранения и анализа NetFlow.

Конфигурация VyOS для nfsen:

```bash
configure

set system flow-accounting interface eth0
set system flow-accounting netflow version 5  # nfsen отлично работает с v5
set system flow-accounting netflow server 192.168.100.50 port 9995
set system flow-accounting netflow source-address 192.168.0.1
set system flow-accounting netflow engine-id 1
set system flow-accounting netflow sampling-rate 100

commit
save
exit
```

### ElastiFlow

ElastiFlow - современное решение на базе Elastic Stack.

Конфигурация VyOS для ElastiFlow:

```bash
configure

set system flow-accounting interface eth0
set system flow-accounting interface eth1
set system flow-accounting netflow version 10  # IPFIX
set system flow-accounting netflow server 192.168.100.50 port 4739
set system flow-accounting netflow source-address 192.168.0.1
set system flow-accounting netflow sampling-rate 200
set system flow-accounting netflow timeout expiry-interval 60

commit
save
exit
```

### Grafana + InfluxDB

Для интеграции с InfluxDB потребуется промежуточный конвертер (например, telegraf с плагином netflow).

Конфигурация VyOS:

```bash
configure

set system flow-accounting interface eth0
set system flow-accounting netflow version 9
set system flow-accounting netflow server 192.168.100.50 port 6343
set system flow-accounting netflow source-address 192.168.0.1
set system flow-accounting netflow sampling-rate 100

commit
save
exit
```

Конфигурация Telegraf на сервере:

```toml
[[inputs.netflow]]
  service_address = "udp://:6343"
  protocol = "netflow v9"

[[outputs.influxdb]]
  urls = ["http://localhost:8086"]
  database = "netflow"
```

## Полный пример enterprise-конфигурации

```bash
configure

# Описание: Enterprise конфигурация для мониторинга трафика
# Сеть: 1 Gbps интернет канал, 500 пользователей
# Коллекторы: ntopng (основной), ElastiFlow (долгосрочное хранение)

# Интерфейсы для мониторинга
set system flow-accounting interface eth0  # WAN (интернет)
set system flow-accounting interface eth1  # LAN (корпоративная сеть)
set system flow-accounting interface eth2  # DMZ (серверы)

# Основные настройки NetFlow
set system flow-accounting netflow version 10  # IPFIX для современных коллекторов
set system flow-accounting netflow source-address 10.0.0.1
set system flow-accounting netflow engine-id 1

# Коллекторы
set system flow-accounting netflow server 10.100.50.10 port 2055  # ntopng (основной)
set system flow-accounting netflow server 10.100.50.20 port 4739  # ElastiFlow (резервный)
set system flow-accounting netflow server 10.200.50.10 port 2055  # Удаленный ЦОД

# Семплирование для баланса точности и производительности
set system flow-accounting netflow sampling-rate 500  # Каждый 500-й пакет

# Таймауты оптимизированы для корпоративной сети
set system flow-accounting netflow timeout expiry-interval 60
set system flow-accounting netflow timeout flow-generic 3600  # 1 час
set system flow-accounting netflow timeout tcp-generic 3600
set system flow-accounting netflow timeout tcp-fin 300  # 5 минут
set system flow-accounting netflow timeout tcp-rst 120  # 2 минуты
set system flow-accounting netflow timeout udp 300  # 5 минут
set system flow-accounting netflow timeout icmp 120

# Ограничение потоков для предотвращения перегрузки
set system flow-accounting netflow max-flows 100000

# Агрегация для уменьшения объема данных при сохранении детализации
set system flow-accounting netflow aggregation protocol-port

commit
save
exit
```

## Сценарии использования

### 1. Анализ использования полосы пропускания

```bash
# Настроить NetFlow для точного учета
configure
set system flow-accounting interface eth0
set system flow-accounting netflow version 9
set system flow-accounting netflow server 192.168.100.50 port 2055
set system flow-accounting netflow source-address 192.168.0.1
set system flow-accounting netflow sampling-rate 10  # Высокая точность
commit
save
exit

# Анализ на коллекторе покажет:
# - Топ пользователей по объему трафика
# - Топ приложений/протоколов
# - Распределение трафика по времени суток
```

### 2. Обнаружение аномалий и атак

```bash
# Настроить чувствительный мониторинг
configure
set system flow-accounting interface eth0  # Внешний интерфейс
set system flow-accounting netflow version 10
set system flow-accounting netflow server 192.168.100.50 port 4739
set system flow-accounting netflow source-address 192.168.0.1
set system flow-accounting netflow sampling-rate 100
set system flow-accounting netflow timeout expiry-interval 30  # Быстрое обновление
commit
save
exit

# Коллектор (ElastiFlow/ntopng) поможет обнаружить:
# - DDoS атаки (аномальное количество пакетов)
# - Сканирование портов (множество соединений на разные порты)
# - Утечки данных (большие объемы исходящего трафика)
```

### 3. Соответствие требованиям регуляторов (compliance)

```bash
# Настроить долгосрочное хранение метаданных
configure
set system flow-accounting interface eth0
set system flow-accounting interface eth1
set system flow-accounting netflow version 10
set system flow-accounting netflow server 192.168.100.50 port 4739  # ElastiFlow
set system flow-accounting netflow source-address 192.168.0.1
set system flow-accounting netflow sampling-rate 200
commit
save
exit

# На стороне коллектора (ElastiFlow):
# - Настроить хранение данных на 1+ год
# - Реализовать ролевой доступ к данным
# - Настроить аудит доступа к логам
```

### 4. Оптимизация сетевой инфраструктуры

```bash
# Собрать статистику для анализа
configure
set system flow-accounting interface eth0
set system flow-accounting interface eth1
set system flow-accounting interface eth2
set system flow-accounting netflow version 9
set system flow-accounting netflow server 192.168.100.50 port 2055
set system flow-accounting netflow source-address 192.168.0.1
set system flow-accounting netflow sampling-rate 100
commit
save
exit

# Анализ покажет:
# - Неэффективные маршруты
# - Узкие места (bottlenecks)
# - Кандидаты на QoS политики
# - Недоиспользуемые каналы
```

## Заключение

Flow Accounting в VyOS - мощный инструмент для мониторинга, анализа и оптимизации сетевого трафика. Правильная настройка позволяет:

1. **Мониторинг производительности**: Отслеживание использования полосы пропускания и выявление узких мест
2. **Безопасность**: Обнаружение аномалий, атак и несанкционированной активности
3. **Планирование**: Прогнозирование роста трафика и планирование расширения
4. **Compliance**: Соответствие требованиям регуляторов по хранению метаданных
5. **Оптимизация**: Выявление неэффективных потоков и оптимизация маршрутизации

### Ключевые рекомендации

- Используйте IPFIX (NetFlow v10) для новых развертываний
- Настраивайте минимум 2 коллектора для отказоустойчивости
- Выбирайте sampling-rate в зависимости от нагрузки сети
- Мониторьте нагрузку CPU и корректируйте параметры при необходимости
- Регулярно проверяйте доставку потоков на коллекторы
- Документируйте конфигурацию и изменения

### Полезные ссылки

- VyOS Flow Accounting: https://docs.vyos.io/en/latest/configuration/system/flow-accounting.html
- RFC 3954 - Cisco Systems NetFlow v9: https://www.rfc-editor.org/rfc/rfc3954
- RFC 7011 - IPFIX Protocol Specification: https://www.rfc-editor.org/rfc/rfc7011.html
- ntopng Documentation: https://www.ntop.org/guides/ntopng/
- ElastiFlow Documentation: https://github.com/robcowart/elastiflow

---

**Примечание**: Данная документация актуальна для VyOS 1.4 (Sagitta) и VyOS 1.5 (Circinus). Функциональность Flow Accounting стабильна между версиями.

