LIMB
Вход Регистрация

тема

Ставим kali linux на qemu/kvm и настраиваем killswitch (мануал для чайников)

threat · · 0 ответов · 431 просмотров

Специально для forum.LIMB.cc
Автор: threat
Задача: установить qemu со всеми зависимостями, импотрнуть готовый образ kali, установить гостевые дополнения, настроить расширение экрана в гостевой машине, создать killswitch чтобы не светануть свой айпишник в гостевой тачке, если на хосте отвалиться впн.

Для начала объясню почему мы используем для этих целей не virtualbox или же vmware, Ответ прост у виртуалбокса закрыты дополнения, дрова закрыты мы не знаем что там происходит. Vmware это коммерческое решение тоже закрытое, на которое нацелены APT, есть риск что если вы кому-то нужны вам взломают. Зачем использовать то на что нацелены хакеры... Они явно не нацелены на qemu/kvm)))

kvm в встроен в ядро линукса. QEMU+kvm - это бесплатно, код открыт,

Заходим сюда: https://www.kali.org/get-kali/#kali-virtual-machines

Не удалось прогрузить медиа


качаем образ кали он будет с расширением .qcow2

Устанавливаем qemu/kvm


sudo dnf install @virtualization
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER
virt-host-validate
sudo systemctl status libvirtd
#Перелогинься чтобы группы применились или ребутнись
virt-manager

Если у вас хост не федора, то вот какие пакеты содержатся в @virtualization

Code:
Repositories loaded.
Id                   : virtualization
Name                 : Virtualization
Description          : These packages provide a graphical virtualization environment.
Installed            : no
Order                :
Langonly             :
Uservisible          : no
Repositories         : fedora, updates
Mandatory packages   : virt-install
Default packages     : libvirt-daemon-config-network
                     : libvirt-daemon-kvm
                     : qemu-kvm
                     : virt-manager
                     : virt-viewer
Optional packages    : guestfs-tools
                     : python3-libguestfs
                     : virt-top

Поделюсь настройками

Не удалось прогрузить медиа


Не удалось прогрузить медиа


Не удалось прогрузить медиа


На кали (гость) ставим spice (это как дополнения в виртуалбоксе чтобы буфер двунаправленный был)

Code:
sudo apt update
apt install spice-vdagent
sudo systemctl enable --now spice-vdagentd
sudo systemctl status spice-vdagentd

Если вы столкнулись с тем, что у вас появились черные полосы, расширение экрана не подошло, то фиксим костылем. Я не люблю на такие вещи время тратить.

У вас могут быть две проблемы:

1. Часть обоев становится черная
2. Неподходящее расширение экрана


Правой кнопкой мыши в гуишке и заходим в Desktop выставляем настройки как у меня. При загрузки системы будет меняться обложка случайно (это костыль для исправления обоев с черной хренью)
Не удалось прогрузить медиа


Далее нам нужно чтобы при загрузке необходимое разрешение экрана подбиралось.

На хосте выполняем команду, чтобы узнать какое у нас разрешение экрана

xrandr

На госте сделаем такое же, но скриптом чтобы автоматически при загрузки подгружалось. Иначе не будет работать из-за агента spicy, который кривой, возможно это только у меня так, проблема с дровами, но если у вас вдруг также. То делаем следующее:
nano ~/.config/autostart/xrandr.desktop

Code:
[Desktop Entry]
Type=Application
Name=Fix screen resolution
Exec=/usr/bin/xrandr --output[B] Virtual-1[/B] --mode 1920x1080
X-GNOME-Autostart-enabled=true
Virtual-1 у вас или другое название можно проверить с помощью команды: xrandr

chmod +x ~/.config/autostart/xrandr.desktop

Я не буду заострять внимание на настройке кали и импорте готового образ qemu/kvm.

Не удалось прогрузить медиа


/var/lib/libvirt/images/ образ лучше перенесите сначала сюда, а потом через гуишку virt-manager импортните образ, это изи делается, вручную напишите что это debian, а то он не определит сам. И настройки выставите как я показал выше.

Если у вас какие-то проблемы то проверьте поддерживает ли ваш проц виртуализацию и не отключена ли в биосе

egrep -c '(vmx|svm)' /proc/cpuinfo

Проверьте что kvm модули подгрузились

lsmod | grep kvm

Если вдруг какие-то проблемы, то введите просто эту команду и вывод закиньте в нейронку поможет очень быстро, не парьтесь virt-host-validate

Isolated network мы можем создавать через гуишку. Жмем Edit --> Connection Details
Не удалось прогрузить медиа


Не удалось прогрузить медиа


Не удалось прогрузить медиа


Выбираем изолированную сеть (isolated network)

Не удалось прогрузить медиа


VM ↔ Хост
VM → Internet/LAN


Простыми словами мы сделали так чтобы наша виртуальная машина не видела LAN/WLAN сеть. То есть у гостя теперь нет доступа к внешней среде, не может наша кали подключаться к сайтам или сканить локальную сеть хоста (обнаруживать принтеры и т.д). Это хорошо, если вдруг наша кали будет скомпрометирована, то есть говно какое нибудь туда закачаем, то злоумышленник не сможет хуевертить на нашем хосте ничего, если только не найдет уязвимость в гипервизоре и не проапается к нашему хосту.

Заходи в гостя

Code:
ping google.com
ping 8.8.8.8

если пакеты не доходят, сети нет, то все збс. Можем продолжать делать киллсвитч.

Суть в чем должна быть что у нас есть gateway на хосте который выступает в роли виртуального роутера (у него есть свой статический адрес) гость должен с ним общаться и в данном случае наш гость должен выходить в интернет только через интерфейс впна, у него не должно быть других путей. Если вдруг впн падает/отключается, то интернета нет = vpn leak.

Ребят, болтать можно долго, я пытаюсь как-то объяснить доступным языком поскольку сети никто из вас не знает. В том числе я. То что я сделал это школьная подделка которая просто работает и все.

iptables уже во многих дистрибутивах не используется, да даже libvirt использует nft. Но есть большой минус, если вы ребутните тачку libvirt перезапустит ваши правила. Поэтому мы поступим иначе.

Повторяем за мной на своем хосте

sudo nano /usr/local/bin/restore-killswitch.sh
Code:
#!/bin/bash
# Ожидание tun0
echo "Waiting for tun0..."
while ! ip link show tun0 &>/dev/null; do
    sleep 1
done
echo "tun0 is up, applying killswitch rules..."

# Очищаем цепочки
nft flush chain ip libvirt_network guest_output 2>/dev/null
nft flush chain ip libvirt_network guest_input 2>/dev/null
nft flush chain ip libvirt_network guest_nat 2>/dev/null
# virbr0 (default сеть) - восстанавливаем дефолтные правила
nft add rule ip libvirt_network guest_output ip saddr 192.168.122.0/24 iif "virbr0" counter accept
nft add rule ip libvirt_network guest_output iif "virbr0" counter reject
# virbr1 killswitch - ТОЛЬКО через tun0
nft add rule ip libvirt_network guest_output ip saddr 192.168.100.0/24 iif "virbr1" oifname "tun0" counter accept
nft add rule ip libvirt_network guest_input oif "virbr0" ip daddr 192.168.122.0/24 ct state established,related counter accept
nft add rule ip libvirt_network guest_input oif "virbr0" counter reject
nft add rule ip libvirt_network guest_input iifname "tun0" oif "virbr1" ct state established,related counter accept
# NAT правила
nft add rule ip libvirt_network guest_nat ip saddr 192.168.100.0/24 oifname "tun0" counter masquerade
nft add rule ip libvirt_network guest_nat ip saddr 192.168.122.0/24 ip daddr 224.0.0.0/24 counter return
nft add rule ip libvirt_network guest_nat ip saddr 192.168.122.0/24 ip daddr 255.255.255.255 counter return
nft add rule ip libvirt_network guest_nat meta l4proto tcp ip saddr 192.168.122.0/24 ip daddr != 192.168.122.0/24 counter masquerade to :1024-65535
nft add rule ip libvirt_network guest_nat meta l4proto udp ip saddr 192.168.122.0/24 ip daddr != 192.168.122.0/24 counter masquerade to :1024-65535
nft add rule ip libvirt_network guest_nat ip saddr 192.168.122.0/24 ip daddr != 192.168.122.0/24 counter masquerade

echo "Killswitch восстановлен!"

sudo chmod +x /usr/local/bin/restore-killswitch.sh

sudo nano /etc/systemd/system/restore-killswitch.service

Code:
[Unit]
Description=Restore nftables killswitch rules for libvirt
After=nftables.service libvirtd.service network-online.target
Wants=nftables.service libvirtd.service network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/restore-killswitch.sh
Restart=on-failure
RestartSec=5
TimeoutStartSec=infinity

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable restore-killswitch.service
sudo systemctl start restore-killswitch.service
sudo systemctl status restore-killswitch.service


Вместо tun0 - у вас может быть другое название интерфейса впн, проверьте через ifconfig. Также проверьте CIDR 192.168.100.0/24 и 192.168.122.0/24. Вам в любом случае сильно париться не надо я вам даю готовое решение, выставляйте настройки как у меня - если что-то будет не совпадать скормите в гпт, исправит. Основные ошибки я уже учел.

Обратите внимание мы все сделали грамотно. Наш сервис будет запускать только после того как стартанет libvirtd, то суть в том что после ребута запустится libvirtd демон, перезапишет правила nft (сотрет наши), а мы сервисом restore-killswitch.service восстановим их.

Все збс, на этом этапе мы завершили настройку хоста, qemu/kvm, настроили изолированную сеть. Остается самое простое это выдать сетевые правила кали.



Настраиваем guest kali
nmcli connection show

Code:
sudo nmcli connection modify "Wired connection 1" ipv4.addresses "192.168.100.10/24"
sudo nmcli connection modify "Wired connection 1" ipv4.gateway "192.168.100.1"
sudo nmcli connection modify "Wired connection 1" ipv4.dns "1.1.1.1 8.8.8.8"
sudo nmcli connection modify "Wired connection 1" ipv4.method manual
sudo nmcli connection modify "Wired connection 1" ipv4.never-default no
sudo nmcli connection up "Wired connection 1"

ping google.com
ping 8.8.8.8

Все должно работать. Теперь попробуйте отключить впн, сеть должна пропасть. Пакеты не должны доходить. Ребутните хост, проверьте будет ли продолжать работать киллсвитч. Если все ок, то отлично...
👍31 ❤️6 🔥3 👏7 🤔2 💯4

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.