Estou recebendo muitas solicitações em nossos logs do apache que se parecem com isso
www.example.com:80 10.240.1.8 - - [06/Mar/2013:00:39:19 +0000] "-" 408 0 "-" "-" -
Parece não haver solicitação e nenhum agente de usuário. Alguém viu isso antes?
apache-2.2
http
http-status-code-408
Glenn Slaven
fonte
fonte
Respostas:
Por acaso, você está executando seus servidores Web na Amazon atrás de um Elastic Load Balancer?
Parece que eles geram muitas 408 respostas devido a seus exames de saúde .
Algumas das soluções desse tópico do fórum:
RequestReadTimeout header=0 body=0
Isso desativa as 408 respostas se um pedido atingir o tempo limite.
Desative o log para os endereços IP ELB com:
E a partir desta postagem no blog :
fonte
RequestReadTimeout header=0 body=0
iria desativar pedido de leitura de tempo limite, todos juntos, eu não recomendo esteAlgo está se conectando à porta e nunca mais enviando dados. HTTP 408 é um erro de "tempo limite". Há uma boa descrição aqui: http://www.checkupdown.com/status/E408.html
fonte
Já existem algumas boas respostas aqui, mas eu gostaria de arriscar uma nota adicional que não foi especificamente abordada. Como muitos dos comentadores anteriores já mencionaram, 408 indica um tempo limite; e há uma variedade de circunstâncias nas quais ocorrem tempos limite em um servidor da web.
Com isso dito, 408 erros podem ser gerados em vários casos em que seu servidor está sendo verificado quanto a explorações. Os clientes nesses casos raramente apresentam um agente de usuário e frequentemente encerram conexões abruptamente, resultando em um desligamento abortivo dessa conexão que pode gerar um erro 408.
Por exemplo, digamos que sou um hacker covarde que está pesquisando na Internet computadores que ainda estão vulneráveis à vulnerabilidade do POODLE. Como tal, escrevi um script que abre conexões para grandes blocos de endereços IP para encontrar servidores que aceitarão a versão 3 do SSL - posteriormente, usarei essa lista para verificar especificamente a exploração do POODLE. Tudo o que esse primeiro script faz é estabelecer uma conexão usando o openssl para verificar o SSLv3, assim:
Esse comando, em muitas configurações do Apache, resultará em uma mensagem 408 exatamente como você descreveu. Executar este comando em dois de meus próprios servidores resultou nessa entrada no log de acesso:
Eu queria deixar isso claro, mesmo em uma situação em que o OP não estava usando nenhuma forma de balanceamento de carga, os erros 408 podem ocorrer em várias circunstâncias - alguns maliciosos, outros indicando problemas no cliente e outros no servidor. (Observei no log fornecido pelo OP que um IP local era indicado como IP remoto, mas o OP não mencionou especificamente o uso de um balanceador de carga, portanto, não tinha certeza se o OP simplesmente usava um IP não roteável para os fins demonstração, como ele fez com o URL)
De qualquer forma, mesmo que meu post seja obviamente muito tarde para ajudar o OP, espero que ajude outras pessoas que chegam aqui procurando uma solução para todos esses malditos erros de tempo limite.
fonte
Há várias razões para um 408 Tempo limite. Mas vamos começar com a premissa de que está tudo bem, e em algum momento esses 408 começam a aparecer no seu log de acesso - ou seja, 408 0 "-" "-".
Como muitos apontam na rede, um 408 representa uma conexão feita, mas nenhuma solicitação é enviada na escala de tempo apropriada; portanto, o servidor descarta a conexão com um 408. Um indivíduo arrogante realmente respondeu a alguém pedindo ajuda sobre esse problema com - "Que parte do Timeout você não entende".
Eu acho que é uma resposta muito novata e demonstra uma total falta de entendimento de como alguns métodos de segurança funcionam com o software de servidor da web.
Então, de volta ao começo, por que estou vendo todos esses 408? Uma coisa que você terá em comum com o resto de nós gerenciando um servidor é a grande quantidade de ataques que você recebe diariamente. Agora, o que você faz sobre isso? Bem: você emprega os métodos de segurança escolhidos para lidar com eles, é isso que muda.
Vamos dar um exemplo muito fácil, soltar um endereço IP. Incluído em um arquivo iptabes (rules.v4), você tem "-A ufw-user-input -s 37.58.64.228 -j DROP". Então vem o 37.58.64.228, o firewall reconhece o IP e descarta a conexão. Em muitas configurações, você nem saberia que está batendo na porta.
Agora vamos dar um exemplo mais avançado: Abandone a conexão com base em alguns critérios. Incluído em um arquivo iptabes (rules.v4), você tem "-A INPUT -p tcp -m tcp --dport 80 -m string --string" cgi "--algo bm --to 1000 -j DROP". Isso é diferente porque nesta regra do iptable estamos dizendo, observe os primeiros 1000 bytes da string de solicitação e veja se você pode encontrar uma sub-string de "cgi" e se você encontrar essa sub-string, não vá além disso, basta largar a conexão.
Aqui, o método de segurança é bom, mas, no que diz respeito aos seus logs, é enganoso. O 408 0 "-" "-" gerado é o melhor que o apache pode fazer nessas circunstâncias. A conexão foi feita e a solicitação teve que ser aceita até certo ponto para aplicar a regra de comparação de cadeias que resulta em 408, porque sua regra atendeu aos critérios para a conexão ser descartada. Assim, nossos queridinhos novatos não poderiam estar mais errados se tentassem. Uma conexão foi estabelecida e uma solicitação foi recebida (você simplesmente não terá visibilidade dela nessas circunstâncias). Embora um 408 seja gerado, não é um 'Tempo limite'; seu servidor simplesmente interrompeu a conexão depois que a solicitação foi feita em associação com sua regra de firewall. Existem muitas outras regras que criariam a mesma situação. Don '
Idealmente, haveria outro código de erro gerado pelo Apache, por exemplo - '499', o que significaria 'Servidor leu sua solicitação e decidiu que simplesmente não poderia ser incomodado entretendo você - Sod Off HaHa'.
Com o mais recente software de servidor da web, você pode excluir praticamente ataques do DOS, e o novo gene de navegadores que incorporam recursos preditivos não causa esse problema, como alguns sugeriram.
Resumindo, o 408 é gerado porque o servidor não respondeu à solicitação; portanto, no que diz respeito ao cliente, a conexão expirou, quando, na realidade, o servidor leu a solicitação, mas interrompeu a conexão por outros motivos que não um tempo limite aguardando um pedido.
fonte
Tivemos esse problema e ficamos confusos por um bom tempo. A melhor solução que encontramos foi sugerida pela equipe ELB do suporte da AWS. Essencialmente, ele depende de garantir que as configurações de tempo limite do servidor httpd sejam todas maiores que a
idle timeout
configuração ELB (o padrão é 60 segundos).Timeout
valor da diretiva apache é o dobro daidle timeout
configuração do seu ELB.KeepAlive
recurso, verifique se eleMaxKeepAliveRequests
é muito grande (0 para infinito ou muito alto, como 2000), e queKeepAliveTimeout
é maior que o seu ELBidle timeout
.Descobrimos que a
KeepAlive
configuração (e configurações associadas) reduziu especificamente a quantidade de 408s para efetivamente 0 (vemos alguns, mas muito poucos).fonte
Eu tive esse problema por trás do AWS Elastic Load Balancer. As verificações de integridade geraram uma quantidade terrível de 408 respostas no log.
A única solução que funcionou para mim era ter ocioso Timeout Load Balancer configuração menor do que o seu tempo limite de resposta do exame de saúde .
fonte
Um colega observou recentemente que, enquanto minha última postagem deu uma explicação válida de como um 408 poderia ter uma associação com uma medida de segurança, ele não ofereceu solução.
O registro de acesso canalizado é minha solução pessoal.
O seguinte deve funcionar de imediato na maioria das configurações do Ubuntu e com um mínimo de ajustes em outras configurações do Apache. Eu escolhi o PHP porque é o mais fácil de entender. Existem dois scripts: o primeiro impede que um 408 seja gravado no seu log de acesso. O segundo script envia todos os 408s para um arquivo de log separado. De qualquer forma, o resultado não é mais 408s no seu log de acesso. É sua escolha qual script implementar.
Use seu editor de texto favorito, eu uso o nano. Abra o arquivo em que você tem suas diretivas 'LogFormat' e 'CustomLog'. Comente os originais com o # habitual e adicione o seguinte. Você pode encontrar essas diretivas no arquivo abaixo.
sudo nano / etc / apache2 / sites-available / default
NOTA: Não registro imagens no meu registro de acesso. No meu arquivo etc / apache2 / httpd.conf, incluo a linha
Se isso não lhe interessar, remova-o
env=!dontlog
daCustomLog
diretiva.Agora crie um dos seguintes scripts PHP (
#!/usr/bin/php
é uma referência ao local do intérprete, verifique se o local está correto para o seu sistema - você pode fazer isso digitando no prompt $;whereis php
- isso deve retornar algo comophp: /usr/bin/php /usr/bin/X11/php /usr/share/man/man1/php.1.gz
. pode ver#!/usr/bin/php
é o certo para a minha configuração).sudo nano /var/log/apache2/PipedAccessLog.php
sudo nano /var/log/apache2/PipedAccessLog.php
Tendo salvo o
PipedAccessLog.php
script; verifique se o root possui propriedade executando o seguinte no prompt $.O
PipedAccessLog.php
script precisará de permissões de leitura / gravação e execução; portanto, execute o seguinte no prompt $.Finalmente, para que tudo funcione, você precisa reiniciar o serviço Apache. Execute o seguinte no prompt $.
Se os logs do Apache estiverem em outro local, altere os caminhos para se adequar à sua configuração. Boa sorte.
fonte
Eu descobri que 408 erros estão aumentando em número e frequência. O intervalo de endereços IP dos quais eles se originam também está aumentando (eles são registrados em seu próprio arquivo separado). Também existem padrões de log evidentes que exibem 408 consecutivos dos mesmos grupos de IP que não são devidos a tempos limites normais do servidor, pois o originador está tentando conexões com cerca de 2 ou 3 segundos de diferença em um padrão cíclico (não há espera por um tempo limite antes de outro tentativa de conexão) Eu vejo isso como simples tentativas de conexão no estilo DDOS. Na minha opinião, este é um tipo de mensagem de confirmação para o originador de que um servidor está online ... então eles retornam mais tarde com ferramentas diferentes ... Se você aumentar seu intervalo de tempo limite, está simplesmente dando a ele um time_allocation maior para executar seus programas de hackers dentro.
fonte