O que as regras duplicadas do iptables fazem?

2

Estou tentando entender melhor como o Docker liga a rede e me deparei com essa pergunta. Nota: Eu não acredito que isso tenha alguma coisa a ver com o Docker em si, que foi apenas o veículo em que surgiu. Por favor, sinta-se livre para corrigir se isso é uma percepção errada da minha parte!

Com o Docker instalado e em execução no modo Swarm, o seguinte comando iptables é executado:

> iptables -t filter -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DOCKER-ISOLATION  all  --  anywhere      anywhere
DOCKER     all  --  anywhere     (1)     anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere     (2)     anywhere
ACCEPT     all  --  anywhere     (3)     anywhere
DOCKER     all  --  anywhere     (4)     anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Eu adicionei os números 1,2,3,4 na saída. Os números 1 e 4 parecem ser duplicados. Da mesma forma, 2 e 3 parecem cópias exatas uma da outra. Qual é o propósito deles? Eles são realmente duplicados? Se não, como vejo o próximo nível de informação que então os discerniria?

Separadamente, na primeira seção, se alguém puder explicar dpt:domain vs dpt:bootps , isso também seria legal!

    
por JoeG 16.08.2017 / 16:06

2 respostas

5

A regra "pares" 1-4 e 2-3 que você anotou provavelmente não são duplicados, mas não é possível ver as diferenças na saída do comando usado. se você usar iptables -L -v , obterá uma saída adicional que pode revelar as diferenças - isso geralmente ocorre (na minha experiência) quando as regras estão operando em interfaces diferentes.

As dpt:domain e dpt:bootps são especificações de porta de destino diferentes. dpt:domain é a porta de destino 53 (domínio ou DNS), enquanto dpt:bootps é a porta de destino 67 (DHCP).

Editar: você está correto, esta situação não tem nada a ver com o Docker diretamente. É uma situação relativamente comum que foi exposta pelo Docker em seu ambiente, mas ocorre fora de um ambiente do Docker com a mesma frequência.

    
por 16.08.2017 / 16:11
1

Para dar uma resposta suplementar à sua segunda pergunta: Executar iptables -L -n retornaria endereços IP e portas em formato numérico e não os converteria em nomes de host e nomes de serviço. Como tal, dpt:domain e dpt:bootps seriam impressos como dpt:53 e dpt:67 . Isso se aplica a todos os hosts / portas dos quais você não tem conhecimento do nome de serviço.

    
por 18.08.2017 / 12:52