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:
sudo -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!