Я (очень осторожно) подумываю открыть одну из моих виртуальных машин (все на KVM) для внешнего доступа. В настоящее время только через облачный туннель, но это может измениться. Для этого мне нужен способ однозначно и надежно заблокировать доступ с этой конкретной виртуальной машины ко всем без исключения хостам в частной сети на тот случай, если кто-то взломает ее и получит root-права. Эта конкретная ВМ (назовем ее ВМ10) должна иметь доступ только к шлюзу, а оттуда — в Интернет. В то же время я хочу иметь доступ к этой конкретной виртуальной машине с IP-адреса в частной сети (сетях) для обслуживания, резервного копирования и дальнейшего развития. Я использую мосты.
VM10 подключен через br1 и br2.
Br1 подключается к Интернету. Br2 — это высокоскоростная частная сеть.
На VM10 eth0 подключается к br1 с IP 192.168.1.10; eth2 подключается к br2 с IP 192.168.222.10
Любой, кто вошел в VM10, даже с корневым доступом, должен иметь доступ только к 192.168.1.1 и к Интернету за его пределами. Любой, кто вошел в VM10, даже с корневым доступом, не должен вообще ничего получить через eth2. Желательно, чтобы eth2 не отображался даже при входе в VM10.
Я не хочу делать это с правилом брандмауэра на VM10, потому что, если кто-то получит права root на VM10, брандмауэр отключится через несколько секунд.
Я не хочу делать это с правилами брандмауэра в ящиках в частных сетях, потому что это хлопотно, и его легко не заметить. Я хочу что-то вставить в XML VM10 и покончить с этим.
Для ВМ10:
- Разрешить вход и выход в/из 192.168.1.1 и в Интернет.
- Запретить выход на любые другие ips на br1. Разрешить вход.
- Запретить выход всем ips на br2. Разрешить вход.
- Сделайте это так, чтобы пользователь root, вошедший в VM10, не мог его изменить.
Я думаю, что сетевые фильтры libvirt могут это сделать, но я боюсь их документация слишком плотная тема для моей старой головы.
Может ли добрая душа помочь? Возможно, с полным правилом?
Спасибо.