GNU/Linux >> Tutoriales Linux >  >> Linux

Configure nginx.conf para denegar todas las conexiones excepto a ciertos archivos o directorios

El camino más fácil sería comenzar denegando todo acceso y luego otorgar acceso solo a los directorios que desee. Como señaló ring0, puede usar el indicador predeterminado (default_server en 0.8) en la directiva de escucha. Sin embargo, si ya tiene un servidor que desea usar como predeterminado para el acceso con nombre desconocido a su host, también puede capturar solicitudes sin un encabezado de host o con la dirección IP de su servidor con algo como esto (reemplazando 1.2.3.4 con su IP del servidor:

upstream _php {
  server unix:/var/run/php-fpm/php-fpm.sock;
}

server {
  server_name "" 1.2.3.4;

  root /path/to/root;
  index index.php;

  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

  # deny everything that doesn't match another location
  location / { deny all; }

  # allow loading /index.php
  location = / { } # need to allow GET / to internally redirect to /index.php
  location = /index.php { fastcgi_pass _php; }

  # allow access to phpmyadmin
  location /phpmyadmin/ { } # Allow access to static files in /phpmyadmin/
  location ~ ^/phpmyadmin/.*\.php$ { fastcgi_pass _php; } # phpmyadmin php files
}

los fastcgi_params serán heredados por ambas ubicaciones que fastcgi_pass, y solo /index.php y /phpmyadmin/ están permitidos. También agregué un bloque ascendente para php, lo que lo hace más fácil en caso de que necesite agregarlo o cambiarlo en el futuro.


Uso creativo de la ubicación y reglas de denegación negadas en expresiones regulares, algo como:

    location / {
        root   html;
        index  index.html index.htm index.php;
    }

    location ~* !^/(index.(php|html|htm)$)|(phpmyadmin/) {
        deny all;
    }

    location ~ \.php$ {
        root           html;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME /srv/http/nginx/$fastcgi_script_name;
        include        fastcgi_params;
    }

Eso no se ha probado, pero entiendes la idea.

http://wiki.nginx.org/HttpAccessModule

http://wiki.nginx.org/HttpCoreModule#ubicación

Además, esto puede ayudarte a escribirlo:

http://www.regextester.com/


Linux
  1. Enumere recursivamente todos los archivos en un directorio, incluidos los archivos en los directorios de enlaces simbólicos

  2. Elimine todos los archivos excepto los 3 más nuevos en bash script

  3. ¿Cómo configurar archivos abiertos nginx max?

  4. ¿Negar todas las conexiones entrantes con iptables?

  5. ¿Cómo encontrar / enumerar todos los archivos únicos en dos directorios?

¿Eliminar todos los archivos/directorios excepto un archivo?

¿Usar Buscar para encontrar cierto directorio y eliminar todos los archivos excepto un directorio?

Cómo realizar una búsqueda Grep en todos los archivos y en todos los directorios

Haga coincidir todos los archivos en todos los directorios anidados con shell globbing

Comando para listar todos los archivos excepto . (punto) y .. (punto punto)

Buscar directorios que contengan un cierto número de archivos