Проверяйте к какому из двух случаев относится ваша установка.
Выполнение действий в этой статье может привести к снижению стабильности работы фильтрации или потере управления сервером.
В случае, если для приёма зеркала необходимо использовать большое число VLAN это может создать дополнительную нагрузку.
Нагрузку можно условно разделить на две части:
- Число правил в firewall, которые проходит пакет
- Обработка VLAN-тегов сетевой картой/сетевым стеком
Если со вторым пунктом мы ничего поделать скорее всего не сможем, то число правил в некоторых случаях можно сократить. Рассмотрим примеры.
Один интерфейс в системе не занимается приёмом зеркала трафика
Входные данные
- eth0 - выход в интернет
- eth1 - сетевая карта на которую приходит тегированое зеркало трафика
- eth1.100
- eth1.101
- eth1.102
- ...
- eth1.129
Решение
Использовать в меню опцию:
Настройки Carbon Reductor -> Настройки алгоритма фильтрации -> Единственный интерфейс на который не приходит зеркало
В ней нужно указать:
eth0
После рестарта в цепочке raw PREROUTING будет 1 правило вместо 30 для каждого VLAN на сетевой карте eth1, которое будет выглядеть следующим образом:
iptables -t raw -I PREROUTING ! -i eth0 -j mirror_traffic
Но эта опция безопасна только в случае, если такой интерфейс один.
Несколько интерфейсов в системе не занимаются приёмом зеркала трафика
Входные данные
Допустим в вашей конфигурации выход в Интернет (default route) отделен от менеджмента и (или) доступа к сети абонентов, неважно с помощью VLAN или физических линков. Для простоты рассмотрим вариант с физическими линками:
- eth0 - выход в Интернет
- eth1 - менеджмент
- eth2 - доступ к сети абонентов
- eth3 - доступ к сети абонентов
- eth4 - приём зеркала трафика
- eth4.100 ... eth4.130 - интерфейсы для захвата тегированного трафика
- eth5 - приём зеркала трафика
- eth5.100 ... eth5.130 - интерфейсы для захвата тегированного трафика
Проблемы, если применять подход выше
Если прописать eth0 в качестве "Единственного интерфейса на который не приходит зеркало", то в цепочку mirror_traffic будет попадать трафик для менеджмента и доступа к сети абонентов. Это может привести к снижению стабильности работы фильтрации, так что так делать не рекомендуется. Но что делать, если нагрузку снизить надо?
Решение
Создаём хук для файрвола, в котором переопределяем функцию raw_links, используя то, что iptables поддерживает ограниченные "маски" в названиях интерфейсов.
touch /app/reductor/cfg/userinfo/hooks/reductor_firewall.sh chmod a+x /app/reductor/cfg/userinfo/hooks/reductor_firewall.sh
и записываем в него:
#!/bin/bash raw_links() { for device in eth4 eth5; do iptables -t raw -A PREROUTING -i "$device.+" -j mirror_traffic done }
Что переопредит функцию в скрипте файрвола и заменит создание 62 правил для каждого из VLAN на два правила вида:
iptables -t raw -A PREROUTING -i eth4.+ -j mirror_traffic iptables -t raw -A PREROUTING -i eth5.+ -j mirror_traffic