.htaccess bloqueia acesso quando HTTP_HOST é IP (Segurança)

2

Eu tive muitos ataques no meu servidor. A maioria começa com uma varredura de vulnerabilidade, seguida por ondas de solicitações POST.

Em breve, vou implementar o Cloudflare (WAF e DDos). Isso significa que uma pesquisa de DNS no meu domínio mostrará o endereço IP do Cloudflare, em vez do meu servidor. Então, o endereço IP do meu servidor ficará oculto a esse respeito.

No entanto, ataques ainda podem acontecer, indo um a um por todos os IPs possíveis no mundo. Quando olho meus logs do servidor, vejo que isso acontece MUITO. (Tenho 3 IPs vinculados ao meu 1 servidor e os mesmos ataques ocorrem em XXX.XXX.XXX.XX1 e XXX.XXX.XXX.XX2 e XXX.XXX.XXX.XX3)

Meu arquivo .htaccess de nível superior é assim:

# deny all POST requests
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_METHOD} POST
    RewriteRule .* - [F,L]
</IfModule>


# deny unused request types
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC]
    RewriteRule .* - [F,L]
</IfModule>


# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Perguntas:

  1. O que devo adicionar para que [se HTTP_HOST = XXX.XXX.XXX.XX1 OU HTTP_HOST = XXX.XXX.XXX.XX2 OU HTTP_HOST = XXX.XXX.XXX.XX3] então o tráfego é imediatamente bloqueado?

  2. Posso colocar esse novo código no topo do .htaccess? Será que vai quebrar o que está lá?

por Ryan B 31.05.2018 / 20:05

1 resposta

1

Você não precisa verificar o Host do cabeçalho para IPs específicos, apenas verifique se há Host que comece com um dígito. Por exemplo, na parte superior do seu arquivo .htaccess :

RewriteCond %{HTTP_HOST} ^\d
RewriteRule .* - [F]

Você não precisa do sinal L com F - está implícito.

Você também não precisa dos wrappers <IfModule mod_rewrite.c> adicionais. Basta deixar o WordPress como está. (Embora isso não seja estritamente necessário também.)

No entanto, esses tipos de blocos devem, idealmente, ser executados no nível server / vitualhost, e não em .htaccess . Configure um <VirtualHost> padrão que intercepte essas solicitações IP indesejáveis.

Por exemplo, supondo que você esteja usando apenas VirtualHosts baseados em nome, então você pode configurar um padrão VirtualHost (que deve ocorrer antes de todos os outros VirtualHosts) do formulário:

# Catch all other requests for non-specific hosts. eg IP address access
<VirtualHost _default_>
  ServerName default.example.com
  <Location />
  Require all denied
  </Location>
</VirtualHost>

Isso captura todas as solicitações que não mapeiam para nenhum outro host virtual "nomeado". _default_ é simplesmente um alias para * . Como observado acima, esse <VirtualHost> container deve ocorrer antes de todos os outros <VirtualHost> contêineres na configuração do seu servidor. O fato de ser definido primeiro é o que faz dele o "padrão".

A diretiva ServerName deve ser definida como algo diferente de um real < em> nome do servidor no seu sistema. Ele pode ser omitido, mas o servidor só tentará calculá-lo, o que pode não ser confiável.

Isso impede que seus hosts virtuais reais (que atendem ao seu site) tenham que lidar com essas outras solicitações.

# deny all POST requests

Isso parece um pouco extremo! Estou surpreso que seu site ainda funcione?

    
por 31.05.2018 / 20:49