Entendendo um shell script do iptables

1

SITUAÇÃO:

Eu encontrei recentemente o seguinte shell script que funciona com o iptables para bloquear todo o acesso à internet para / do sistema operacional Linux, exceto os terminais abertos que estavam em um grupo chamado internet :

CÓDIGO:

This might sound complicated, but it's simple. First, create the "internet" group like so:

 sudo groupadd internet 

Then, save this into a script:

 #!/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

fonte: link

PERGUNTA:

A interpretação a seguir dos eventos está correta?

  • sudo groupadd internet Um grupo chamado internet é criado
  • sudo iptables -F Todas as regras atuais no iptables são apagadas
  • sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT Estou tendo problemas com este aqui ... -A OUTPUT diz ao terminal para acrescentar / adicionar uma regra, então de acordo com a documentação -p is "O protocolo da regra ou do pacote para checar" , então -p tcp parece estar colocando uma regra que reflete apenas o protocolo tcp , mas e se eu quiser assistir a um stream no youtube / twitch? O udp precisa ser incluído e, em caso afirmativo, como o incluiria?

    Depois, há o -m (para correspondência). Eu li a documentação e não tenho certeza do que ela faz. No momento, não tenho ideia do que -m owner --gid-owner internet -j significa. Do comentário # accept packets for internet group Eu entendo o que o código faz, mas quero entender o que cada elemento está fazendo para chegar a essa conclusão.

por Webeng 19.04.2017 / 09:58

1 resposta

2

Sua interpretação está correta.

Se você quer que a coisa toda também se aplique aos pacotes UDP, você deve adicionar o mesmo conjunto de regras mais uma vez, mas com -p udp em vez de -p tcp . Ou simplesmente deixe de fora esta opção e faça as regras se aplicarem a todos os pacotes (embora possa haver algumas armadilhas com pacotes ICMP, então é provavelmente mais seguro adicionar apenas os dois tipos de regras). No entanto, você precisará do TCP em primeiro lugar para acessar Youtube, mesmo que o streaming do Youtube usasse o UDP, você não seria capaz de assistir a um stream, porque você nunca chegará tão longe.

A opção -m seleciona qual tipo de correspondência usar. Você pode combinar em muitos critérios diferentes, e há até mesmo extensões para o iptables ( man iptables-extensions ) com os módulos pares correspondentes. Aqui, -m owner seleciona correspondência por propriedade de pacotes e --gid-owner especifica a propriedade do grupo. Portanto, ambas as opções juntas significam "esta regra se aplica apenas aos pacotes que são enviados por alguém no grupo internet ".

A opção -j (originalmente "salto") especifica o que fazer quando a regra corresponde. Você pode pular para uma cadeia diferente ou pode ACCEPT (parar de processar regras e enviar este pacote) ou pode REJECT (parar de processar as regras e ignorar este pacote).

As próximas duas regras permitem pacotes ( ACCEPT ) para destinos especiais ( -d ), independentemente do grupo em que o aplicativo de envio está, e a última regra descarta todos os pacotes ( REJECT ) que não correspondem as regras anteriores. Então é essa última regra que faz o bloqueio real.

Existem muitos tutoriais para iptables na internet, google um pouco e escolha um que você goste se quiser saber mais detalhes. Alguns links aleatórios que achei úteis no passado:

por 19.04.2017 / 10:50