Como controlar o acesso à Internet para cada programa?

60

Eu gostaria de usar um software para controlar qual programa pode se conectar à Internet. Sei que esse comportamento está associado à palavra "firewall", mas alguns usuários do Linux ficam muito chateados se alguém exige um firewall pessoal. Não quero incomodá-lo com a demanda de um programa desse tipo.
Não quero "portas seguras" ou outras coisas que o Personal Firewall promete no Windows. Examinei, iptablesmas ele não se encaixa nos meus requisitos.

Vi uma excelente resposta aqui ( "Como bloquear o acesso à Internet para aplicativos de vinho" ), mas é muito desconfortável configurá-lo.

Existe um software que solicite a cada programa se ele pode acessar a Internet?

guerda
fonte
no mac, existe um software chamado pequeno delator que faz isso. Eu acho que há uma versão do Windows também ...
Alvar

Respostas:

6

Há um script Perl no fórum alemão do Ubuntu ( traduzido pelo Google para o inglês ) que parece fazer isso. Eu nunca tentei e não olhei mais de perto o script, mas talvez funcione para você. A descrição está apenas em alemão; portanto, você pode precisar de um serviço de tradução (como o Google Tradutor; veja acima).

Florian Diesch
fonte
Vou dar uma olhada nisso. É interessante e pode ser a ferramenta certa. Infelizmente, não há nenhuma gui, mas não deve impedir-me :)
Guerda
35

Caso você ainda esteja procurando esse tipo de aplicativo, atualmente estou desenvolvendo exatamente esse aplicativo: http://douaneapp.com/ https://gitlab.com/douaneapp/Douane

Meu aplicativo bloqueia todos os aplicativos desconhecidos (novas versões de um aplicativo autorizado são bloqueadas) e pergunta se você permite ou nega o tráfego.

Dê uma olhada no site ;-)

captura de tela

ZedTuX
fonte
Legal! Eu também olhei para o ppa, mas nenhum pacote lá, apesar da aplicação ser criada lá. Também gostaria de saber se poderia mostrar o ip resolvido para um nome de site legível? E, seguirei as instruções de compilação, vi muitas dicas para os pacotes dep do ubuntu lá e usarei o checkinstall para criar minha cópia local dos pacotes .deb para gerenciar facilmente as atualizações (remover / instalar). Pode ser que checkinstall também possa ser usado para criar seus distribuíveis, eu acho.
Aquarius Power
Você pode abrir a solicitação de recursos no Github ( github.com/Douane/Douane/issues ) :)
ZedTuX
2
Parece exatamente o que eu precisava! Mas não consigo encontrar um pacote para instalá-lo no Ubuntu.
azerafati
Ainda não pacote para Ubuntu?
Anwar
11
Douaneapp.com está de volta! :)
ZedTuX
26

Eu encontrei uma solução conveniente que resolve o problema. Você cria um grupo que nunca tem permissão para usar a Internet e inicia o programa como um membro deste grupo.

  1. Crie um grupo no-internet. Você não aderir a este grupo

    sudo addgroup no-internet
    
  2. Adicione uma regra ao iptables que impeça que todos os processos pertencentes ao grupo no-internetusem a rede (use ip6tablestambém para impedir o tráfego IPv6)

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. Executar em sudo -g no-internet YOURCOMMANDvez de YOURCOMMAND.

Você pode escrever facilmente um script de wrapper que use o sudo para você. Você pode se livrar do prompt de senha adicionando

%sudo     ALL=(:no-internet)      NOPASSWD: ALL

ou algo semelhante com sudo visudo

Use as regras de firewall para persistir iptables-savee iptables-restore.

Tim
fonte
11
Eu tentei o seu guia, sudo -g no-internet firefoxconecta mais rápido que o padrão. Isso não funciona.
Kennedy
11
@kenn Só posso dizer que funciona bem aqui. Eu acho que você está fazendo algo errado ao criar a regra. Não salvando a regra, não tornando o script executável ou algo assim.
Tim
Eu reiniciado e aplicado acima regras novamente sem sorte
kenn
11
funcionou perfeitamente para mim, mesmo com o Firefox. obrigado!
Kostanos
11
Isso também não parece funcionar para mim no Ubuntu 19.04. Eu tive que instalar o iptables-persistent para permitir que as alterações fossem salvas entre as reinicializações. (Então, você pode adicionar isso à solução acima). No entanto, o sudo -g no-internet firefox não restringe o Firefox de acessar a Internet. Conceitualmente, esta solução parece que deveria funcionar. Existe algo fundamental que está sendo esquecido? Por exemplo, precisamos configurar o ipv4 e o ipv6 para fazer isso funcionar?
PJ Singh
5

Já existe um firewall no Ubuntu ufw, mas está desativado por padrão. Você pode habilitá-lo e usá-lo pela linha de comando ou seu front-end, gufw , que é instalável diretamente no Ubuntu Software Center.

Se você precisar bloquear o acesso da Internet a um aplicativo específico, tente o LeopardFlower , que ainda está na versão beta e não está disponível no Ubuntu Software Center:

heiko81
fonte
4

A execução de um programa com outro usuário usará os arquivos de configuração desse usuário e não o seu.

Aqui está uma solução que não requer modificação das regras do firewall e é executada no mesmo usuário (via sudo) com um ambiente modificado, onde o usuário está my_usere o aplicativo que você deseja executar é my_app:

# run app without access to internet
sudo unshare -n sudo -u my_user my_app

Para mais detalhes, veja man unsharee esta resposta .

Firewall da GUI do Linux

Se você está procurando um firewall GUI, obtive bons resultados com o OpenSnitch - ele ainda não está nos repositórios do ubuntu e não o chamaria de nível de produção, mas seguir as etapas de compilação da página do github funcionou para mim.

ccpizza
fonte
3

@psusi: Eu realmente gostaria que as pessoas não vendessem informações ruins e não úteis. O IPTables permite fazer isso, então eu dificilmente consideraria "imprudente". Apenas dizer "NÃO" sem entender um caso de uso é um pouco limitado. http://www.debian-administration.org/article/120/Application_level_firewalling

EDIT bodhi.zazen

NOTA: ESTA OPÇÃO FOI REMOVIDA DE IPTABLES EM 2005, 8 ANOS ANTES DE ESTA RESPOSTA FOI POSTADA

VER - http://www.spinics.net/lists/netfilter/msg49716.html

commit 34b4a4a624bafe089107966a6c56d2a1aca026d4 Autor: Christoph Hellwig Data: Sun Ago 14 17:33:59 2005 -0700

[NETFILTER]: remova o abuso tasklist_lock no proprietário do ipt {, 6}

Retire a correspondência de cmd / sid / pid, pois sua quebra não pode ser corrigida e impede o bloqueio de alterações no tasklist_lock.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
user141987
fonte
2
Para quem pensa em sinalizar isso: este não deve ser um comentário, mas responde à pergunta que foi feita . @ user141987 No entanto, recomendo expandir isso para fornecer mais informações sobre como configurar iptablespara implementar restrições por aplicativo. Eu recomendo incluir as informações importantes em sua resposta (e ainda fornecer o link, para referência).
Elias Kagan
2
O iptables NÃO filtra por aplicativo.
Pantera
Esse artigo parece ser desinformação, pois não existe essa opção. A razão pela qual as solicitações para criar essa opção no passado foram rejeitadas é porque seria inerentemente não confiável; um aplicativo pode simplesmente mudar seu nome.
precisa saber é
3
@psusi Você está dizendo "Se o seu kernel foi compilado com CONFIG_IP_NF_MATCH_OWNER, você pode configurar o firewall do iptables para permitir ou rejeitar pacotes por comando" está incorreto? Ou simplesmente que a maioria dos kernels não inclui a opção? Se isso estiver incorreto, existem fontes de informações que o desmascaram? (Além disso, observe que o objetivo principal das restrições de firewall por aplicativo não é tentar torná-lo perfeitamente seguro para executar aplicativos não confiáveis. O objetivo é principalmente fornecer ao usuário uma medida de controle além das opções de configuração internas dos aplicativos. )
Eliah Kagan 21/03
Esta opção foi removida do kernel em 2005, 8 anos antes de esta resposta ser dada - spinics.net/lists/netfilter/msg49716.html e, apesar de afirmações em contrário serem imprecisas, você NÃO pode filtrar aplicativos com iptables.
Panther
3

Outra opção é firejail . Ele executa o aplicativo dentro da sandbox, onde você controla se o aplicativo pode ver a rede:

firejail --net=none firefox

Este comando iniciará o navegador Firefox sem acesso à Internet. Observe que a distribuição firejail no repositório Ubuntu está desatualizada - faça o download melhor da versão mais recente do LTS na página inicial do firejail.

Dimitar II
fonte
2

Eu encontrei a solução postada aqui para ser uma boa. Isso envolve a criação de um grupo de usuários para o qual o acesso à Internet é permitido e a configuração de regras de firewall para permitir o acesso apenas a esse grupo. A única maneira de um aplicativo acessar a Internet é se ele for executado por um membro deste grupo. Você pode executar programas nesse grupo abrindo um shell com sudo -g internet -s.

Para recapitular o conteúdo do post que eu vinculei acima:

  1. Crie o grupo "internet" digitando o seguinte em um shell: sudo groupadd internet

  2. Certifique-se de que o usuário que irá executar o script abaixo é adicionado ao sudogrupo em /etc/group. Se você acabar modificando esse arquivo, precisará fazer logoff e logon novamente antes que o script abaixo funcione.

  3. Crie um script contendo o seguinte e execute-o:

    #!/bin/sh
    # Firewall apps - only allow apps run from "internet" group to run
    
    # clear previous rules
    sudo iptables -F
    
    # accept packets for internet group
    sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
    
    # also allow local connections
    sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
    
    # reject packets for other users
    sudo iptables -A OUTPUT -p tcp -j REJECT
    
    # open a shell with internet access
    sudo -g internet -s
    
  4. Ao executar o script acima, você terá um shell no qual poderá executar aplicativos com acesso à Internet.

Observe que esse script não faz nada para salvar e restaurar suas regras de firewall. Você pode modificar o script para usar os comandos iptables-savee iptables-restoreshell.

Marca
fonte
1

Para melhor ou pior, o Linux usa uma abordagem diferente. Não existe uma interface gráfica simples para oferecer essa funcionalidade. Existem muitas discussões sobre esse tópico na internet e você pode encontrar discussões interessantes se pesquisar no Google. Embora o debate seja interessante, até o momento não houve um grupo dedicado de programadores que desejassem escrever e manter essa funcionalidade.

As ferramentas que oferecem essa funcionalidade no Linux são Apparmor, Selinux e Tomoyo.

Nenhuma dessas ferramentas é muito fácil de aprender e todas têm vantagens e desvantagens. Pessoalmente, prefiro o SELinux, embora o SELinux tenha uma curva de aprendizado mais acentuada.

Vejo:

http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distributions/

Havia (é) um aplicativo que já foi referenciado, leopardflower. Não tenho certeza do status / manutenção.

Pantera
fonte
0

Não, não é possível. Também não faz parte da definição tradicional de firewall. É algo que a Microsoft apresentou recentemente, na tentativa de ocultar seus problemas de segurança do sistema operacional fundamentalmente quebrados. É considerado imprudente e impraticável na comunidade Linux, porque um programa que não é permitido pode simplesmente executar outro programa que é e obter acesso dessa maneira.

Se você não gostar do que um programa está fazendo na rede ao executá-lo, não execute esse programa.

psusi
fonte
7
O firewall da Microsoft não foi o primeiro grande firewall a oferecer essa funcionalidade. Não foi nem o primeiro firewall do Windows a oferecê-lo. O BlackIce Defender, o ZoneAlarm e uma variedade de outros firewalls de software para Windows são anteriores à introdução do Firewall do Windows Internet Connection por anos. Além disso, não existe esse consenso na comunidade Linux. Costumamos usar o AppArmor (ou SELinux) para restringir o comportamento dos aplicativos (e me pergunto se o AppArmor poderia ser adaptado para esse objetivo ...). Não há razão para estar "errado" querer controlar quais aplicativos podem acessar a Internet.
Elias Kagan
E, como várias outras respostas podem atestar, as restrições de firewall por aplicativo são bem possíveis ; essa funcionalidade está embutida no iptables / netfilter!
Elias Kagan
Não, nem o netfilter nem o iptables podem filtrar por aplicativo. Eles podem filtrar por usuário e porta, mas não por aplicativo.
Pantera
"Pode simplesmente executar outro" ???? Então, obviamente, o criador de um programa que não bloqueia os processos filhos do programa de destino é muito falha.
trusktr