TCP 443 A conexão entra no servidor mas nunca chega ao Apache2 (Passageiro)

3

Nós temos alguns problemas estranhos, quando servidores externos tentam se conectar ao nosso site na porta 443 (TCP), que é um Apache2 + Passenger e um aplicativo Rails. O problema só acontece raramente. Eu comecei a investigar isso ativando o log de iptables usando iptables -I INPUT -m state --state NEW,INVALID -j LOG --log-prefix "iptables [INPUT]: " (fiz isso também para FORWARD (normalmente não usado) e OUTPUT também).

Agora, todas as novas conexões são registradas no syslog. Agora eu vi Conexões normais naquele syslog e depois instalei a conexão com o Vhost (requisição de trabalho normal) mas as vezes (em cerca de 1 de 100 conexões) eu só vejo a nova conexão no log do iptables mas a conexão não alcança o apache2 ( ou as instâncias do passageiro) (Nenhuma entrada de log do apache e nenhum resultado da conexão). Ao fazer isso com o curl, obtemos um tempo limite ou uma string vazia de volta. Acabamos de enviar um snippet de código de solicitação de ativação habilitado para depuração para registrar melhor como é o erro de curl.

Estamos usando o Debian Squeeze (estável) em execução em um ambiente VMWare ESXi com ethernet em ponte com as NICs E1000 (virtualizadas). Mas como os pacotes que chegam ao VM-OS em si eu não acho que nada disso causa o problema.

Eu também verifiquei ip_conntrack que tem cerca de 40 a 50 conexões e Squeezes Limit é de cerca de 65k, então isso não é problema. Também não temos pacotes dropados na própria NIC.

Versão do Kernel : nome do servidor Linux 2.6.32-5-amd64 # 1 SMP Sun Set 23 10:07:46 UTC 2012 x86_64 GNU / Linux Apache2 : Versão do servidor: Apache / 2.2.16 (Debian) - Servidor construído: 30 de novembro de 2012 08:58:38 Passenger : versão 3.0.12 do Passenger da Phusion Ruby : RVM 1.17.9 + Ruby 1.9.3-p362

iptables -L

Chain INPUT (policy ACCEPT) target prot opt source destination
LOG all -- anywhere anywhere state INVALID,NEW LOG level warning prefix 'iptables [INPUT]: '

Chain FORWARD (policy ACCEPT) target prot opt source destination
LOG all -- anywhere anywhere state INVALID,NEW LOG level warning prefix 'iptables [FORWARD]: '

Chain OUTPUT (policy ACCEPT) target prot opt source destination
LOG all -- anywhere anywhere state INVALID,NEW LOG level warning prefix iptables [OUTPUT]: '

    
por martinseener 17.04.2013 / 18:13

1 resposta

1

Eu não tenho realmente 'resposta' sobre isso, mas talvez uma maneira de rastreá-lo um pouco mais. O problema parece acontecer no espaço do kernel, logo após o encadeamento do iptables ou no espaço do usuário, quando ou antes do apache aceitar a conexão.

O kernel pode soltar pacotes em si APÓS o nic e o iptables, devido à carga que o pacote captura custos. Você já construiu um ambiente de teste sem o iptables e um número definido de acessos que podem ser contados no log do apache?

Se você tiver alguma experiência em C, você deve experimentar a libpcap, que é uma biblioteca maravilhosa para fazer coisas boas e ruins. Aqui está um bom artigo de como começar: link

Isso pode mostrar diferenças nos pacotes que estão passando e os que serão descartados.

    
por 21.12.2013 / 11:33