Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1 2 След.
RSS
Применить iptables для виртуальной машины, как это сделать?
 
На реальной машине стоит Ubuntu 10.10. Поставил Virtual box и установил WinXP. Сетевой интерфейс виртуалки выставил как NAT. Хочу теперь с помощью iptables фильтровать трафик для этой виртуалки. Проблема в том, что в wireshark траффик от виртуалки видится как трафик реальной машины (адрес стоит реальной машины). Как быть? Подключение типа bridge не подходит
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
 
При использовании сетевого подключения типа 'NAT', насколько я знаю, никак. Ибо трафик от виртуальной машины ничем для iptables не отличается от трафика реальной, поскольку iptables пакетный фильтр и на процессы в userspace ему фиолетово. Походу только использовать bridge и вести фильтрацию на основе интерфейса туннеля.
 
Вот лень сейчас смотреть, но помню, что netfilter умеет метить локальные пакеты, генерируемые от определенного PID. Это, по идее, должно спасти отца русской демократии.
 
Тоже об этом подумал, ведь когда-то читал tutorial   ;)
К сожалению, об опциях типа --pid-owner пишут следующее:
Цитата

The owner match extension is used to match packets based on the identity of the process that created them. The owner can be specified as the process ID either of the user who issued the command in question, that of the group, the process, the session, or that of the command itself. This extension was originally written as an example of what iptables could be used for. The owner match only works within the OUTPUT chain, for obvious reasons: It is pretty much impossible to find out any information about the identity of the instance that sent a packet from the other end, or where there is an intermediate hop to the real destination. Even within the OUTPUT chain it is not very reliable, since certain packets may not have an owner. Notorious packets of that sort are (among other things) the different ICMP responses. ICMP responses will never match.
Так что очевидного и однозначного применения данным опциям я не вижу, имхо.
 
А если настроить iptables на фильтрацию на интерфейсе виртуальной машины?
 
Цитата
phoenix пишет:
А если настроить iptables на фильтрацию на интерфейсе виртуальной машины?
Тогда нужно использовать bridge, но
Цитата
Shanker пишет:
...Подключение типа bridge не подходит
Хотя,на мой взгляд, это единственный простой способ фильтровать трафик виртуальной машины, ну и как вариант - фаер в гостевой. Но это  :sensored: изврат при наличии пакетного фильтра на хост-машине.
Кстати, сам интерфейс для bridge можно поднимать только при запуске конкретной виртуальной машины и, соответственно, гасить при выключении.
 
> Тогда нужно использовать bridge
почему? интерфейс виртуальной машины должен присутствовать на хостовой машине. И весть трафик проходящий через этот интерфейс - адресован виртуальной машине. Даже елси потом что то там натится.
по идее...
 
phoenix,

Цитата
$ ip addr
3: vboxnet0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
   link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff

Адаптер-то имеется, только адрес его не показывается...
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
 
а в iptables использовать ключик -i vboxnet0
 
На самом деле, я очень редко сталкиваюсь с VirtualBox'ом, но если мне не изменяет память, то vboxnet0 как раз и служит для поднятия моста.
Код
[/home/sergey]%uname -a
Linux NetAngel 2.6.32-5-amd64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 x86_64 GNU/Linux

[/home/sergey]%lsmod | grep box
vboxnetadp              4625  0 
vboxnetflt             15936  0 
vboxdrv              1742194  3 vboxnetadp,vboxnetflt

[/home/sergey]%ps aux | grep -i box
sergey    8613 11.9  9.5 891360 386380 ?       SLl  09:22   2:42 /usr/lib/virtualbox/VirtualBox --comment eBox --startvm aba2fd60-66cb-4af4-b7a3-b3553e598e87
sergey    8642  0.0  0.0  82480  2812 ?        S    09:22   0:00 /usr/lib/virtualbox/VBoxXPCOMIPCD
sergey    8647  0.1  0.1 235504  7412 ?        Sl   09:22   0:01 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
sergey   17845  0.4  1.1 448708 47412 ?        Sl   09:35   0:02 /usr/lib/virtualbox/VirtualBox
sergey   23601 61.0  7.2 763400 294872 ?       Sl   09:25   1:31 /usr/lib/virtualbox/VirtualBox --comment Debian-lenny_enterprise_test_updates --startvm 78425c46-2ae5-4d19-368b-40d8ac8b156f

[/home/sergey]%/sbin/ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:24:1d:7c:80:35  
          inet addr:192.168.33.77  Bcast:192.168.33.255  Mask:255.255.255.0
          inet6 addr: fe80::224:1dff:fe7c:8035/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:38118277 errors:0 dropped:0 overruns:0 frame:0
          TX packets:53495517 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8147054658 (7.5 GiB)  TX bytes:47749327508 (44.4 GiB)
          Interrupt:28 Base address:0x4000

[/home/sergey]%/sbin/ifconfig vboxnet0
vboxnet0  Link encap:Ethernet  HWaddr 0a:00:27:00:00:00  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

[/home/sergey]%ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 00:24:1d:7c:80:35 brd ff:ff:ff:ff:ff:ff

[/home/sergey]%ip link show vboxnet0
4: vboxnet0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
    link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff

Таким образом, при двух работающих гостевых с типом сетевого подключения 'NAT', интерфейс vboxnet0 находится в состоянии DOWN.
Следовательно в iptables ключик -i vboxnet0 не имеет смысла.
Проводим небольшой экскремент   :evil:
На хосте
Код
[/root]# iptables -A OUTPUT -o vboxnet0 -j DROP
[/root]# iptables -A INPUT  -i vboxnet0 -j DROP

В гостевой
Код
lynx http://www.microsoft.com

И говорим громкое 'фи' вражеским веб-мастерам и дизигнерам за то, что не заточили свое поделие под кошерный lynx  :)
 
То есть сетевой интерфейс вообще не создается для виртуальной машине работающей через НАТ?
И виртуальная машина потребляет трафик на хостовой системе, просто как одно из приложений?
 
Тогда на самом деле --pid-owner на OUTPUT
и все.
INPUT по идее и не нужен. так как любое соединение должно быть инициировано изнутри. ибо НАТ.
 
Так ещё не пробовал, попробую...
А что делать, если несколько виртуалок, и для каждой хотелось бы отдельные правила создать?
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
 
Цитата
Shanker пишет:
А что делать, если несколько виртуалок, и для каждой хотелось бы отдельные правила создать?
Попробуй извратиться с настройками TCP/IP в гостях. Ну, к примеру, с разным размером MTU. А эти разные MTU маркируй iptables. Или еще за чего зацепись.
 
Может разный размер TTL был бы получше? Потому как эксперименты с MTU довольно стремны - уж сколько было случаев о том, что часть сайтов не открываtтся при неверном размере MTU (и отключенном/заблокированном Path MTU Discovery).
 
Цитата
Может разный размер TTL был бы получше?

Длительность жизни? Вряд ли.
Там еще есть один параметр. Метрика маршрута – гуглим, википедиим.

Цитата из вики:

Цитата
Таблица состоит из некоторого числа записей — маршрутов, в каждой из которых содержится адрес сети получателя, адрес следующего узла, которому следует передавать пакеты и некоторый вес записи — метрика. Метрики записей в таблице играют роль в вычислении кратчайших маршрутов к различным получателям.


А насчет MTU  -  это просто же размер пакета, который может любой маршрутизатор порезать на ленточки(условно говоря).

Возможно я неправ.
Изменено: lkesh - 23.04.2011 11:36:08
 
Цитата
lkesh пишет:
А насчет MTU  -  это просто же размер пакета, который может любой маршрутизатор порезать на ленточки(условно говоря).

Держи в ответ - гуглим насчет флага DF, и Path MTU Discovery. Ну и попутно - от чего зависит обработка проходящими шлюзами пакетов с установленным флагом DF.  :) А вообще мы отвлеклись. Суть в том, по какому критерию можно идентифицировать сетевой пакет виртуальной машины.
 
del
Изменено: lkesh - 23.04.2011 23:27:04
 
а может кто показать для vbox с nat-networking выхлоп brctl show
и iptables-save ?
 
^rage^
Нужен вывод команд, когда уже настроено всё?

Потому как при работающей виртуалке vbox с nat-networking выхлоп brctl show вообще ничё не показывает:

Цитата
$ brctl show
bridge name bridge id STP enabled interfaces
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
Страницы: 1 2 След.
Читают тему