LINUX.ORG.RU

Объясните чайнику на пальцах... как VirtualBox обходит все запреты Gufw Firewall

 , ,


0

2

Вот тут ставлю запретить все входящие и исходящие (на основной, хостовой системе).

http://gufw.org/img/slide/slide1.jpg

Но на гостевую машину, работающую в режиме сетевого моста это никак не влияет. Почему?

По скриншоту гадать бесполезно, но вообще VBox может самостоятельно управлять файрволлом, и ему побоку твои правила. Это не приложение какое-то, а гипервизор с полным фаршем.

anonymous ()
Ответ на: комментарий от anonymous

А в чем тогда смысл файрвола, если его можно так запросто отключить? Нет, вот реально, я просто хочу понять... Если речь о том, что когда я поставил VirtualBox, то согласился, что он будет иметь права root-а, то где гарантия, что любой другой пакет также не пропишет для себя права такое сверх привилегии?

debian-xfce ()
Ответ на: комментарий от debian-xfce

Нет никаких гарантий. Думай, чем пользуешься и кому что разрешаешь. Например, если поставишь Docker и выключишь в нём управление iptables, то половина функциональности не будет работать без ручного добавления нужных правил. Если ты параноишь из-за такой фигни, то нужен внешний файрволл. Но вообще лучше разобраться, что и как работает, а не гоняться за тем, что тебе кажется безопасностью.

anonymous ()
Ответ на: комментарий от Vsevolod-linuxoid

Вопрос, как убедиться в том, что у него нет собственных модулей ядра. Есть приложение, «инсталлятор» которого весит почти два гига. При этом исходный код закрыт и поди разберись, что там есть и чего там нет.

debian-xfce ()

Файрвол в линуксе встроен в ядро, к нему есть интерфейсы через которые можно назначать правила из userspace. У тебя графическая утилита которая какие-то правила создала и отправила в ядро. А vbox это системное приложение которое тоже свои правила отправила ядру. Для ядра никакой разницы между ними нет, ему просто из двух мест поступили правила.

anonymous ()
Ответ на: комментарий от anonymous
vsevolod@hp15linux:~$ ps aux | grep -i vbox
root         950  0.0  0.0      0     0 ?        I<   12:18   0:00 [iprt-VBoxWQueue]
root         951  0.0  0.0      0     0 ?        S    12:18   0:00 [iprt-VBoxTscThr]
vsevolod    9936  0.5  0.0  84844 15668 ?        S    20:52   0:00 /usr/lib/virtualbox/VBoxXPCOMIPCD
vsevolod    9942  1.4  0.1 905788 28840 ?        Sl   20:52   0:00 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
vsevolod   10046  0.0  0.0  19412   728 pts/0    S+   20:53   0:00 grep --color=auto -i vbox
vsevolod@hp15linux:~$ ps aux | grep -i virtualbox
vsevolod    9917  6.2  1.3 1838748 222840 ?      Sl   20:52   0:02 /usr/lib/virtualbox/VirtualBox
vsevolod    9936  0.5  0.0  84844 15668 ?        S    20:52   0:00 /usr/lib/virtualbox/VBoxXPCOMIPCD
vsevolod    9942  1.3  0.1 905788 28840 ?        Sl   20:52   0:00 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
vsevolod    9983 20.0  2.5 3078084 418892 ?      Sl   20:53   0:02 /usr/lib/virtualbox/VirtualBoxVM --comment Linux --startvm c500568a-8e75-4785-8527-055884c347f4 --no-startvm-errormsgbox
vsevolod   10048  0.0  0.0  19412   728 pts/0    S+   20:53   0:00 grep --color=auto -i virtualbox

 — я думаю, дело все же в модулях — как видно, с root только они.

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от debian-xfce

sudo повышает привилегии пользователя до root. Опция не обязательная, пользователь должен состоять в группе wheel или sudo, чтобы уметь так. Но во многих дистрибутивах это по умолчанию.

Так что да, с правами root.

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от debian-xfce

Нет, vbox модулем ядра добавляет свою виртуальную сетевую карту (NIC), бридж скорее всего соединяем этот виртуальный NIC с физическим NIC. Как ходит между ними трафик определяет ядро линукса, этим можно управляеть встроенным в ядро файрволом называемым netfilter.

GUFW это графическая надстройка над UFW, а UFW это удобный CLI над iptables, в свою очередь iptables это userspace CLI для управления netfilter, а netfilter это уже файрвол встроенный в ядро.

Тут есть где-то тема что линукс не готов для обычных пользователей и таки да, потому как тебе предаться лесть в консоль:

sudo iptables -nvL --line-numbers
sudo iptables -nvL --line-numbers -t nat

Ты увидишь цепочки правил, циферки в колонках pkts и bytes укажут по какой цепочки идет трафик. Просто вызываешь несколько раз вышеназванные команды и смотришь где цифры инкрементятся.

После того когда ты разберешься как и что происходит с трафиком, куда он «течет» и как обходит правила GUFW, ты сможешь понять может ли gufw сделать то что ты хочешь или нет, если нет то придется разобраться с iptables для внесения своих кастомных правил через эту утилиту.

anonymous ()
Ответ на: комментарий от wrangler2020

Кстати да, у ТС еще наверное включен форвардинг

cat /proc/sys/net/ipv4/ip_forward

Если вернет 1 то host играет роль шлюза между всеми подсетями на которые можно увидеть выполнив ip r или route.

Выруби его и никто из vbox или docker не выберется из своих подсететей:

sysctl -w net.ipv4.ip_forward=0

или (под рутом):

echo 0 > /proc/sys/net/ipv4/ip_forward
anonymous ()
Ответ на: комментарий от wrangler2020





$ iptables -L -v -n
iptables v1.6.0: can't initialize iptables table `filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.

---------------

От рута:

Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
4165 320K ufw-before-logging-input all  — * * 0.0.0.0/0 0.0.0.0/0
4165 320K ufw-before-input all  — * * 0.0.0.0/0 0.0.0.0/0
4 1312 ufw-after-input all  — * * 0.0.0.0/0 0.0.0.0/0
0 0 ufw-after-logging-input all  — * * 0.0.0.0/0 0.0.0.0/0
0 0 ufw-reject-input all  — * * 0.0.0.0/0 0.0.0.0/0
0 0 ufw-track-input all  — * * 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ufw-before-logging-forward all  — * * 0.0.0.0/0 0.0.0.0/0
0 0 ufw-before-forward all  — * * 0.0.0.0/0 0.0.0.0/0
0 0 ufw-after-forward all  — * * 0.0.0.0/0 0.0.0.0/0
0 0 ufw-after-logging-forward all  — * * 0.0.0.0/0 0.0.0.0/0
0 0 ufw-reject-forward all  — * * 0.0.0.0/0 0.0.0.0/0
0 0 ufw-track-forward all  — * * 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
4161 318K ufw-before-logging-output all  — * * 0.0.0.0/0 0.0.0.0/0
4161 318K ufw-before-output all  — * * 0.0.0.0/0 0.0.0.0/0
0 0 ufw-after-output all  — * * 0.0.0.0/0 0.0.0.0/0
0 0 ufw-after-logging-output all  — * * 0.0.0.0/0 0.0.0.0/0
0 0 ufw-reject-output all  — * * 0.0.0.0/0 0.0.0.0/0
0 0 ufw-track-output all  — * * 0.0.0.0/0 0.0.0.0/0

Chain ufw-after-forward (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-after-input (1 references)
pkts bytes target prot opt in out source destination
0 0 ufw-skip-to-policy-input udp  — * * 0.0.0.0/0 0.0.0.0/0 udp dpt:137
0 0 ufw-skip-to-policy-input udp  — * * 0.0.0.0/0 0.0.0.0/0 udp dpt:138
0 0 ufw-skip-to-policy-input tcp  — * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:139
0 0 ufw-skip-to-policy-input tcp  — * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:445
4 1312 ufw-skip-to-policy-input udp  — * * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
0 0 ufw-skip-to-policy-input udp  — * * 0.0.0.0/0 0.0.0.0/0 udp dpt:68
0 0 ufw-skip-to-policy-input all  — * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type BROADCAST

Chain ufw-after-logging-forward (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-after-logging-input (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-after-logging-output (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-after-output (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-before-forward (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all  — * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 3
0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 4
0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 11
0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 12
0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 8
0 0 ufw-user-forward all  — * * 0.0.0.0/0 0.0.0.0/0

Chain ufw-before-input (1 references)
pkts bytes target prot opt in out source destination
4161 318K ACCEPT all  — lo * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all  — * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ufw-logging-deny all  — * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
0 0 DROP all  — * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 3
0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 4
0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 11
0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 12
0 0 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0 icmptype 8
0 0 ACCEPT udp  — * * 0.0.0.0/0 0.0.0.0/0 udp spt:67 dpt:68
4 1312 ufw-not-local all  — * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT udp  — * * 0.0.0.0/0 224.0.0.251 udp dpt:5353
0 0 ACCEPT udp  — * * 0.0.0.0/0 239.255.255.250 udp dpt:1900
4 1312 ufw-user-input all  — * * 0.0.0.0/0 0.0.0.0/0



debian-xfce ()
Ответ на: комментарий от wrangler2020



Chain ufw-before-logging-forward (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-before-logging-input (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-before-logging-output (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-before-output (1 references)
pkts bytes target prot opt in out source destination
4161 318K ACCEPT all  — * lo 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all  — * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ufw-user-output all  — * * 0.0.0.0/0 0.0.0.0/0

Chain ufw-logging-allow (0 references)
pkts bytes target prot opt in out source destination

Chain ufw-logging-deny (2 references)
pkts bytes target prot opt in out source destination

Chain ufw-not-local (1 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all  — * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
0 0 RETURN all  — * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type MULTICAST
4 1312 RETURN all  — * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type BROADCAST
0 0 ufw-logging-deny all  — * * 0.0.0.0/0 0.0.0.0/0 limit: avg 3/min burst 10
0 0 DROP all  — * * 0.0.0.0/0 0.0.0.0/0

Chain ufw-reject-forward (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-reject-input (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-reject-output (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-skip-to-policy-forward (0 references)
pkts bytes target prot opt in out source destination
0 0 DROP all  — * * 0.0.0.0/0 0.0.0.0/0

Chain ufw-skip-to-policy-input (7 references)
pkts bytes target prot opt in out source destination
4 1312 DROP all  — * * 0.0.0.0/0 0.0.0.0/0

Chain ufw-skip-to-policy-output (0 references)
pkts bytes target prot opt in out source destination
0 0 DROP all  — * * 0.0.0.0/0 0.0.0.0/0

Chain ufw-track-forward (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-track-input (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-track-output (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-user-forward (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-user-input (1 references)
pkts bytes target prot opt in out source destination

Chain ufw-user-limit (0 references)
pkts bytes target prot opt in out source destination
0 0 REJECT all  — * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

Chain ufw-user-limit-accept (0 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all  — * * 0.0.0.0/0 0.0.0.0/0

Chain ufw-user-logging-forward (0 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all  — * * 0.0.0.0/0 0.0.0.0/0

Chain ufw-user-logging-input (0 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all  — * * 0.0.0.0/0 0.0.0.0/0

Chain ufw-user-logging-output (0 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all  — * * 0.0.0.0/0 0.0.0.0/0

Chain ufw-user-output (1 references)
pkts bytes target prot opt in out source destination

debian-xfce ()
Ответ на: комментарий от debian-xfce

Как уже писали — нужно файрволл настроить, и не базовый, как ты пробовал, а iptables или nftables — в новых дистрибутивах iptables уже нет, просто команды транслируются.

Как по мне, так это проще всего реализовать на связке virsh + firewalld, которые тоже попросту обвязки над qemu-kvm и nftables. И да — это все не имеет продвинутого GUI и нужно читать уйму документации — я и сам сходу, без подготовки такое не сделаю.

Vsevolod-linuxoid ★★★★★ ()
Ответ на: комментарий от Vsevolod-linuxoid

— я думаю, дело все же в модулях — как видно, с root только они.

```$ ps aux | grep -i vbox
root 5481 0.0 0.0 0 0 ? I< 20:00 0:00 [iprt-VBoxWQueue]
root 5508 0.0 0.0 0 0 ? S 20:00 0:00 [iprt-VBoxTscThr]
demo 6349 0.0 0.1 197908 13788 ? S 20:03 0:04 /usr/lib/virtualbox/VBoxXPCOMIPCD
demo 6355 0.1 0.2 948712 26912 ? Sl 20:03 0:14 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
demo 8007 0.0 0.0 48060 988 pts/0 S+ 22:14 0:00 grep -i vbox
```
P.S. не пойму в чем дело, но даже апостофы не срабатывают :(

debian-xfce ()
Ответ на: комментарий от Vsevolod-linuxoid

Я сомневаюсь, что гипервизор удастся запустить в песочнице.

Нет, не гипервизор, а именно непроверенный софт. Или речь идет о том, что да, песочница может быть решением?

debian-xfce ()

если у тебя виртуалбок в мосте, то это L2, а выключил ты на L3. Соответственно или выключай на L2 или выключай в виртуалке тоже.

slapin ★★★★★ ()