3 pontos por GN⁺ 2024-08-11 | 1 comentários | Compartilhar no WhatsApp
  • OpenSnitch é um firewall de aplicações para GNU/Linux, com foco em filtrar de forma interativa as conexões externas das aplicações
  • Permite bloquear domínios de anúncios, rastreadores e malware em todo o sistema, e também configurar no GUI o firewall do sistema baseado em nftables
  • O GUI oferece suporte à configuração de regras do sistema, como definir políticas de entrada e permitir serviços inbound, além de gerenciar vários nós de forma centralizada
  • A instalação é feita baixando pacotes deb/rpm, instalando-os com apt ou dnf e então executando opensnitch-ui ou abrindo o GUI pelo menu de aplicações
  • Oferece um espaço de discussão Show and tell para compartilhar casos de interceptação de conexões inesperadas, além de integração com SIEM para uso no monitoramento de conexões em ambientes operacionais

O que o OpenSnitch faz

Recursos de firewall e gerenciamento de nós

Download e instalação

  • Os pacotes deb/rpm podem ser baixados em GitHub Releases
  • Instalação do pacote deb:
    • sudo apt install ./opensnitch*.deb ./python3-opensnitch-ui*.deb
  • Instalação do pacote rpm:
    • sudo dnf install opensnitch*.rpm
  • Após a instalação, execute opensnitch-ui ou inicie o GUI pelo menu de aplicações
  • Para informações detalhadas de instalação, consulte a documentação

Casos de uso e participação

Informações do projeto

1 comentários

 
GN⁺ 2024-08-11
Comentários no Hacker News
  • Tentei muito usar o OpenSnitch como firewall interativo, mas existe um problema que não é exatamente culpa do OpenSnitch, e nem sei se dá para resolver
    Por exemplo, se você executa curl no terminal, precisa decidir toda vez se permite ou então colocá-lo permanentemente na lista de permissões
    Mas se você permitir ferramentas genéricas como curl ou wget, até malware em uma máquina comprometida pode usar essas ferramentas para acessar a internet sem alertas do firewall, ou seja, a porta fica escancarada

    • Usando wildcards de subdomínio ou sub-redes, dá para montar rapidamente um conjunto de regras estável, e depois só revisar de vez em quando pedidos para novos endpoints
      A tranquilidade de saber que qualquer novo acesso vai pedir permissão faz valer a pena o incômodo inicial, e depois que vira hábito a administração fica bem fácil
      Também uso bastante regras com expiração. Por exemplo, se eu confio num instalador e quero deixá-lo mais livre por um tempo, abro uma regra para o executável que expira em breve. As opções são permanente, até reiniciar, pelos próximos 30 segundos, pelos próximos 5 minutos etc., e isso simplifica muito tarefas com muitos endpoints sem deixar brechas permanentes
    • Parece que também daria para permitir todo o tráfego de curl/wget para o usuário dev, e continuar detectando no usuário normal
      O trabalho de desenvolvimento seria executado como su -c curl … dev
      Se um programa malicioso estiver rodando no espaço do usuário comum, o firewall de aplicação pode capturar adequadamente o uso de curl e wget
      Digitar senha toda vez é chato, então você pode configurar o PAM com YubiKey ou autenticação biométrica, e esse usuário não deve poder fazer login nem ter senha
    • Isso soa meio estranho. Se você está realmente preocupado, também pode renomear curl ou wget
      Eu uso firewall em nível de aplicação no celular, mas em vez de colocar o nome do programa na lista de permissões, permito que um programa específico acesse um domínio/endereço IP específico
      Pela minha experiência, a forma mais fácil de bloquear comunicação externa de programas ou malware é bloquear acesso a DNS. Faço isso há décadas e ainda funciona perfeitamente. “99%” dos programas/malwares que fazem comunicação externa dependem de DNS, não de IPs codificados diretamente
      Os raros programas/malwares que não precisam de DNS também são fáceis de detectar, e no DNS eu permito apenas domínios específicos. Hoje em dia eu nem uso mais arquivos de zona locais com os IPs necessários; um proxy de encaminhamento faz o mapeamento domínio→IP. A lista de permissões lida pelo proxy é parecida com um arquivo de zona, mas é um arquivo de texto mais simples
    • Talvez dê para configurar algo como: se o comando pai for confiável, por exemplo um bash/zsh pertencente ao usuário, deixa o curl passar; caso contrário, bloqueia. Mas parece bem trabalhoso
    • Esse tipo de problema dá para resolver. Alguns EDRs grandes que funcionam de forma parecida permitem declarar relações de pai/filho para executáveis a bloquear
      Por exemplo, se curl for executado e, ao subir pela lista de processos pais, encontrar um processo /usr/bin/trusted, deveria ser possível declarar que essa chamada de curl é permitida. Assim, desde que o script bash tenha /usr/bin/trusted como processo pai, você pode permitir a execução de curl a partir desse script
  • Foi isso que acabou me levando para o NixOS
    Quando eu usava firewall de aplicação antigamente, havia muita configuração, tudo quebrava com frequência quando atualizações mudavam caminhos, e ao migrar para um computador novo eu tinha que refazer tudo do zero, o que gerava muita rotatividade e desperdício
    Integrando com o gerenciador de pacotes, esse problema sumiu. Depois de concluir a configuração inicial da lista de permissões, basta fazer um pequeno ajuste quando você adiciona um pacote novo na configuração do nix
    Se der preguiça de adicionar a permissão na configuração do nix, você pode criar uma lista de permissões temporária que dura só até o próximo reboot. A curva de aprendizado foi íngreme e exigiu trabalho, mas agora a manutenção é muito fácil

    • Fiquei curioso se isso foi implementado com a opção do OpenSnitch no Nix em search.nixos.org/options
  • É ótimo para detectar apps malfeitos que criam conexões demais. Estou olhando para você, Thunderbird
    Gosto dele, mas tem um pequeno incômodo. Regras temporárias expiradas não são removidas nem exibidas na interface, então às vezes é preciso reiniciar a GUI para limpá-las

    • É chato dizer isso, mas um PR provavelmente seria muito bem-vindo. Claro que eu mesmo quase não tenho tempo
  • No Fedora, eu recomendaria isso em vez de ficar mexendo com firewalld/firewall-config

  • Eu gostaria de algo assim ao rodar APIs ou serviços web em contêineres Docker
    containerA: permitir todo o tráfego de saída
    containerB: bloquear tráfego de saída, exceto ao responder clientes
    containerC: só pode acessar updates.example.com
    Isso seria só iptables por contêiner? Até daria para enfiar iptables na imagem existente, mas parece dar muito trabalho. Ou seria algo feito com iptables no host?

    • Só queria acrescentar que netfilter, ou seja, aquilo para o qual o iptables serve de frontend, é um subsistema do kernel, então se aplica globalmente a todos os contêineres do host
  • Existe algo assim para celulares Android? Gostaria de boas recomendações

    • Tem o NetGuard. Só que a maioria dos recursos de conveniência fica atrás de pagamento pequeno
      https://netguard.me
    • O GrapheneOS pelo menos permite bloquear o tráfego de internet de apps específicos. Mas não por faixa de portas nem por domínio específico
    • Infelizmente, firewalls de verdade exigem acesso root
      Usei o AFWall+ por muito tempo, e os controles para permitir ou bloquear Wi‑Fi, celular e LAN por app são bem elegantes. Como é um frontend para iptables/nftables, você pode personalizar as regras o quanto quiser: https://github.com/ukanth/afwall
      Funciona desde o Android 2+
      Sem root, só restam soluções no estilo VPN, como o Adguard
      Se você quiser estatísticas, também existe a versão Android do GlassWire. Só usei a beta, então não sei como está hoje, mas vale conferir
    • O app "Rethink: DNS + Firewall + VPN" tem recursos parecidos
    • AFWall+
      Migrei para ele a partir do NetGuard citado acima
  • Seria bom ter pacotes para Arch e OpenSUSE também

    • No Arch Linux existe pacote oficial. Só que, por algum motivo, o módulo eBPF não vem incluído, então é preciso pegá-lo separadamente no AUR
    • No repositório extra do Arch tem opensnitch, e no AUR tem opensnitch-ebpf-module
  • Como ele se compara a algo como o UFW? Imagino que o principal seja a interface para ver a atividade em andamento

    • O OpenSnitch pergunta quando há atividade de rede
      Se algum app qualquer fizer uma chamada de telemetria ou algo do tipo, você pode definir listas branca/cinza bem granulares, como permitir apenas conexões desse executável para este endereço, ou sempre permitir este endereço, com opções de duração como uma vez só, por 15 segundos, até reiniciar etc.
      Depois que você supera a barreira inicial de colocar na lista de permissões os apps que usa e em que confia, ele é muito bom e mostra bem coisas que apps ou jogos estão fazendo sem você saber
    • Até onde eu sei, o UFW não é um firewall de aplicação; ele só bloqueia/permite números de porta no sistema inteiro
  • Será que existe algum plano de portar isso para macOS? Usei o Little Snitch por um tempo, mas por motivos alheios a pagamento prefiro mais software livre

    • É só usar o LuLu
  • Já tentei usar de forma intermitente várias vezes, mas havia crashes aleatórios demais, então era bem difícil de usar