Filtrado de IP en Apache-nginx-Combo

Filtrado de IP en Apache-nginx-Combo

Tenemos la solicitud de proteger un dominio restringiendo el acceso a los rangos de IP de una nube WAF. El servidor ejecuta Apache para PHP y nginx como servidor proxy inverso, por lo que la cadena desde el navegador hasta el sitio web es presumiblemente: Cliente <-> DNS <-> WAF <-> nginx <-> Apache

Al mirar los registros, descubrí que las solicitudes cumplidas por nginx provienen de las ips del WAF, que no fueron respondidas por Apache (veo mi propia dirección IP en los registros cuando voy al sitio web). nginx se configura mediante Plesk para estar en modo proxy con procesamiento inteligente de archivos estáticos.

La aplicación de directivas a Apache (htaccess) conduce al error 403, lo cual no es ninguna sorpresa porque no recibe solicitudes del servidor WAF.

No pude aplicar las directivas a nginx usando Plesk (directivas adicionales). Esto me da un mensaje de error. Lo intenté

location / {
    allow 199.83.128.0/21;
    allow 2a02:e980::/29;
    deny all;
}

nginx: [emerg] ubicación duplicada "/" en /var/www/vhosts/system/example.co/conf/vhost_nginx.conf:1 nginx: falla en la prueba del archivo de configuración /etc/nginx/nginx.conf

Este servidor ejecuta Plesk 17.8.11, nginx 1.14.2 y Apache 2.4.7 en Ubuntu 14.04.6. Este servidor aloja varios dominios.

¿Es correcta la forma en que intento resolver esto? ¿Por qué recibo este error?

Agregar el archivo de configuración del dominio que contiene la directiva de ubicación:

#ATTENTION!
#
#DO NOT MODIFY THIS FILE BECAUSE IT WAS GENERATED AUTOMATICALLY,
#SO ALL YOUR CHANGES WILL BE LOST THE NEXT TIME THE FILE IS GENERATED.

server {
    listen 00.000.00.00:443 ssl http2;

    server_name example.com;
    server_name www.example.com;
    server_name ipv4.example.com;

    ssl_certificate             /opt/psa/var/certificates/scfPNclj5;
    ssl_certificate_key         /opt/psa/var/certificates/scfPNclj5;
    ssl_client_certificate      /opt/psa/var/certificates/scf58Rxns;

    client_max_body_size 128m;

    proxy_read_timeout 300;

    root "/var/www/vhosts/example.com/httpdocs";
    access_log "/var/www/vhosts/system/example.com/logs/proxy_access_ssl_log";
    error_log "/var/www/vhosts/system/example.com/logs/proxy_error_log";

    if ($host ~* ^superglass\.de$) {
        rewrite ^(.*)$ https://www.example.com$1 permanent;
    }

    #extension letsencrypt begin
    location ^~ /.well-known/acme-challenge/ {
        root /var/www/vhosts/default/htdocs;

        types { }
        default_type text/plain;

        satisfy any;
        auth_basic off;
        allow all;

        location ~ ^/\.well-known/acme-challenge.*/\. {
            deny all;
        }
    }
    #extension letsencrypt end

    location / {
        proxy_pass https://00.000.00.00:7081;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Accel-Internal /internal-nginx-static-location;
        access_log off;

    }

    location /internal-nginx-static-location/ {
        alias /var/www/vhosts/example.com/httpdocs/;
        internal;
    }

    location ~ ^/(plesk-stat|awstats-icon|webstat|webstat-ssl|ftpstat|anon_ftpstat) {
        proxy_pass https://00.000.00.00:7081;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Accel-Internal /internal-nginx-static-location;
        access_log off;

    }

    location ~ "^/files/" {
        proxy_pass https://00.000.00.00:7081;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Accel-Internal /internal-nginx-static-location;
        access_log off;

    }

    add_header X-Powered-By PleskLin;

    include "/var/www/vhosts/system/example.com/conf/vhost_nginx.conf";
}

server {
    listen 00.000.00.00:80;

    server_name example.com;
    server_name www.example.com;
    server_name ipv4.example.com;

    client_max_body_size 128m;

    proxy_read_timeout 300;

    if ($host ~* ^superglass\.de$) {
        rewrite ^(.*)$ https://www.example.com$1 permanent;
    }

    return 301 https://$host$request_uri;
}

Hay otro archivo incluido en 'var/www/...', que está vacío. Probablemente debería agregar mis cosas allí.

Respuesta1

Olvídese de la configuración de ubicación en "Directivas adicionales de Nginx". Desplácese hacia arriba en la página "Configuración de Apache y nginx" de Plesk hasta la sección "Denegar acceso al sitio". Allí simplemente puede ingresar sus direcciones IP o rangos de direcciones IP que desea "permitir" o "denegar" y Plesk lo manejará correctamente por usted, independientemente de si está utilizando solo Nginx o el modo proxy.

información relacionada