
Neste post usaremos o iptables para configurar firewalls usando containers dockers.
O iptables é uma ferramenta para configurar firewalls e Nat disponível para dispositivos linux. Dentre as variadas funcionalidades, iremos configurar aqui no projeto o acesso de um container docker com outro. Para isso, precisaremos duas imagens docker: afilipecancio/kali-iptables e afilipecancio/server-iptables. Vamos fazer o pull das duas.
docker pull filipecancio/kali-iptablesdocker pull filipecancio/server-iptables
Criaremos então um máquina com o nomeserver
com o server-iptables e outraclient
com o kali linux:
# Criando a maquina serverdocker run-it--rm--cap-add=NET_ADMIN--cap-add=NET_RAW-d-p 8080:8080--name server filipecancio/server-iptables# Criando a maquina clientdocker run--name client--cap-add=NET_ADMIN--cap-add=NET_RAW-i-t filipecancio/kali-iptables bash
A máquinaserver
não foi executada automaticamente pelo bash pois ela é uma aplicação nodeJS rodando em uma máquina alpine, então usaremos o comando abaixo para acessá-lo (o mesmo comando pode ser usado para acessar oclient
posteriormente.
dockerexec-it--user root server sh# caso queira acessar novamente o client via bashdockerexec-it client /bin/bash
Note que usaremos a flag--user root
para poder fazer as alterações de root na maquina
Se você usar o navegador com endereçolocalhost:8080
poderá ver a página inicial da aplicação com informações em JSON, se você acessar alocalhost:8080/pikachu
verá informações do pokemon pikachu vindas dehttps://pokeapi.co/
. Mas não faremos interações com a máquina física nesse post. Por padrão o docker possui configurações de iptables que permitem criações de containers seguros. os comandos acima possuem algumas flags que modificam algumas regras internas do docker:
-p 8080:80
libera a porta 80 na porta 8080 da maquina física--cap-add=NET_ADMIN --cap-add=NET_RAW
permite que usemos o container como um servidor e configuremos suas próprias regras de firewall.Para simplificar o estudo do iptables nesse post, não iremos fazer configurações avançadas com o docker, apenas as interações simples da máquinaclient
com aserver
.
Bloqueio de ping
Vamos identificar os ips das máquinas, para isso, com o bash das duas máquinas ligadas vamos digitar o comandoifconfig
e pegar os ips no trecho inet. De modo respectivo vamo supor que temos os seguintes ips:
- client:
172.17.0.3
- server:
172.17.0.2
Vamos testar o ping do client para o servidor:
ping 172.17.0.2
Ele irá normalmente pegar o ping deserver
.
Com isso vamos adicionar nossa primeira regra emserver
:
iptables-I INPUT-p ICMP-j DROP
Instantaneamente o ping para. Se excluimos a mesma regra com o comando abaixo, automaticamente o ping volta.
iptables-D INPUT-p ICMP-j DROP
Se usamos a flag REJECT ao inves de DROP o ping sera recusado.
iptables-I INPUT-p ICMP-j REJECT
Bloqueio de TCP
Usando a ferramenta curl podemos acessar a máquinaserver
via http com o comando GET:
curl-X GET"172.17.0.2:8080"
Ele irá apresentar um html semelhante ao visto nolocalhost:8080
. Para bloquear o acesso para client, usaremos seguinte comando emserver
:
iptables-I INPUT-p TCP-s 172.17.0.3-j DROP
Ao tentarmos novamente acessar o endereço172.17.0.2:80
emclient
, não temos acesso. Para remover a regra basta executar o comando abaixo:
iptables-D INPUT-p TCP-s 172.17.0.3-j DROP
Bloqueando o ip do site
Lembra que o endereçolocalhost:8080/pikachu
levava à um json com informações detalhadas do pikachu via PokeApi? vamos bloquear o acesso ao ip da PokeApi agora. Digite comando abaixo:
curl-X GET"172.17.0.2:8080/pikachu"
Você verá todas as informações em json do pikachu. Considerando o ip172.64.201.27
e172.64.200.27
para o sitehttps://pokeapi.co/
. Agora ao tentar novamente, ele irá rejeitar a conexão, mas o172.17.0.2:8080
funcionará normalmente.
iptables-I INPUT-p TCP-s 172.64.201.27-j REJECTiptables-I INPUT-p TCP-s 172.64.200.27-j REJECT
para desfazer as regras basta digitar os seguintes comandos:
iptables-D INPUT-p TCP-s 172.64.201.27-j REJECTiptables-D INPUT-p TCP-s 172.64.200.27-j REJECT
Top comments(0)
For further actions, you may consider blocking this person and/orreporting abuse