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

1

CONTEXTO:

Eu queria ter um shell script que bloqueasse todo o tráfego de entrada / saída para o meu computador, A MENOS QUE eu decidisse usar o navegador ou algum outro aplicativo, nesse caso eu o invocaria e somente esses aplicativos seriam executados.

Eu pesquisei scripts anteriores feitos por pessoas inteligentes (links para fontes no final), assim como investi o tempo necessário 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, é criado um grupo chamado internet :

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

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

#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

depois que todo o script acima for executado, o comando a seguir abriria um terminal que seria parte do grupo internet e, portanto, qualquer aplicativo (como o firefox por exemplo) aberto por esse terminal teria acesso à Internet, enquanto todos os outros INPUT / OUTPUT serão interrompidos

sudo -g internet -s

PERGUNTA:

A lógica anterior está em ordem? Atualmente estou trabalhando em testar todos os recursos, instalando software de monitoramento de rede (nethogs), testando cada linha de código e vendo se o resultado é o esperado, MAS ao mesmo tempo, eu só comecei Aprendendo sobre iptables há 2 dias, então mesmo que as fontes do código original sejam feitas por programadores experientes, eu não estou 100% confiante em minha capacidade de juntar tudo para produzir o resultado desejado. Obrigado a qualquer pessoa que tenha lido tudo isso e participe da discussão !!!

fontes:

link link

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

    
por Webeng 20.04.2017 / 03:31

0 respostas