Я пытался защитить свои виртуальные машины на моем сервере esx, разместив их за прозрачным мостом с двумя интерфейсами: один спереди, другой сзади.
Я намерен разместить все правила брандмауэра в одном месте (а не на каждом виртуальном сервере).
Я использовал в качестве моста новую пустую виртуальную машину на основе Arch Linux (но подозреваю, что это не имеет значения, какой это бренд).
У меня есть 2 виртуальных коммутатора (таким образом, две виртуальные сети, VN_front и VN_back), каждый с 2 типами портов (коммутируемый / разделенный или случайный / где машина может видеть все пакеты).
На моем мостовом компьютере я установил 2 виртуальных сетевых адаптера, один на VN_front, один на VN_back, оба в режиме promisc.
Я создал мост br0 с обоими сетевыми адаптерами в нем:
brctl addbr br0
brctl stp br0 off
brctl addif br0 front_if
brctl addif br0 back_if
Потом их поднял:
ifconfig front_if 0.0.0.0 promisc
ifconfig back_if 0.0.0.0 promisc
ifconfig br0 0.0.0.0
(Я использую промисковый режим, потому что не уверен, что смогу обойтись без него, думая, что, возможно, пакеты не доходят до сетевых адаптеров)
Затем я взял один из моих виртуальных серверов, сидящих на VN_front, и вместо этого подключил его к VN_back (это отличный вариант использования, о котором я думаю, возможность перемещать свои серверы, просто изменив VN, к которому они подключены, ничего не меняя в комплектации).
Затем я заглянул в Mac, "видимые" моим безадресным мостом, используя brctl showmacs br0
и он показал мой сервер с обеих сторон:
Я получаю что-то вроде этого:
port no mac addr is local? ageing timer
2 00:0c:29:e1:54:75 no 9.27
1 00:0c:29:fd:86:0c no 9.27
2 00:50:56:90:05:86 no 73.38
1 00:50:56:90:05:88 no 0.10
2 00:50:56:90:05:8b yes 0.00 << FRONT VN
1 00:50:56:90:05:8c yes 0.00 << BACK VN
2 00:50:56:90:19:18 no 13.55
2 00:50:56:90:3c:cf no 13.57
все дело в том, что серверы, которые подключены спереди / сзади не отображаются на правильном порту.
Я подозреваю, что в мире ARP происходит что-то ужасное ...: - /
Если я пингую с переднего виртуального сервера на задний виртуальный сервер, я могу видеть только заднюю машину, если эта задняя машина пингует что-то спереди. Как только я прекращаю пинг с задней машины, пинг с передней машины перестает проходить ...
Я заметил, что если задний компьютер пингует, значит, его порт на мосту правильный ...
Я пытался поиграть с переключателем arp_ в / proc / sys, но без явного влияния на конечный результат ... / proc / sys / net / ipv4 / ip_forward, похоже, бесполезен при использовании мост (кажется, brctl позаботился обо всем) / proc / sys / net / ipv4 / conf // arp_ похоже, тоже не сильно меняются ... (пробовал arp_announce на 2 или 8 - как предлагалось в другом месте - и arp_ignore на 0 или 1)
Все примеры, которые я видел, имеют разные подсети с обеих сторон, например 10.0.1.0/24 и 10.0.2.0/24 ... В моем случае я хочу 10.0.1.0/24 с обеих сторон (точно так же, как прозрачный переключатель, за исключением это скрытая прошивка).
Включение / выключение stp, похоже, не повлияло на мою проблему.
Это как если бы пакеты arp проходили через мост, искажая другую сторону ложными данными ... Я пытался использовать -arp
на каждом интерфейсе, br0, спереди, сзади ... это вообще ломает дело ... Я подозреваю, что это как-то связано с тем, что обе стороны находятся в одной подсети ...
Я думал о том, чтобы поместить всю мою машину за fw, чтобы иметь всю ту же подсеть сзади ... но я застрял с шлюзом моего провайдера, стоящим спереди, с частью моей подсети (на самом деле 3 устройства для маршрутизации всей подсети), поэтому у меня всегда будут IP-адреса из одной и той же подсети с обеих сторон, что бы я ни делал ... (я использую фиксированные передние IP-адреса в моей делегированной подсети).
Я в растерянности ... -_- «Спасибо за вашу помощь.
(Как кто-нибудь пробовал что-то подобное? Изнутри ESXi?)
(Это не просто трюк, идея состоит в том, чтобы на некоторых серверах работало что-то вроде fail2ban, отправляющее их заблокированный IP-адрес на мост / fw, чтобы он тоже мог их забанить - спасая все остальные серверы от того же злоумышленника за один раз, допуская некоторые приманки, которые запускали бы fw при любом подходящем ответе, и тому подобное ...
Я знаю, что могу использовать что-то вроде snort, но он решает совсем другие проблемы, совершенно по-другому ...)
Если я правильно понимаю, ваша желаемая сеть:
+----------+ +-----+ +---------+
<--inet--+ VN_front +--+ br0 +--+ VN_back |
+--+-------+ +-----+ +------+--+
| |
| |
+--+----------+ +----------+--+
| VM | | VM |
| 10.0.1.2/24 | | 10.0.1.3/24 |
+-------------+ +-------------+
С интернет-шлюзом по стрелке слева?
И вы используете ebtables или iptables на мосту к межсетевому экрану, что находится в "задней" части сети?
Я уверен, что это можно заставить работать, но я бы так не поступил. Это сложная и необычная установка. Как говорят программисты, всегда есть два человека, которые будут отлаживать все, что вы создаете - вы и вы через шесть месяцев, когда вы все это забудете.
Все примеры, которые вы видели с двумя подсетями (и, предположительно, с гораздо более простым брандмауэром), являются обычной практикой по какой-то причине - они работают с первого раза, их легко настроить, изменить, поддерживать и устранять неполадки.
Простота - это все в сети. Избегайте построения сложной сети. Гордитесь своей простой и стабильной сетью, которую может запустить хорошо обученная обезьяна (или даже MCSE). Попросите вашего начальника дать вам KPI по количеству билетов, которые вы не генерировать, чтобы доказать и дать стимулы для этой стабильности.
(Если ваши MAC-адреса выглядят как находящиеся за неправильным мостом, это будет потому, что вы создали сетевой цикл и запросы ARP передаются на оба интерфейса моста, а последний полученный интерфейс узнает, где находится MAC. более поздние комментарии, похоже, вы сделали именно это.)