Вопрос или проблема
У нас есть LinuxMachine (VoiceBiometrics) и VoiceBot клиента. LinuxMachine нуждается только в трафике SIP/SDP и RTP от VoiceBot. Сетевые инженеры клиента настроили зеркалирование трафика (GRE ERSPAN) на устройстве Cisco от VoiceBot к LinuxMachine. Но приходит не только голосовой трафик, но и весь остальной трафик (весь трафик от бота).
Я пытался разрешить только адреса src/dst на firewalld LinuxMachine, но это не работает. Также я пытался заблокировать GRE и заблокировать всё, но этот вид трафика невозможно заблокировать таким образом?! Возможно, из-за инкапсуляции? Как, например, заблокировать VRRP?
Сожалею о моем английском)
Вы не можете предотвратить поступление трафика на ваш сетевой интерфейс. Вы можете предотвратить ОС от обработки пакетов – это то, что делает firewalld – но ОС не может отказаться от приема их; всё, что отправляется на ваш MAC, будет поступать на ваш сетевой интерфейс, хотите вы этого или нет, и, следовательно, будет видно в Wireshark.
(Кроме того, как ОС вообще узнает, следует ли ей принимать или отклонять пакет, если она еще не получила этот пакет?)
Единственный способ уменьшить входящий трафик в этом случае – отфильтровать его на вышестоящем коммутаторе (например, используя аппаратные ACL коммутатора) – или выбрать лучший способ получения данных. Я не уверен, как точно работает ваша система VoiceBiometrics, но кажется странным, что ей требуется зеркалирование всего трафика.
Также: пакеты ERSPAN (и GRE в общем) являются IP-внутри-IP, и хотя Wireshark показывает вам внутренний IP заголовок, стандартные правила брандмауэра применяются только к внешнему, т.е. ‘src’ всегда будет коммутатором зеркалирования; протокол всегда будет GRE; и так далее. Более точная фильтрация потребует от брандмауэра специальной настройки для просмотра содержимого GRE нагрузки.
Ответ или решение
Как заблокировать трафик GRE ERSPAN на RHEL8
В данном ответе мы рассмотрим проблему блокировки нежелательного трафика GRE ERSPAN на вашей системе RHEL8 (LinuxMachine), которая должна обрабатывать только SIP/SDP и RTP-трафик от VoiceBot. Мы обсудим несколько методов, которые могут помочь в вашей ситуации, а также ограничения каждого из них.
Понимание проблемы
Вы упомянули, что ваш клиентский сетевой инженеры настроили зеркалирование трафика (traffic mirroring) на Cisco-устройстве. Это приводит к тому, что LinuxMachine получает не только необходимый voice-трафик, но и остальную часть трафика, которая проходит через VoiceBot. Это связано с тем, что GRE (Generic Routing Encapsulation) инкапсулирует множество различных типов трафика, включая ненужные данные.
Проблема с фаерволом
Firewalld, который вы использовали для фильтрации, может быть неэффективным для блокации GRE-трафика. Зеркальный трафик GRE инкапсулирует оригинальные пакеты внутри дополнительных IP-заголовков, что затрудняет фильтрацию на основании обычных сетевых правил. Следовательно, обычные правила, основанные на адресе источника или назначения, не будут работать, поскольку фаервол будет видеть только адреса GRE-пакетов (которые, как правило, принадлежат устройству, осуществляющему зеркалирование).
Альтернативные решения
-
Фильтрация на уровне коммутатора:
- Самый надежный способ борьбы с нежелательным трафиком — это фильтрация на уровне коммутатора перед тем, как трафик достигнет вашей LinuxMachine. Вы можете попросить вашего сетевого инженера настроить ACL (Access Control List) на Cisco-устройстве, чтобы ограничить типы трафика, которые зеркалируются на ваш сервер.
-
Использование DPDK или eBPF:
- Для более сложной фильтрации на уровне пакетов вы можете рассмотреть возможность использования DPDK (Data Plane Development Kit) или eBPF (extended Berkeley Packet Filter), которые позволяют выполнять пакетные фильтры с высокой производительностью и могут быть настроены для более детальной фильтрации трафика GRE.
-
Настройка сетевых интерфейсов:
- Некоторые сетевые интерфейсы могут быть настроены для игнорирования определенных типов трафика. Это необходимо обсудить с вашим сетевым администратором, чтобы выяснить возможности вашей сетевой карты и драйверов.
-
Анализ пакетов:
- Чтобы помочь в вашей работе, используйте инструменты анализа пакетов, такие как Wireshark, чтобы понять, какие пакеты проходят через вашу LinuxMachine. Это может помочь вам настроить более точные правила фильтрации.
Блокировка протокола VRRP
Если вы хотите блокировать определённые протоколы, такие как VRRP (Virtual Router Redundancy Protocol), вы можете использовать iptables с установкой правил для блокировки определенного протокола:
# Блокировка VRRP
iptables -A INPUT -p vrrp -j DROP
Однако, необходимо помнить, что GRE пакеты отобразятся как IP внутри IP. Поэтому вы можете посмотреть на старшинство пакетов и соответствующие заголовки.
Заключение
Вашим лучшим вариантом будет фильтрация трафика на уровне коммутатора с помощью ACL или использование более продвинутых средств фильтрации пакетов, таких как DPDK или eBPF, если требуют ваши производственные характеристики. Использование фаервола для блокировки GRE-трафика имеет важные ограничения, которые необходимо учитывать. Если ваши требования к трафику специфичны, возможно, стоит пересмотреть архитектуру сети в целом.