Processos HTTP do servidor Linux bloqueiam servidor diariamente

4

Eu alugo uma VM Linux da LayeredTech que é um convidado no Xen Hypervisor. O SO é o CentOS 5.3, rodando o Apache2. Quase todos os dias o meu servidor se comporta de tal forma que me leva a acreditar que estou sendo DDoS, mas não consigo encontrar nenhuma evidência como tal. Estou executando o Apache Mod_security, MySQL 5.x, PHP 5.x, tudo está atualizado em termos de versão.

A VM é relativamente de baixa potência, mas quando esse sintoma não está acontecendo, ela cuida da carga de tráfego da minha Web.

Meu servidor da web não responderá e, após o login, haverá centenas de processos HTTPD. Todos os meus hosts virtuais são chrooted e usam o SUexec, mas todos os processos gerados são executados como o usuário "apache".

O site não é malicioso na minha caixa e o servidor não mostra nenhuma evidência de estar comprometido.

Quando o problema ocorre, minhas médias de carga estão acima de 250, tudo que eu preciso fazer é reiniciar o httpd com força, e tudo está bem para qualquer lugar entre 24-72 horas.

Eu olhei em todos os arquivos de log que eu posso pensar em olhar, e não consigo encontrar qualquer evidência de um DDoS, qualquer tipo de tráfego "efeito digg", nada. Assim que eu reinicio o HTTPD, o que está causando isso para gerar muitos processos, pára. Se fosse devido a um site de alto tráfego, um link de frontpage em um site enorme, ou um DDoS, eu imagino que os pedidos nunca parariam e apenas suspendo meu servidor novamente logo após reiniciar o httpd.

Também usei várias ferramentas, como o apachetop e outras ferramentas de monitoramento em tempo real, mas geralmente não posso prever quando isso acontecerá e, quando isso acontecer, o servidor estará sobrecarregado demais para não precisar de nada além de HTTPD.

Não sei como evitar que isso aconteça, e não sei mais onde procurar a causa - Qualquer idéia seria apreciada!

Informações adicionais:

Já faz 2 anos desde que criei o servidor e configurei esses parâmetros com base em algumas coisas que li e nunca tive problemas, mas não tenho certeza se essas configurações podem ser um colaborador:

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>
    
por WerkkreW 12.02.2010 / 21:22

1 resposta

4

Tem certeza de que não há nada nos registros?

Você pode configurar o MPM do Apache para restringir o número de processos que ele inicia / gerencia.

Existe também um ataque DDoS pouco conhecido que mantém as conexões ativas (mecanismo Keep-Alive do HTTP) em vez de fechá-las quando terminar, e isso pode fazer com que centenas de processos adicionais sejam iniciados, pois o Apache acredita que está lidando com solicitações desses DDoS processa e gera novos para novos processos.

Quando você reinicia o Apache, ele elimina esses processos invasores e, portanto, as conexões, portanto, depende de quanto tempo leva para o invasor perceber que ele foi desconectado e tentar novamente.

Você também pode ativar os manipuladores de status do servidor e de informações do servidor e observá-los quando ele começar a ficar ocupado para identificar o que o servidor está fazendo.

link

link

    
por 12.02.2010 / 22:46