Як я можу заблокувати весь трафік до / з мостового інтерфейсу, дозволяючи DHCP?


3

У мене є ПК (на базі Fedora 20), який використовується як "програмний перемикач" для управління мережевою підключеністю деяких зовнішніх пристроїв. Є вісім таких пристроїв; ПК має дві 4-портові Ethernet-карти на додаток до власного підключення Ethernet до зовнішнього світу. За замовчуванням вісім інтерфейсів пристрою передаються на зовнішній інтерфейс без фільтрації.

Бажана функціональність - це можливість блокувати весь трафік на певний пристрій і з нього. В даний час ми це робимо за допомогою bridge link set dev <device> state 0, яка встановлює стан моста пристрою на "відключений". Однак, схоже, це також блокує трафік DHCP з пристрою. Сервер DHCP мережі доступний через зовнішній інтерфейс, тому здається, що міст блокує цей трафік, тобто, якщо пристрій намагається відновити IP-адресу, це не вдасться; це проблематично з точки зору тестів, які я намагаюся виконати на пристрої.

Що я хотів би зробити, це блокувати весь трафік, крім DHCP через міст, для даного пристрою. Здається, що bridgeкоманда не може цього зробити, тому, ймовірно, я б хотів залишити стан мосту назавжди "переадресацією". Провівши деякі дослідження, ebtablesмені здається, це інструмент, який мені потрібен, але для його налаштування, здається, потрібно більше знань DHCP та мереж, ніж у мене! Прочитавши кілька ebtablesнавчальних посібників, я думаю, що мені потрібно дозволити трафік через порти 67 та 68 (я вважаю, що це єдині порти, які використовуються для DHCP?) Та блокувати весь інший трафік.

Тому мої запитання:

  1. Чи можна налаштувати ebtablesробити те, що я хочу?
  2. Є ebtablesнайкращим інструментом для роботи та / або є якісь шари абстрагування поверх нього, які полегшили б налаштування? (Я маю в виду fermдля iptables.)
  3. Якщо припустити, що я рухаюсь у правильному напрямку, як я можу налаштувати ebtablesблокувати весь трафік DHCP?

Не ціла відповідь, але ця публікація може бути доречною.
Здійснює

Дякую @Reaces, але саме це питання підштовхнуло мене до публікації! Сказавши це, перечитавши, я змусив мене помітити, що, iptablesмабуть, не можна блокувати трафік DHCP, тому, можливо, моє рішення полягає в блокуванні "всього" (тобто всього бару DHCP) трафіку, використовуючи iptables- я розберуся в цьому.
Аллан Льюїс

1
iptablesне може блокувати DHCP-сервер, сформований на тому ж хості , але якщо ви налаштували свій Linux-скриньку як маршрутизатор, він може блокувати пакети DHCP. Це означає, що оскільки ваш вікно Linux працює як пристрій рівня 2, ebtablesваш друг. ( iptablesє для рівня 3 і вище).
pepoluan

@pepoluan правильний. iptablesє інтерфейсом netfilter Layer 3/4. ebtablesє інтерфейсом netfilter рівня 2.
suprjami

@AllanLewis, будь-яка причина використовувати поле Linux як містку замість шлюзу / маршрутизатора ? Налаштувати це буде набагато простіше.
pepoluan

Відповіді:


5

Так, для застосування правил netfilter на мосту вам потрібні ebtables.

Правило відповідності 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

Дякую @suprjami - я думаю, мої правила були б ebtables --ip-source-port 67:68 --ip-destination-port 67:68 -j ACCEPTі ebtables -j DROP? (Вибачте за багато редагувань - я не розумів, що ви не можете робити кодові блоки в коментарях!)
Аллан Льюїс

Я відредагував свою відповідь, щоб включити повні команди. Ви можете комбінувати порти так, як ви робили 67:68, хороша ідея.
suprjami

1
Потрібно, принаймні, також вказати конкретний інтерфейс, для якого ви хочете знизити трафік. І ви хочете скинути весь трафік, не тільки UDP, за винятком тих udp-пакетів, які ви хочете пропустити.
Кай Петцке

Відмінно, велике спасибі за вашу редагування на відповідь!
suprjami
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.