Conexões presas em SYN_RECV

1

Eu li vários posts sobre isso, mas nenhum deles tem uma resposta real.

Temos 3 máquinas, um (não em nosso atendimento) balança carrega para os outros dois. O primeiro está funcionando corretamente com um FreeBSD, o outro foi formatado recentemente e agora está usando o Ubuntu Server.

A segunda máquina está atualmente deixando todas as conexões em SYN_RECV sem motivo aparente. Ambas as máquinas não têm firewall.

dmesg mostra o Possible SYN Flood attack , mas sabemos que não é o caso.

O que poderia estar errado? Existe alguma configuração do kernel que devo fazer? O Ubuntu tem algum problema conhecido com isso?

Obrigado

Edit: Eu encontrei uma regra sobre o PF da máquina BSD, não tenho certeza, mas deve estar relacionado a este problema.

pass in log on bce1 proto tcp from <nois> to any port = http flags S/SA keep state (max 2000, source-track rule, max-src-states 120, max-src-conn 80, adaptive.start 1200, adaptive.end 2400)

Basicamente mantém estado dos pacotes de sinalizadores SYNACK ... alguém sabe como traduzir isso para IPTABLES?

    
por Draiken 10.11.2011 / 16:01

2 respostas

1

Basicamente, o que está acontecendo é que a caixa do Linux está recebendo SYNs (tentando abrir uma conexão TCP) e, em seguida, não está recebendo ACKs (completamente o processo). As conexões abertas pela metade se acumulam até o servidor decidir que está sob ataque.

Existem algumas causas possíveis:

Primeiro, o balanceador de carga pode ser configurado para fazer isso. Ele pode passar um SYN para as duas caixas e permitir que apenas uma conexão seja concluída para o cliente, já que precisa apenas de uma. O balanceador pode assumir que ignorar a resposta é inofensivo, já que os pacotes são descartados o tempo todo. No entanto, neste caso, não há realmente nenhuma razão para você estar tendo um problema real. Certifique-se de que os syncookies estão ativados, só para ter certeza de que isso não causaria problemas se esse for o caso.

Em segundo lugar, o ACK da caixa do Linux em resposta ao SYN pode não estar passando pelo firewall da caixa do Linux. Isso exigiria uma configuração de firewall muito mal quebrada, por isso não é provável.

As possibilidades menos prováveis são:

Em terceiro lugar, o balanceador de carga pode rejeitar o ACK da caixa do Linux por algum motivo.

Em quarto lugar, o balanceador de carga pode não transmitir um ACK de volta à caixa do Linux.

Quinto, o firewall da caixa do Linux pode derrubar o ACK recebido.

    
por 10.11.2011 / 21:42
0

Do que você diz, parece mais do que provável que o balanceador de carga verifique o SYN / ACK retornado do servidor de back-end para ver se está ativo, e somente então comunicando o dito SYN / ACK de volta ao cliente; isso significa que, além do balanceamento de carga, ele também está executando tarefas de failover.

Aparentemente, o FreeBSD lida com isso de forma diferente do Ubuntu, e a caixa do Ubuntu vê isso como um ataque de inundação SYN.

Farejar o tráfego dos clientes e entre o balanceador de carga e os backends informará exatamente o que está acontecendo.

    
por 10.11.2011 / 16:06