No log do firewall há uma linha que você não esperava: um pacote ACK, estado de conntrack NEW, um endereço de origem que não é o seu, porta de destino aberta. A tentação é lê-la como uma nova conexão de entrada que ninguém autorizou. O que a linha realmente diz é mais estreito: quando aquele pacote chegou a este hook, o rastreador não tinha estado correspondente, e o pacote carregava um ACK. São dois fatos sobre duas coisas diferentes, e nenhum deles é a transcrição completa de um aperto de mão. Esta é a ordem que percorro antes de tirar uma conclusão.

Comece pelo pacote, não pelo veredito

Separe as observações antes de interpretá-las. As flags TCP descrevem este pacote, o estado do rastreador descreve o que ele sabia naquele hook, e sua captura descreve apenas a janela que você gravou.

Confundir essas três coisas é como um ACK se torna «o provedor deixou alguém entrar».

O que NEW realmente significa no hook

A correspondência de conntrack do iptables documenta NEW como um pacote que inicia uma conexão, ou um associado a uma conexão que ainda não viu tráfego nos dois sentidos. ESTABLISHED significa que o rastreador viu pacotes nos dois sentidos. Nenhuma das duas definições diz que o pacote era um SYN, nem que chegou sem histórico.

Um rastreador que começa a observar um fluxo no meio classifica o próximo pacote conforme o que sabe, e isso pode ser nada. É uma afirmação sobre a memória do rastreador, não sobre a intenção do host remoto.

O rastreamento frouxo explica a maioria das surpresas com ACK

O núcleo documenta nf_conntrack_tcp_loose, o que permite ao rastreador capturar conexões TCP cujo início não viu. Com o ajuste no valor padrão, um ACK do meio do fluxo pode ser adotado como fluxo estabelecido. Desative-o e o mesmo pacote será mais provavelmente classificado como INVALID em vez de NEW. Os dois resultados descrevem as regras do rastreador, não o histórico da aplicação.

Portanto, verifique esse ajuste antes de construir uma teoria sobre o rótulo.

Descarte as causas entediantes nesta ordem

A maioria dos eventos NEW sobre ACK que persegui terminou em uma destas, e todas são baratas de verificar:

  • A tabela de conntrack foi limpa, ou o rastreador foi reiniciado.
  • O host foi reiniciado, ou o fluxo migrou para outro namespace ou dispositivo.
  • O roteamento assimétrico enviou o SYN por um caminho que você não está capturando.
  • O NAT reescreveu a tupla, então a entrada já não corresponde ao que você leu.
  • A captura começou tarde e nunca viu o começo.

Cada uma delas remove os pacotes anteriores da visão do rastreador e deixa os posteriores intactos. Um reinício ou uma limpeza da tabela é o mais fácil de confirmar pelo uptime e pelos logs. O roteamento assimétrico aparece como uma captura unidirecional. O NAT é o sorrateiro, porque a tupla que o rastreador guardou não é a tupla impressa no log.

Anote quais destas você descartou, e como, antes de seguir.

Leia a tupla, a interface e o hook

Uma entrada de conntrack é indexada por endereços, portas e protocolo, então qualquer tradução muda qual entrada corresponde. Anote também a interface e o hook, porque um pacote visto na interface errada ou depois de outra cadeia indica que o caminho não é o do diagrama. Quando o evento envolve uma VPN, decida se está olhando o pacote interno ou o transportador externo. Depois compare com o que o gateway registrou para a mesma tupla de cinco partes.

Duas visões de um mesmo fluxo que discordam são mais informativas do que qualquer uma delas isolada.

Quando vale a pena escalar

Escale quando puder mostrar um serviço que está acessível e não deveria estar, com o fluxo, a política que o permitiu e evidências das duas pontas. Não relate um defeito do provedor com base em um único rótulo de estado ou em uma captura parcial, porque esse relato será encerrado com a explicação que você acabou de ler. Se o serviço está realmente exposto, o dono dessa fronteira é a pessoa certa para corrigi-lo, e um mapeamento de portas delegado ou um ouvinte não intencional é uma causa mais provável do que um bug.

Depois feche a lacuna de visibilidade que deixou um único pacote parecer uma sessão inteira.

Artigos relacionados