Random 403 Erro Proibido (Apache 2.4)

2

Meu servidor Apache 2.4 (CentOS 7) hospeda vários sites. Às vezes recebo um erro 403 Proibido (Você não tem permissão para acessar o arquivo X neste servidor) ao acessar qualquer um dos arquivos de sites (principalmente scripts php). Acertar a tecla F5 por alguns segundos resolverá e carregará a página normalmente. Os arquivos possuem permissões corretas. Eu também tenho o mod_evasive ativado, mas o log não mostra nenhum IP bloqueado naquele momento.

 Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 cloudflare_module (shared)
 access_compat_module (shared)
 actions_module (shared)
 alias_module (shared)
 allowmethods_module (shared)
 auth_basic_module (shared)
 auth_digest_module (shared)
 authn_anon_module (shared)
 authn_core_module (shared)
 authn_dbd_module (shared)
 authn_dbm_module (shared)
 authn_file_module (shared)
 authn_socache_module (shared)
 authz_core_module (shared)
 authz_dbd_module (shared)
 authz_dbm_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_owner_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cache_module (shared)
 cache_disk_module (shared)
 data_module (shared)
 dbd_module (shared)
 deflate_module (shared)
 dir_module (shared)
 dumpio_module (shared)
 echo_module (shared)
 env_module (shared)
 expires_module (shared)
 ext_filter_module (shared)
 filter_module (shared)
 headers_module (shared)
 include_module (shared)
 info_module (shared)
 log_config_module (shared)
 logio_module (shared)
 mime_magic_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 remoteip_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 slotmem_plain_module (shared)
 slotmem_shm_module (shared)
 socache_dbm_module (shared)
 socache_memcache_module (shared)
 socache_shmcb_module (shared)
 status_module (shared)
 substitute_module (shared)
 suexec_module (shared)
 unique_id_module (shared)
 unixd_module (shared)
 userdir_module (shared)
 version_module (shared)
 vhost_alias_module (shared)
 dav_module (shared)
 dav_fs_module (shared)
 dav_lock_module (shared)
 lua_module (shared)
 mpm_prefork_module (shared)
 proxy_module (shared)
 lbmethod_bybusyness_module (shared)
 lbmethod_byrequests_module (shared)
 lbmethod_bytraffic_module (shared)
 lbmethod_heartbeat_module (shared)
 proxy_ajp_module (shared)
 proxy_balancer_module (shared)
 proxy_connect_module (shared)
 proxy_express_module (shared)
 proxy_fcgi_module (shared)
 proxy_fdpass_module (shared)
 proxy_ftp_module (shared)
 proxy_http_module (shared)
 proxy_scgi_module (shared)
 ssl_module (shared)
 systemd_module (shared)
 cgi_module (shared)
 php5_module (shared)
 evasive20_module (shared)

Saída de apachectl -M acima. Alguma idéia do que poderia causar isso?

    
por alexus 20.11.2014 / 21:41

3 respostas

6

Eu estava tendo esse problema exato, não tenho certeza se a razão abaixo é o que sempre causa esse erro (especificamente no descrito no modo de pergunta), mas esse foi o caso para mim, então eu só queria compartilhar meus pensamentos .

Debian 7 wheezy (7.7), apache 2.2.2

Eu estava fazendo um recurso quando o usuário deveria alterar o status das mensagens como lidas / não lidas, enquanto clicava em um "link", quando ajax estava sendo enviado ao servidor, assim, durante o teste - clicando rapidamente no link para ver se funciona bem (por isso não vai ser 2 pedidos simultâneos de ajax) recebi este erro

Forbidden

You don't have permission to access /messages on this server.

A parte estranha era que antes disso havia alguns pedidos de ajax bem-sucedidos com o caminho normal, incluindo o nome do domínio como http://example.com/messages/changeStatus/11 . O que significa que o código estava ok. Mas, por outro lado, se eu pudesse esperar alguns segundos e tentar de novo, funcionaria bem.

Eu tinha mod-security e mod-evasive instalado, então depois desse erro eu encontrei essas últimas linhas do arquivo /var/log/apache2/modsec_audit.log .

--ba0f4035-E--
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /messages/changeStatus/24
on this server.</p>
</body></html>

--ba0f4035-H--
Apache-Error: [file "mod_evasive20.c"] [line 246] [level 3] client denied by server configuration: /home/user_name/www/example/messages, referer: http://example.com/messages
Stopwatch: 1421177262896100 4724 (- - -)
Stopwatch2: 1421177262896100 4724; combined=10, p1=0, p2=0, p3=2, p4=0, p5=7, sr=0, sw=1, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.6.6 (http://www.modsecurity.org/).
Server: Apache/2.2.22 (Debian) PHP/5.4.36-0+deb7u1 mod_ssl/2.2.27 OpenSSL/1.0.1h

--ba0f4035-Z--

Fazendo mais pesquisas, pois descobri o erro do log neste artigo. link

assim, mod evasive é o motivo, porque os parâmetros padrão são muito sensíveis, principalmente em /etc/apache2/mods-available/mod-evasive.conf file por padrão eu tinha essas opções

<ifmodule mod_evasive20.c>
   DOSHashTableSize 3097
   DOSPageCount  2
   DOSSiteCount  50
   DOSPageInterval 1
   DOSSiteInterval  1
   DOSBlockingPeriod  10
   DOSLogDir   /var/log/mod_evasive
   DOSEmailNotify  [email protected]
   DOSWhitelist   127.0.0.1
</ifmodule>

conforme aprendemos no link acima

MODEV_DOSPageCount - This is the threshhold for the number of requests for the same page (or URI) per page interval. Once the threshhold for that interval has been exceeded, the IP address of the client will be added to the blocking list.

e

MODEV_DOSPageInterval - The interval for the page count threshhold; defaults to 1 second intervals.

Então, de acordo com as opções padrão, se eu fizesse 2 solicitações para o mesmo url durante 1 segundo, ele mostraria o erro 403, e foi o que aconteceu comigo: ASA Eu aumentei o número para 20, não consegui replicar a mensagem de erro.

por outro lado

MODEV_DOSBlockingPeriod The blocking period is the amount of time (in seconds) that a client will be blocked for if they are added to the blocking list. During this time, all subsequent requests from the client will result in a 403 (Forbidden) and the timer being reset (e.g. another 10 seconds). Since the timer is reset for every subsequent request, it is not necessary to have a long blocking period; in the event of a DoS attack, this timer will keep getting reset

então, como podemos ver, depois que DOSBlockingPeriod time passou, o ip será deletado da lista negra; como eu estou supondo que esta é a razão, que não há IPs proibidos em logs, também que, ao clicar em F5 depois de alguns segundos, funciona bem, como o período bloqueado passou.

Eu também testei isso com longos períodos de bloqueio e pequenos valores de contagem de páginas, principalmente definindo 1000 e 1 respectivamente. Depois de 2-3 pedidos de ajax, ele começou a mostrar 403 e não desapareceu depois de alguns segundos.

Espero que isso ajude alguém.

    
por 13.01.2015 / 22:54
0

Você acabou de atualizar para o 2.4 de 2.2? Tente Atualizar para 2.4 de 2.2 .

    
por 20.11.2014 / 22:31
0

Apenas tive este mesmo problema - exceto que o mod_evasive não foi instalado. Tenho 100% de certeza de que não foi instalado ou ativado.

A solução foi instalar o libapache2-mod-evasive e então desabilitá-lo. Talvez esteja sendo mesclado no núcleo do Apache?

Versão do servidor: Apache / 2.4.18 (Ubuntu) Servidor construído: 2017-07-27T14: 34: 01

    
por 08.09.2017 / 07:36