Princípios de Segurança Aplicados¶
A segurança é uma preocupação primordial em qualquer servidor, especialmente um que pode expor serviços à internet. Esta arquitetura foi projetada com vários princípios e camadas de segurança em mente.
Defesa em Camadas (Defense in Depth)¶
A estratégia de segurança aqui não depende de uma única solução, mas de múltiplas camadas de proteção. Se uma camada falhar ou for contornada, outras ainda estarão em vigor.
graph TD
subgraph Externa
Internet[Internet]
end
subgraph Camada_Cloudflare [1. Perímetro Cloudflare]
CF_Firewall[WAF/DDoS Protection]
CF_Tunnel_Endpoint[Cloudflare Tunnel Endpoint]
end
subgraph Camada_Rede_Local_Segura [2. Rede Local Segura (Sem Portas Abertas)]
Roteador[Roteador Doméstico (Firewall Ativo)]
CFT_Agent[cloudflared Agent (Conexão de Saída)]
end
subgraph Camada_Proxy_Autenticacao [3. Proxy Reverso e Autenticação (core-services-vm)]
Traefik[Traefik (HTTPS, Roteamento)]
Authelia[Authelia (2FA)]
end
subgraph Camada_Host_Proxmox [4. Segurança do Hypervisor]
PVE_Firewall[Proxmox VE Firewall]
SSH_Hardening_Host[SSH Hardening (Host)]
ZFS_Integrity[ZFS (Integridade de Dados)]
end
subgraph Camada_VM [5. Segurança das Máquinas Virtuais]
UFW_VM[UFW Firewall (VMs)]
Atualizacoes_VM[Atualizações SO VM]
User_Isolation_VM[Isolamento de Usuários (VMs)]
end
subgraph Camada_Container_Aplicacao [6. Segurança de Containers e Aplicações]
Docker_Isolation[Isolamento de Containers]
MinPriv_Container[Princípio Menor Privilégio (PUID/PGID)]
App_Passwords[Senhas Fortes de Aplicação]
App_Updates[Atualizações de Imagens/Apps Docker]
end
Internet --> CF_Firewall
CF_Firewall --> CF_Tunnel_Endpoint
CF_Tunnel_Endpoint -.-> CFT_Agent
CFT_Agent --> Traefik
Traefik <--> Authelia
Traefik --> Camada_Container_Aplicacao
Proxmox --> PVE_Firewall
Proxmox --> SSH_Hardening_Host
Proxmox --> ZFS_Integrity
Proxmox -- Hospeda --> Camada_VM
Camada_VM -- Contém --> Camada_Proxy_Autenticacao
Camada_VM -- Contém --> Camada_Container_Aplicacao
Camada_VM --> UFW_VM
Camada_VM --> Atualizacoes_VM
Camada_VM --> User_Isolation_VM
-
Camada de Perímetro (Cloudflare):
- Ocultação de IP: Seu IP doméstico não é exposto publicamente.
- Proteção DDoS: Cloudflare absorve ataques DDoS em sua borda.
- Web Application Firewall (WAF): Regras básicas do WAF da Cloudflare podem bloquear tráfego malicioso comum.
- Cloudflare Tunnel: Garante que apenas tráfego autenticado e roteado pela Cloudflare chegue à sua rede interna via uma conexão de saída segura. Nenhuma porta de entrada precisa ser aberta no seu roteador.
-
Camada de Proxy Reverso e Autenticação (na
core-services-vm):- Traefik:
- Força HTTPS para todo o tráfego externo.
- Gerencia certificados SSL/TLS automaticamente via Let's Encrypt.
- Atua como um único ponto de entrada, dificultando o acesso direto aos containers de aplicação.
- Authelia:
- Fornece autenticação forte (usuário/senha + 2FA) para todos os serviços configurados.
- Protege contra ataques de força bruta nas credenciais.
- Oferece um portal de login centralizado.
- Traefik:
-
Camada de Segurança do Host Proxmox VE:
- Proxmox VE Firewall (PVE Firewall): Configurado para
DROPpor padrão no tráfego de entrada, permitindo apenas SSH e a UI web do Proxmox a partir de CIDRs específicos da sua rede local. - SSH Hardening no Host Proxmox:
- Login como
rootvia SSH desabilitado (apenasprohibit-password). - Autenticação por senha desabilitada (
PasswordAuthentication no), forçando o uso de chaves SSH.
- Login como
- Atualizações Regulares do Host: Manter o Proxmox VE e o Debian subjacente atualizados.
- Proxmox VE Firewall (PVE Firewall): Configurado para
-
Camada de Segurança das Máquinas Virtuais (VMs):
- UFW (Uncomplicated Firewall): Habilitado nas VMs (
core-services-vmeai-desktop-vmse tiver GUI) para controlar o tráfego de entrada para as próprias VMs, permitindo apenas as portas necessárias (e.g., 80/443 para Traefik, 22 para SSH, 12345 para o Alloy, só a partir dacore-services-vm). - Portas na LAN sem autenticação: Prometheus (9090, remote write), Loki (3100) e Alloy (12345, interface e
/metrics) não têm login; ficam só na LAN, sem rota no Traefik nem no túnel. Portas publicadas pelo Docker não passam pelo UFW; quem limita o 9090 e o 3100 é a cadeiaHOMESERVERnaDOCKER-USER(firewall_docker_portas), que só deixa passar o host Proxmox e aai-desktop-vm. O 12345 é limitado pelo UFW e pelo PVE Firewall àcore-services-vm. - Gateway de IA (LiteLLM): a API (4000) e as métricas (4001) ficam só na LAN; de fora, só a tela de uso em
llm., atrás do Authelia. As chaves dos provedores ficam só no container do LiteLLM; cada cliente usa uma chave virtual com orçamento mensal, revogável sem trocar as dos provedores. O Ollama não publica porta. - Portainer Agent (9001) na ai-desktop-vm: publicado só no IP da LAN e limitado à
core-services-vmpela cadeiaHOMESERVER(o UFW não filtra portas do Docker); além disso, o agente só aceita quem conhece oAGENT_SECRET(portainer_agent_secretdo vault), e quem tem esse segredo controla o Docker da VM. - Jellyfin e Seerr públicos: ficam na internet pelo túnel, sem Authelia, porque os apps de TV e celular do Jellyfin não sabem passar por ele. Proteções: bloqueio após tentativas de login erradas no Jellyfin, senhas fortes, admin sem acesso remoto e usuários sem permissão de administração. Atenção: as regras de uso da Cloudflare restringem servir vídeo em volume pelo túnel; se a conta for advertida, a alternativa é assistir fora de casa pela VPN (Tailscale) e tirar o Jellyfin do túnel.
- Immich, Nextcloud e Collabora públicos: ficam na internet pelo túnel, sem o forward-auth do Authelia (os apps de celular e desktop não passam por ele), mas o login de cada um é o OIDC do próprio Authelia, com
two_factor; o Immich não cria contas pelo OIDC (autoRegisterdesligado) e o login por senha é desligado depois do primeiro acesso. O Collabora só edita documentos deste Nextcloud (aliasgroup1) e cada documento exige um token WOPI. Ver Fotos e Arquivos. - Agentes autônomos com aprovação humana: os agentes do posto e o assistente do Telegram trabalham sem ninguém olhando, então usam uma rota própria do hub (4200, só da
ai-desktop-vm): leem tudo e agem só peloops, que transforma cada ação num pedido com botões no Telegram e na telaaprovacoes.(seção 16). O assistente não tem terminal, código nem internet (seção 17). - VPN (Tailscale) e rota de controle: a
core-services-vmé subnet router das duas VMs (seção 14). A rota de controle do hub (4100), que age no servidor, não aceita ninguém pela LAN: só pela VPN, cifrada pelo WireGuard, e com a chave de cada cliente. A ACL do painel do Tailscale decide quem da VPN alcança o quê. - qBittorrent só pela VPN: ele usa a rede do gluetun (ProtonVPN); se o túnel cair, o firewall do gluetun corta a saída e o IP de casa não aparece no enxame.
- Alloy como root nas VMs: necessário para o cAdvisor ler
/var/lib/dockere para os logs dos containers; no host Proxmox ele roda como o usuárioalloy. - Atualizações Automáticas (
unattended-upgrades): Configuradas nas VMs Ubuntu para aplicar patches de segurança automaticamente. - Isolamento: As VMs são naturalmente isoladas umas das outras e do host pelo hypervisor.
- UFW (Uncomplicated Firewall): Habilitado nas VMs (
-
Camada de Segurança de Containers e Aplicações:
- Isolamento de Containers Docker: Docker fornece isolamento entre containers.
- Princípio do Menor Privilégio para Containers:
- Muitos containers (especialmente os da linuxserver.io) são configurados para rodar com um usuário não-root dentro do container, usando as variáveis de ambiente
PUID(User ID) ePGID(Group ID). - Esses
PUID/PGIDcorrespondem ao usuáriodockerusere grupodockergroupcriados nas VMs, que por sua vez são os "donos" dos arquivos nos volumes NFS devido às opções deanonuid/anongidno export NFS.
- Muitos containers (especialmente os da linuxserver.io) são configurados para rodar com um usuário não-root dentro do container, usando as variáveis de ambiente
- Senhas Fortes para Aplicações: Usar senhas únicas e fortes para as contas de administrador de cada aplicação (Nextcloud, Grafana, etc.).
- Atualizações de Imagens Docker: O Diun avisa quando uma imagem tem versão nova, e a atualização é feita manualmente, depois de ler as notas de release, para manter as imagens nas versões mais recentes e seguras.
security_opt: [no-new-privileges:true]: Usado em algunsdocker-compose.ymlpara impedir que um container ganhe mais privilégios.
Gerenciamento de Segredos¶
- Ansible Vault: Todas as senhas, tokens de API e outros dados sensíveis usados pela automação Ansible são armazenados de forma criptografada no arquivo
ansible/inventories/home/group_vars/all/vault.yml. - Secrets das stacks: Todo segredo de aplicação fica no
vault.ymle é gravado pelo Ansible no.envda stack (/opt/portainer_stack_envs/*.env,mode: '0600'), que o Portainer carrega no deploy. Nada é digitado à mão na UI do Portainer (ver "Origem dos valores" no índice de integrações).
Resiliência de Dados e Backups¶
Embora não seja estritamente um princípio de segurança contra intrusão, a capacidade de recuperar dados após uma falha (de hardware, software, ou mesmo um ataque de ransomware) é uma parte crucial da postura geral de segurança e disponibilidade.
- ZFS: Oferece integridade de dados, snapshots e RAID para o pool
/data. - Estratégia de Backup 3-2-1: Implementada para configurações do Proxmox, VMs e dados de aplicações (detalhada na Seção de Manutenção e Recuperação).
A segurança é um processo contínuo, não um estado final. É importante manter-se informado sobre novas vulnerabilidades, revisar suas configurações periodicamente e adaptar suas defesas conforme necessário.