Skip to content

Plataformas suportadas ​

O EzyShield é um único binário Go estático, sem dependências de runtime, então roda em qualquer Linux 64-bit moderno com nftables e systemd. "Suportado" aqui significa algo mais forte que "deveria rodar": cada célula verde na matriz abaixo é exercitada pelo round-trip armado ponta a ponta — uma VM descartável instala o EzyShield do jeito real (curl … | sudo sh), roda ezyshield init, arma o daemon, bane um IP de teste e verifica que ele cai no set nftables ativo. Esse é exatamente o caminho que um ban real percorre, então uma célula verde significa que toda a cadeia daemon↔enforcer com separação de privilégios funciona naquela plataforma.

A matriz cresce junto com o projeto e é atualizada a cada release.

Matriz de suporte ​

Legenda:

  • ✅ verificado — o e2e armado no QEMU passa ponta a ponta nesta plataforma
  • 🟢 host de produção — validado adicionalmente em um servidor de produção (atacantes reais detectados e banidos)
  • 🧪 candidato — conectado ao harness, ainda não confirmado verde
  • ☐ planejado — no roadmap, ainda não executado
DistroVersãox86_64arm64
Ubuntu24.04 LTS (noble)✅☐
Ubuntu25.04 (plucky)🟢☐
Debian12 (bookworm)✅☐
Debian13 (trixie)🧪🧪
AlmaLinux9🧪🧪
Rocky Linux9🧪🧪

Rodadas x86_64 usam KVM; arm64 é emulado com qemu-system-aarch64 (TCG) em um host x86_64, ou acelerado com KVM em um runner arm64 nativo. Guests arm64 bootam um binário cross-compilado (GOARCH=arm64) — o mesmo artefato que o pipeline de release publica — então uma célula arm64 exercita o build arm64 de verdade, não uma camada de tradução.

Família RHEL (Alma/Rocky) é candidata. O harness conhece as cloud images, o usuário do guest, o sudoers via wheel e o conjunto de pacotes delas, mas o round-trip ainda não foi confirmado verde — trate essas células como best-effort até uma rodada acontecer.

Rodando uma célula da matriz ​

O harness fica em scripts/qemu-e2e.sh. Ele compila o binário da sua working tree, serve por um servidor HTTP em loopback, boota uma cloud image e roda o instalador contra ela — nada é publicado, e nada toca o firewall do seu host (os passos destrutivos rodam dentro do guest descartável).

Escolha uma distro e arquitetura com duas variáveis de ambiente:

bash
# Preflight — imprime o plano resolvido (imagem, binário qemu, firmware) sem bootar
EZY_DISTRO=ubuntu2404 EZY_ARCH=amd64 scripts/qemu-e2e.sh config

# Round-trip armado completo: build → install → init → ban → assert
EZY_DISTRO=ubuntu2404 EZY_ARCH=amd64 scripts/qemu-e2e.sh up

# Inspecionar, re-rodar só as asserções, ou derrubar tudo
scripts/qemu-e2e.sh ssh
scripts/qemu-e2e.sh verify
scripts/qemu-e2e.sh down

EZY_DISTRO aceita debian12, debian13, ubuntu2404, ubuntu2504, alma9, rocky9; EZY_ARCH aceita amd64 (padrão: seu host) e arm64. Para uma imagem fora da tabela, defina EZY_IMG_URL, EZY_GUEST_USER e EZY_FAMILY (deb ou rhel) no lugar de EZY_DISTRO, e fixe a imagem com EZY_IMG_SHA256=<hex>.

As cloud images são baixadas por HTTPS e verificadas contra o arquivo de checksums publicado pela distro (SHA512SUMS / SHA256SUMS / CHECKSUM) antes do primeiro boot. O digest verificado fica cacheado ao lado da imagem, então re-execuções re-verificam o arquivo em cache sem baixar de novo — uma imagem cacheada corrompida aborta a execução em vez de ser reutilizada em silêncio. Uma EZY_IMG_URL customizada só é verificada quando EZY_IMG_SHA256 está definida; sem ela o harness avisa e pula a verificação.

Requisitos do host ​

AlvoPrecisa de
guest x86_64 em host x86_64qemu-system-x86 + /dev/kvm
guest arm64 em host x86_64qemu-system-arm + qemu-efi-aarch64 (firmware UEFI); roda sob TCG — lento
guest arm64 em host arm64qemu-system-arm + qemu-efi-aarch64 + /dev/kvm

Todo alvo também precisa de cloud-image-utils (para cloud-localds), qemu-utils (para qemu-img), go, python3 e uma chave pública SSH (~/.ssh/id_rsa.pub por padrão, ou aponte EZY_SSH_KEY para outra).

⚠️ scripts/qemu-e2e.sh up e o scripts/e2e-install-test.sh (rodado no guest) são destrutivos por design — criam o usuário ezyshield, instalam units do systemd e escrevem regras nftables. Rode-os apenas na VM descartável, nunca em uma workstation.

Veja o guia de instalação para os formatos de pacote suportados e o caminho a partir do código-fonte.