Правила ebtables для ввода и вывода, позволяющие только DHCP-пакеты, не работают

Вопрос или проблема

У меня есть топология, как показано ниже:

          ....enp0s9.256...
enp0s9....                 .... br0 (1.1.1.1/24) (dhcp сервер)
          ....enp0s9.257...

enp0s9.256 и enp0s9.257 – это интерфейсы VLAN.

br0 – это мост, осведомленный о VLAN.

root@kmaster:/home/user# bridge vlan show
порт    идентификаторы vlan
enp0s9.256   1 Egress Untagged
     100 PVID

enp0s9.257   1 Egress Untagged
     100 PVID

br100    1 Egress Untagged
     100 PVID Egress Untagged

Ожидается, что только DHCP-трафик должен быть разрешен на enp0s9.256. enp0s9.257 может передавать любой трафик.

Ниже приведены правила, которые я настроил в ebtables:

root@kmaster:/home/user# ebtables -t filter -A OUTPUT -p IPv4 -o enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT 
root@kmaster:/home/user# ebtables -t filter -A OUTPUT -o enp0s9.256 -j DROP
root@kmaster:/home/user# ebtables -t filter -A INPUT -p IPv4 -i enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT 
root@kmaster:/home/user# ebtables -t filter -A INPUT -i enp0s9.256 -j DROP

После начала процесса DORA я вижу, что DHCP-трафик корректно попадает в цепочку INPUT, но не попадает в цепочку OUTPUT для правил DHCP. Он попадает в правило DROP. Может кто-нибудь предложить способ решения этой проблемы?

root@kmaster:/home/user# ebtables -L --Lc
Таблица моста: filter

Цепочка моста: INPUT, записи: 2, политика: ACCEPT
-p IPv4 -i enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT , pcnt = 0 -- bcnt = 0
-i enp0s9.256 -j DROP , pcnt = 0 -- bcnt = 0

Цепочка моста: FORWARD, записи: 0, политика: ACCEPT

Цепочка моста: OUTPUT, записи: 2, политика: ACCEPT
-p IPv4 -o enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT , pcnt = 0 -- bcnt = 0
-o enp0s9.256 -j DROP , pcnt = 0 -- bcnt = 0

Цепочка моста: drop_chain, записи: 0, политика: ACCEPT
root@kmaster:/home/user# ebtables -L --Lc
Таблица моста: filter

Цепочка моста: INPUT, записи: 2, политика: ACCEPT
-p IPv4 -i enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT , pcnt = 2 -- bcnt = 656
-i enp0s9.256 -j DROP , pcnt = 0 -- bcnt = 0

Цепочка моста: FORWARD, записи: 0, политика: ACCEPT

Цепочка моста: OUTPUT, записи: 2, политика: ACCEPT
-p IPv4 -o enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT , pcnt = 0 -- bcnt = 0
-o enp0s9.256 -j DROP , pcnt = 2 -- bcnt = 656

Цепочка моста: drop_chain, записи: 0, политика: ACCEPT

Ответ или решение

Ваша проблема с тем, что правила ebtables для разрешения только DHCP-трафика на интерфейсе enp0s9.256 не работают должным образом, может быть вызвана несколькими причинами. Давайте рассмотрим настройку, которую вы предоставили, и предложим решение.

Анализ текущих правил ebtables

Ваши правила выглядят следующим образом:

# Разрешить DHCP-трафик для исходящих пакетов
ebtables -t filter -A OUTPUT -p IPv4 -o enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT 
# Блокировать все остальные пакеты на enp0s9.256
ebtables -t filter -A OUTPUT -o enp0s9.256 -j DROP

# Разрешить DHCP-трафик для входящих пакетов
ebtables -t filter -A INPUT -p IPv4 -i enp0s9.256 --ip-proto udp --ip-dport 67:68 -j ACCEPT 
# Блокировать все остальные пакеты на enp0s9.256
ebtables -t filter -A INPUT -i enp0s9.256 -j DROP

Причины проблемы

  1. Типы протоколов: У вас указано правило только для IPv4. Если ваши DHCP-пакеты имеют другой тип, например, IPv6, это правило не сработает. Убедитесь, что DHCP-пакеты действительно используют протокол IPv4.

  2. Работа с VLAN: Убедитесь, что вы правильно обрабатываете VLAN интерфейсы. Возможно, у вас есть дополнительные маршруты или правила, которые могут мешать работе.

  3. Трафик, исходящий из других мест: Возможно, DHCP-пакеты выходят на другие интерфейсы или в рамках других сетевых конфигураций, не имеющих отношения к вашему фильтру на enp0s9.256.

Рекомендации по решению

  1. Проверьте типы пакетов: Убедитесь, что ваши пакеты действительно являются UDP и что они используют порты 67 (сервер) и 68 (клиент) для DHCP.

  2. Проверьте настройки VLAN: Убедитесь, что ваше оборудование и софт правильно настроены для обработки VLAN-трафика и что трафик действительно проходит через enp0s9.256.

  3. Обратите внимание на порядок правил: Порядок правил в таблице ebtables важен. Правила работают по порядку, и если пакет не попадает в первый подходящий критерий, он будет обработан согласно следующим правилам. Возможно, вам стоит перепроверить порядок ваших правил.

  4. Логирование трафика: Добавьте правила логирования для диагностики, чтобы увидеть, какие пакеты отбрасываются, и узнать больше о причинах.

    ebtables -t filter -A OUTPUT -o enp0s9.256 -j LOG --log-prefix "Dropped OUTPUT: "
    ebtables -t filter -A INPUT -i enp0s9.256 -j LOG --log-prefix "Dropped INPUT: "
  5. Проверка сетевых интерфейсов: Используйте tcpdump или аналогичные инструменты для мониторинга трафика на enp0s9.256, чтобы убедиться, что DHCP-трафик действительно проходит через этот интерфейс.

Пример пересмотра правил

Если вы хотите разрешить только DHCP-трафик и заблокировать всё остальное, попробуйте более явно указать все возможные UDP-порты DHCP (67 и 68):

# Разрешить все входящие и исходящие DHCP пакеты на enp0s9.256
ebtables -t filter -A INPUT -i enp0s9.256 -p IPv4 --ip-proto udp --ip-dport 67:68 -j ACCEPT 
ebtables -t filter -A OUTPUT -o enp0s9.256 -p IPv4 --ip-proto udp --ip-sport 67:68 -j ACCEPT 

# Блокировка всего остального на enp0s9.256
ebtables -t filter -A INPUT -i enp0s9.256 -j DROP
ebtables -t filter -A OUTPUT -o enp0s9.256 -j DROP

Заключение

После применения указанных изменений и рекомендаций, проверьте, работает ли ваш DORA-процесс. Убедитесь, что все ваши отфильтрованные пакеты правильно соответствуют правилам. Если проблема не решится, возможно, стоит изучить дополнительные сетевые конфигурации, которые могут влиять на работу этих правил.

Оцените материал
Добавить комментарий

Капча загружается...