Bloqueia o acesso a um arquivo ou local no Nginx

2

Acabamos de começar a executar o nginx há algumas semanas e precisamos bloquear o acesso a determinados arquivos / locais. por exemplo:

/wordpress/wp-admin/
/wp-admin/
/test/wp-admin/
/hudson/login
/phpmyadmin/index.php
/mysql/index.php
/myadmin/index.php
/wp-cron.php
/xmlrpc.php

Em geral, gostaríamos de bloquear qualquer solicitação de arquivo, exceto /index.php e também qualquer local como / wp-admin /, / teste / wp-admin /, / wordpress / wp-admin /, etc. Esses arquivos / locations não existem, portanto, qualquer pessoa que os acesse está tentando invadir / abusar do sistema.

No Apache, usaríamos .htaccess para bloquear isso. Como bloquear o Nginx?

Conf Conf

server {
    listen       80;
    root /home/public_html;
    index index.php;
    server_name  domain.com;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    } 


    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
    }
}
    
por Mugoma J. Okomba 06.05.2017 / 07:52

1 resposta

4

A configuração abaixo deve fazer com que o nginx responda aos URLs de "abuso" com um status 404 e uma página básica nginx, 404; todos os outros URLs terminados em .php devem ser passados para o mecanismo do aplicativo / php como de costume. Eu testei alguns dos padrões, mas você deve testar todos os padrões que você quer que sejam gerenciados pelo nginx e não pelo aplicativo. Eu pensei que esta configuração pode ter tido alguns problemas em URLs como /phpmyadmin/index.php onde o \.php regex do local de passagem do proxy tinha maior prioridade, mas o meu teste mostra que funciona, pelo menos para mim. Além disso, sim, seria melhor se não houvesse tantos blocos de localização, mas não consigo pensar em como você conseguiria isso.

server {
    listen       80;
    root /home/public_html;
    index index.php;
    server_name  domain.com;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    } 


    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
    }

    # The ^~ means if this prefix pattern matches use this location block
    # and don't continue onto the regex location blocks - which would load
    # the laravel application
    location ^~ /wordpress/wp-admin/ {
        return 404;
    }
    location ^~ /wp-admin/ {
        return 404;
    }
    location ^~ /test/wp-admin/ {
        return 404;
    }
    location ^~ /hudson/login {
        return 404;
    }
    location ^~ /phpmyadmin/index.php {
        return 404;
    }
    location ^~ /mysql/index.php {
        return 404;
    }
    location ^~ /myadmin/index.php {
        return 404;
    }
    location ^~ /wp-cron.php {
        return 404;
    }
    location ^~ /xmlrpc.php {
        return 404;
    }

} 
    
por 06.05.2017 / 14:47

Tags