Приветствую всех форумчан!
Идея защиты Windows хоста от всевозможных угроз уже давно не давала покоя. Антивирусы, файерволы - все круто, но как говориться нет
Если машина используется только для общения на форумах и в ТГ (web версия) то представляю вашему вниманию свою схему.
1. Необходима серверная (подойдет даже RPI) часть для развертывания VPN и Killswitch на докере. Причем изначально доступ в инет имеет только Router/VPN container (выбирайте на свой вкус и цвет используемую технологию для VPN). Одновременно с ним запускается Client container/proxy server на котором инета нет. Configuration container запускается и создает и настраивает macvtap соединения с ip адресами, правилами и т.д. и отключается. Важно чтобы в NAT Router/VPN container был прописан MASQUERADE только на VPN интерфейс (это основа Killswitch: нет интерфейса- нет
2. Хостовая часть не имеет доступа в инет, но есть линк до Client container/proxy server, а соответственно в браузере настраивается socks5 proxy который открывает путь и мир наших форумов. Не забываем про галочку proxy DNS.
Для примера выложу часть docker-compose файла. Сразу прошу прощения за то что не выкладываю готовый POC (интеллектуальная собственность так сказать). А опытным админам ничего не стоит повторить схему.
Код:
version: '3.8'
services:
# Container 1: Router (starts with no network)
router:
image: alpine
command: sleep infinity
network_mode: "none"
container_name: router
cap_add:
- NET_ADMIN # Required for network/routing config
sysctls:
- net.ipv4.ip_forward=1 # Enable IP forwarding
# Container 2: Network Configurator
macvtap-configurator:
image: alpine
privileged: true
depends_on:
- router
- client
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /proc:/hostproc
command: >
sh -c "
# Get router and client PIDs
ROUTER_PID=$$(docker inspect -f '{{.State.Pid}}' router)
CLIENT_PID=$$(docker inspect -f '{{.State.Pid}}' client)
# Create macvtap interfaces
ip link add router-macvtap link eth0 type macvtap mode bridge
ip link add client-macvtap link eth0 type macvtap mode bridge
# Assign MAC addresses
ip link set router-macvtap address 02:42:ac:11:00:01
ip link set client-macvtap address 02:42:ac:11:00:02
# Move interfaces to containers' network namespaces
ip link set router-macvtap netns /hostproc/$$ROUTER_PID/ns/net
ip link set client-macvtap netns /hostproc/$$CLIENT_PID/ns/net
# Configure IP addresses
nsenter -t $$ROUTER_PID -n ip addr add 192.168.1.100/24 dev router-macvtap
nsenter -t $$CLIENT_PID -n ip addr add 192.168.1.101/24 dev client-macvtap
# Bring interfaces up
nsenter -t $$ROUTER_PID -n ip link set router-macvtap up
nsenter -t $$CLIENT_PID -n ip link set client-macvtap up
# Set client's default route through router
nsenter -t $$CLIENT_PID -n ip route add default via 192.168.1.100
# Configure NAT on router
nsenter -t $$ROUTER_PID -n iptables -t nat -A POSTROUTING -o router-macvtap -j MASQUERADE
"
# Container 3: Client (starts with no network)
client:
image: alpine
command: sleep infinity
network_mode: "none"
container_name: client
cap_add:
- NET_ADMIN