Permitir pedidos POST de um único endereço IP apenas no NGINX

2

É possível permitir que apenas um único endereço IP faça solicitações de POST e negue a todos os outros sobre os mesmos motivos no NGINX?

Visto uma resposta relacionada a esta mas a solução oferecida lá precisa que a regra seja aplicada em todo o servidor. Eu preciso fazer isso em um nível de host virtual, sem afetar os outros sites hospedados no mesmo servidor.

    
por Ali 24.03.2017 / 09:42

2 respostas

1

Em seu diretório de host virtual, crie um arquivo .htaccess.

Você pode usar regras como essa para negar todas as solicitações de postagem:

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

Em seguida, permita a lista de permissões:

# whitelist POST requests
<IfModule mod_rewrite.c>
     RewriteCond %{REQUEST_METHOD} POST
     RewriteCond %{REQUEST_URI} !/contact.php [NC]
     RewriteCond %{REMOTE_ADDR} !127.0.0.1 
     RewriteRule .* - [F,L]
 </IfModule>

Mais informações sobre este site

EDIT: para NGINX você pode transformar a regra precedente com esta ferramenta online , por exemplo :

if ($request_method ~ "POST"){
    set $rule_0 1$rule_0;
}
if ($rule_0 = "1"){
    return 403;
    break;
}


if ($request_method ~ "POST"){
    set $rule_0 1$rule_0;
}
if ($remote_addr !~ "127.0.0.1"){
    set $rule_0 3$rule_0;
}
if ($rule_0 = "321"){
   return 403;
    break;
}
    
por 24.03.2017 / 10:21
0

A resposta que você precisa é semelhante a .

Você precisaria de um cheque adicional para postar, o que seria ($request_method = POST ) .

Assim, o bloco seria parecido com o seguinte (que eu não pude testar):

location @location {
  if ($request_method = POST) {
     allow IP;
     deny all;
  }
}

Os documentos para o módulo de acesso são aqui .

    
por 24.03.2017 / 10:41