TL;DR: Цель состоит в том, чтобы построить сетевой кран используя Линукс-мосткоторый можно использовать для прослушивания сетевого трафика и создания устройства, которое также можно использовать для участия красных команд.
В настоящее время я использую ПК-маршрутизатор с четырьмя портами Ethernet, как показано на рисунке ниже, но фактическое оборудование не имеет значения. Я намерен воспроизвести свою настройку на другом оборудовании с двойной (гигабитной) сетью Ethernet — подумайте об одноплатных компьютерах, таких как Orange Pi и т. д.
Текущая настройка:
Порт | Интерфейс | МАК |
---|---|---|
ЛВС1 | enp3s0 | 00:90:27:б4:40:58 |
ЛВС2 | enp4s0 | 00:90:27:б4:40:59 |
ЛВС3 | enp6s0 | 00:90:27:б4:40:5а |
ЛВС4 | enp7s0 | 00:90:27:б4:40:5б |
В этом примере enp3s0 — это интерфейс управления для SSH и т. д., enp6s0 и enp7s0 — интерфейсы моста. ОС — Debian 11 (яблочко) с Network Manager.
Я создал мост с помощью nmcli следующим образом:
# create bridge
nmcli connection add type bridge ifname br0 con-name br0 bridge.stp no ipv4.method disabled ipv6.method disabled autoconnect no
# allow all kinds of traffic
nmcli connection modify br0 bridge.group-forward-mask 65528
# add slave interfaces
nmcli connection add type ethernet ifname enp6s0 con-name br0-enp6s0 master br0
nmcli connection add type ethernet ifname enp7s0 con-name br0-enp7s0 master br0
# start the bridge
nmcli con up br0
Тогда я просто использую: tcpdump -n -i br0
или же tshark
на самом устройстве, чтобы сразу нюхать трафик.
Сетевой менеджер тоже для удобства, потому что в какой-то момент я могу захотеть сбросить мост и переназначить интерфейсы для другой цели. Я также могу запустить предварительные сценарии в /etc/NetworkManager/dispatcher.d/pre-up.d/, если это необходимо.
Поскольку у меня чистый мост уровня 2 без IP-адресов, я ожидаю, что он будет «почти» тихим. Путем настройки значения group_fwd_mask
Я также стараюсь ретранслировать типы трафика, которые по умолчанию не передаются мостом Linux, например, CDP или EAP (Источник).
Однако я знаю, что мост все еще может генерировать некоторый трафик либо сам по себе, либо в ответ на запросы, например трафик ARP. Действительно, когда я запускаю мост, он отправляет несколько пакетов IGMPv3, как показано ниже (36:04:5f:8d:ac:55 — MAC-адрес, автоматически назначенный мосту):
Поэтому мой вопрос: как я могу сделать мост полностью тихий а также пассивныйи добиться полного изоляция моста от других интерфейсов, присутствующих на устройстве. Другими словами, настоящий сетевой ответвитель не должен вводить никаких собственных кадров. Я понимаю, что есть много вариантов, но я не уверен, какой из них использовать.
Некоторые из идей, которые я имел в виду:
- Используйте VLAN для мостовых интерфейсов, но я думаю, что это не поможет, когда мостовые интерфейсы сами по себе генерируют нежелательный трафик.
- Запуск Network Manager в другом пространство имен
- Использовать тк или же nftables отбрасывать нежелательные кадры, поступающие на мост, на основе MAC-адреса
Проект, который несколько похож на то, что я делаю, это фантап. Но это скорее инструмент «человек посередине», который работает путем клонирования IP-адреса «жертвы». Кроме того, phantap адаптирован для OpenWRT, и вместо этого я использую обычные дистрибутивы Systemd, такие как Debian.
Я посмотрел на phantap, и он делает как минимум две вещи, которые могут иметь отношение к изоляции:
- он использует nftables (источник)
- он использует следующий предварительный сценарий для моста (источник):
BRIDGE=br-phantap
if [ "$ACTION" = add -a "$DEVICENAME" == "$BRIDGE" ]; then
echo "phantap: Configuring bridge $BRIDGE (hotplug)..." > /dev/kmsg
echo 65528 > /sys/class/net/$BRIDGE/bridge/group_fwd_mask
ip link set dev $BRIDGE arp off multicast off allmulticast off
echo "phantap: Bridge $BRIDGE configured (hotplug)" > /dev/kmsg
fi
Вопросы
- Есть ли
ip link set dev $BRIDGE arp off multicast off allmulticast off
приведенного выше утверждения достаточно, чтобы эффективно «заглушить» мост? - Следует ли сделать то же самое и на ведомых интерфейсах?
- Имеет ли смысл добавить больше правил фильтрации, например, используя tc или nftables?
- Что насчет IP-ссылка изолирована вариант?
- Есть ли какие-либо полезные опции, которые я упустил из виду, например bridge.vlan-фильтрация вариант?
- Мост — лучший способ добраться сюда? Могут ли другие типы интерфейсов, такие как macvlan, достичь намеченной цели?
Дополнительные ссылки и сопутствующие вопросы
- Правильная изоляция моста Linux
- Надлежащая изоляция мостовых сетей
- Можно ли включить изоляцию портов на мостах Linux?
vlan bridge ethernet tap изолированная сеть