Dado que no seu caso as conexões são da sua LAN, é improvável que seja um ataque, mas no meu caso eu tinha 1 IP externo (de cada vez) fazendo as mesmas coisas em um site wordpress (mais recente) e , mesmo em coisas como:
/wp-content/plugins/wpmarketplace/readme.txt
que não existe no meu servidor (a maioria dos recursos GET não existia e havia muitos arquivos txt e css sendo GETed). Houve também pedidos POST em vários arquivos php, levando à mesma lentidão e, eventualmente, congelar.
Então, meu palpite é que este é um script muito mal escrito para verificar sites vulneráveis, resultando em um DoS. Ou pode ser realmente um DoS e não um script de buggy, no entanto tem sido há séculos desde que eu vi um, hoje em dia as pessoas fazem DDoSes.
Atualmente, estou trabalhando em alguns scripts para controlar isso. Depois de tê-los, vou postar de volta, talvez ajude alguém.
Edição de laster:
depois de muitos testes, acho que finalmente consegui controlar as coisas.
Vamos supor que você crie um novo script /root/check_httpd.sh (explicações na parte inferior)
cnt='ps -Af | grep httpd | grep -v rotatelogs | grep -v grep | wc -l'
now='date +%Y-%m-%d_%H-%M'
# change the 40 below to something meaningful to your server
if [ $cnt -ge 40 ]
then
/usr/bin/wget -q -O /root/apache_status_$now http://<your server here>/server-status
/sbin/service httpd restart
fi
# change hda to your partition/disk which is being "killed" by httpd during the freeze
dsk='/usr/bin/iostat -dx /dev/hda 5 2 | grep hda | tail -1 | awk '{print $12}''
if (( $(echo "$dsk > 98" |bc -l) ))
then
/bin/sleep 5
dsk='/usr/bin/iostat -dx /dev/hda 5 2 | grep hda | tail -1 | awk '{print $12}''
if (( $(echo "$dsk > 98" |bc -l) ))
then
/sbin/service httpd restart
fi
fi
Você adiciona isso ao cron como:
0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58 * * * * /root/check_httpd.sh
não se esqueça de
chmod +x /root/check_httpd.sh
E as explicações.
Portanto, no meu caso, inicialmente, notei que (durante o congelamento) a página de status do httpd mostrava vários filhos httpd do estado "W", com vários tempos de espera em vários recursos, alguns válidos, outros inválidos. Passei muito tempo com várias opções para obter um cenário de 90% com base na página de status para descobrir quando o servidor está congelado e não sob uso pesado.
Sem sorte.
Mas então eu percebi que, normalmente, mesmo sob carga "pesada", minha contagem de processos filho httpd ainda estaria abaixo de 20-30 (meu site é "lite"), então fiz alguns testes e descobri que uma contagem de 40 httpd filho count sempre acontece durante o congelamento (OBSERVAÇÃO: você pode remover o status wget daquela seção, ele está lá para você confirmar que durante a reinicialização para qualquer valor que você escolher, existe um congelamento. Você verifica manualmente)
No entanto, isso sozinho não iria cortá-lo. Eu ainda tinha casos em que o servidor congelou por mais de 24 horas antes que 40 contassem. Procurando mais um pouco eu encontrei o utilitário topo que eu deixei rodando em um terminal de massa, então sempre que o servidor congelava eu podia ver quais recursos exatos estavam sendo usados. consumido muito. E notei que era o HDD.
Então, veio a segunda verificação para o uso do HDD, mas como você sabe, o uso do hdd dispara de vez em quando, então 1 verificação sozinha resulta em falsos positivos.
O que eu fiz foi fazer outra verificação após alguns segundos e só então reiniciar o httpd, se necessário.
Você precisará jogar um pouco no seu servidor e ajustar os valores de limite para torná-los adequados ao seu ambiente e padrões de uso.