script iptables para bloquear todo o acesso à Internet, exceto para os aplicativos desejados

CONTEXTO:

Eu queria ter um script de shell que bloqueasse todo o tráfego de entrada / saída para o meu computador, a menos que eu decida usar o navegador ou algum outro aplicativo; nesse caso, eu o convocaria e somente esses aplicativos seriam executados.

Eu pesquisei scripts anteriores feitos por indivíduos inteligentes (links para fontes no final), além de ter investido tempo para aprender a usar o iptables (ainda trabalhando nessa frente).

Aqui está o resultado do trabalho realizado:

RESULTADOS:

antes da execução do script de shell, um grupo chamadoInternet é criado:

sudo groupadd internet

Shell Script:

#!/bin/sh
#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
sudo iptables -A OUTPUT -p udp -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 -j REJECT

# same process for IPv6:
sudo ip6tables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
sudo ip6tables -A OUTPUT -p udp -m owner --gid-owner internet -j ACCEPT
sudo ip6tables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
sudo ip6tables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
sudo ip6tables -A OUTPUT -j REJECT

esta é a outra parte do shell em que estou trabalhando atualmente e não estou 100% confiante com:

#DROPS ALL INPUT and FORWARD
sudo iptables -A INPUT -j DROP
sudo iptables -A FORWARD -j DROP

#ONLY ACCEPTS INPUT THAT WAS INITIATED BY SOME OUTPUT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#SAME REPEATED FOR IPv6
sudo ip6tables -A INPUT -j DROP
sudo ip6tables -A FORWARD -j DROP
sudo ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

após a execução de todo o script acima, o comando a seguir abriria um terminal que faria parte dointernet grupo e, portanto, qualquer aplicativo (como o Firefox, por exemplo) aberto por esse terminal teria acesso à Internet, enquanto todos os outros INPUT / OUTPUT seriam interrompidos

sudo -g internet -s

PERGUNTA, QUESTÃO:

A lógica anterior está em ordem? Atualmente, estou trabalhando para testar todos os recursos, instalando o software de monitoramento de rede (nethogs), testando cada linha de código e verificando se o resultado é o esperado,MAS ao mesmo tempo, comecei a aprender sobre o iptables há apenas dois dias. Embora as fontes do código original sejam feitas por codificadores experientes, não tenho 100% de confiança na minha capacidade de reunir tudo para produzir o resultado desejado.obrigado para quem teve tempo para ler tudo isso e participar da discussão!!!

fontes:

https://plus.google.com/+TobyKurien/posts/YZhZJCZmGgm https://serverfault.com/questions/429400/iptables-rule-to-allow-all-outbound-locally-originating-traffic

P.S .: Obrigado ao @dirkt por me ajudar anteriormente a entender muitos dos conceitos fundamentais do iptables, além de responder a algumas de minhas perguntas sobre o código-fonte.

ATUALIZAR:

Então, depois de executar o código, parece haver algo errado. O que acontece é o seguinte. Eu executo o shell script:

bash myscript

Eu recebo 2 erros da seguinte maneira:

ip6tables v1.6.0: host / rede127.0.0.1 não encontrado Tente `ip6tables -h 'ou' ip6tables --help 'para obter mais informações.

ip6tables v1.6.0: host / rede198.168.0.1 não encontrado Tente `ip6tables -h 'ou' ip6tables --help 'para obter mais informações.

mas tudo correu bem, e ao fazersudo iptables -L Confirmei que todas as outras regras estão em vigor.DEPOIS DE tentei o seguinte:

Execute o firefox clicando duas vezes manualmente no ícone. O resultado foi o esperado, imediatamente recebi umaServidor não encontrado erro, o que foi um bom sinalDepois disso, executei o comandosudo -g internet -s no terminal e depoisfirefox. AGORA... quando tentei carregar um site, ele não me mostrouServidor não encontrado, mas ele continua carregando por um longo período de tempo, por muito tempo. Isso me leva a acreditar que talvez a resposta de saída tenha sido enviada, mas a entrada estava sendo bloqueada.

Se alguém souber por que isso pode estar acontecendo, eu gostaria de saber o seu feedback!

questionAnswers(1)

yourAnswerToTheQuestion