Filtragem de IP no Apache-nginx-Combo

Filtragem de IP no Apache-nginx-Combo

temos a solicitação para proteger um domínio restringindo o acesso aos intervalos de IP de uma nuvem WAF. O servidor executa Apache para PHP e nginx como servidor proxy reverso, portanto, a cadeia do navegador ao site é presumivelmente: Cliente <-> DNS <-> WAF <-> nginx <-> Apache

Olhando nos logs, descobri que as solicitações atendidas pelo nginx vêm dos ips do WAF, que não são respondidas pelo Apache (vejo meu próprio endereço IP nos logs quando vou ao site). O nginx é configurado usando o Plesk para estar no modo proxy com processamento inteligente de arquivos estáticos.

Aplicar as diretivas ao Apache (htaccess) leva ao 403, o que não é surpresa porque não recebe solicitações do servidor WAF.

Não consegui aplicar as diretivas ao nginx usando Plesk (diretivas adicionais). Isso me dá uma mensagem de erro. tentei

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

nginx: [emerg] local duplicado "/" em /var/www/vhosts/system/example.co/conf/vhost_nginx.conf:1 nginx: arquivo de configuração /etc/nginx/nginx.conf teste falhou

Este servidor executa Plesk 17.8.11, nginx 1.14.2 e Apache 2.4.7 no Ubuntu 14.04.6. Este servidor hospeda vários domínios.

A maneira como tento resolver isso está correta? Por que recebo esse erro?

Adicionando arquivo conf do domínio contendo diretiva de localização:

#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;
}

Existe outro arquivo incluído em 'var/www/...', que está vazio. Provavelmente eu deveria adicionar minhas coisas lá.

Responder1

Esqueça a configuração de localização em "Diretivas Nginx Adicionais". Role para cima na página "Configurações do Apache e nginx" do Plesk até a seção "Negar acesso ao site". Lá você pode simplesmente inserir seus endereços IP ou intervalos de endereços IP que deseja "permitir" ou "negar" e o Plesk irá lidar com isso corretamente para você, independentemente de você estar usando o modo somente Nginx ou proxy.

informação relacionada