У меня есть компьютер (на котором установлена Fedora 20), который используется как «программный переключатель» для управления сетевым подключением некоторых внешних устройств. Таких устройств восемь; ПК имеет две 4-портовые карты Ethernet в дополнение к собственному Ethernet-соединению с внешним миром. По умолчанию восемь интерфейсов устройства перенаправляются на внешний интерфейс без фильтрации.
Желаемая функциональность - это возможность блокировать весь трафик к данному устройству и от него. В настоящее время мы делаем это, используя bridge link set dev <device> state 0
, который устанавливает состояние моста устройства как «отключено». Однако, похоже, это также блокирует трафик DHCP с устройства. Сетевой DHCP-сервер доступен через внешний интерфейс, поэтому кажется, что мост блокирует этот трафик, а это означает, что если устройство пытается обновить свой IP-адрес, это не удается; это проблематично с точки зрения тестов, которые я пытаюсь выполнить на устройстве.
Я бы хотел заблокировать весь трафик кроме DHCP через мост для данного устройства. Похоже, что bridge
команда не может этого сделать, поэтому я, вероятно, захочу оставить состояние моста как «пересылка» навсегда. Проведя небольшое исследование, кажется, что ebtables
это инструмент, который мне нужен, но для его настройки, похоже, требуется больше знаний о DHCP и сети, чем у меня! Из прочтения нескольких ebtables
руководств, я думаю, мне нужно разрешить трафик на портах 67 и 68 (я считаю, что это единственные порты, используемые для DHCP?) и заблокировать весь другой трафик.
Итак, мои вопросы:
ebtables
делать что хочу?ebtables
лучший инструмент для работы и / или есть ли поверх него какие-либо слои абстракции, которые упростили бы настройку? (Я думал о ferm
для iptables
.)ebtables
заблокировать весь трафик бар DHCP?Да, вам нужны ebtables для применения правил netfilter на мосту.
Правило соответствия ip
с параметрами --ip-source-port
и --ip-destination-port
.
Вы должны настроить ebtables, чтобы разрешить нужный вам трафик, а затем явное отключение для любого другого трафика.
Порт клиента DHCP - UDP 68, порт сервера DHCP - UDP 67.
Я считаю, что правильный синтаксис и порядок команд будут следующими:
ebtables -I INPUT -i eth0 -o eth0 -p ip -j DROP
ebtables -I INPUT -i eth0 -o eth0 -p ip --ip-protocol udp --ip-source-port 67 -j ACCEPT
ebtables -I INPUT -i eth0 -o eth0 -p ip --ip-protocol udp --ip-source-port 68 -j ACCEPT
ebtables -I INPUT -i eth0 -o eth0 -p ip --ip-protocol udp --ip-destination-port 67 -j ACCEPT
ebtables -I INPUT -i eth0 -o eth0 -p ip --ip-protocol udp --ip-destination-port 68 -j ACCEPT
ebtables-save