在 nGinx 中检查 GeoIP 不起作用

问题描述 投票:0回答:2

我有一个想要限制访问网络应用程序的国家/地区列表。例如,应该禁止来自俄罗斯的用户访问我的网络应用程序。我下载了国家数据库并创建了一个带有地图的单独文件。然后我在

nginx.conf
中注册了配置,但访问没有被阻止。可能是什么问题?

底座:

https://mirrors-cdn.liferay.com/geolite.maxmind.com/download/geoip/database/GeoIP.dat.gz

该文件的路径是:

/etc/nginx/geoip/GeoIP.dat

带有地图 block.map.include 的新包含文件:

该文件的路径是:

/etc/nginx/block.map.include

geoip_country /etc/nginx/geoip/GeoIP.dat;  
map $geoip_country_code $allowed_country {  
        default yes;
        RU no;
        ...//and more contries
}

nginx.conf
中,我添加了包含模块:

include /etc/nginx/modules-enabled/*;

然后在

http{}
中添加:

#GeoIP
include /etc/nginx/block.map.include;

在所有

server{}
组中我添加:

if ($allowed_country = no) {
    return 403;
}

我的完整

nginx.conf

user root;
include /etc/nginx/modules-enabled/*;
worker_processes     auto;
worker_rlimit_nofile 20960;

events {
    worker_connections  1024;
    multi_accept        on;
    use                 epoll;
    epoll_events        512;
}

http {

    #GeoIP
    include /etc/nginx/block.map.include;

    access_log  /var/log/nginx/access.log   combined;
    error_log   /var/log/nginx/warn.log     warn;

    server_tokens off;

    upstream thumbor {
        server localhost:8888;
    }

    upstream solr {
        server localhost:8983;
    }

    upstream minio {
        server localhost:9000;
    }

    upstream activemq {
        server localhost:8161;
    }

    upstream wildfly {
        ip_hash;
        server localhost:8008;
        server localhost:8018;
    }

    server {
        if ($allowed_country = no) {
            return 403;
        }
        listen 80 default_server;
        listen [::]:80 default_server;
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;

        ssl_certificate         /etc/ssl/__****.crt;
        ssl_certificate_key     /etc/ssl/private.key;
        ssl_verify_client       off;
        root                    /var/www/special/not/exist/html;
        server_name             ****.ru;

        location / {
            try_files $uri $uri/ =404;
        }
    }

    server {
        if ($allowed_country = no) {
            return 403;
        }
        listen 80;
        server_name ****.ru;
        rewrite ^ https://****.ru$request_uri? permanent;
    }

    server {
        if ($allowed_country = no) {
            return 403;
        }
        listen                      443 ssl;
        server_name                 ****.ru;
        ssl_certificate             /etc/ssl/__****.crt;
        ssl_certificate_key         /etc/ssl/private.key;
        ssl_protocols               TLSv1.2 TLSv1.3;
        ssl_ciphers                 HIGH:!aNULL:!MD5;

        add_header X-Frame-Options "SAMEORIGIN";
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

        client_body_buffer_size         8k;
        client_max_body_size            20m;
        client_body_in_single_buffer    on;
        client_header_buffer_size       1m;
        large_client_header_buffers 4   8k;

        location /****/thumbor/ {
            proxy_pass http://thumbor/;
        }

        location /solr {
            proxy_pass http://solr;
        }

        location /minio {
            proxy_pass http://minio;
        }

        location /activemq {
            proxy_pass http://activemq;
        }


        location / {
            proxy_pass http://wildfly/;

            proxy_buffer_size 16k;
            proxy_buffers 16 16k;
            proxy_busy_buffers_size 64k;
            proxy_temp_file_write_size 64k;
            proxy_read_timeout 180s;

            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-Forwarded-Proto $scheme;

            if ($request_method !~ ^(GET|HEAD|POST|DELETE|PUT)$ ) {
                return 405;
            }
        }
    }
}

附注服务器已开启

DEBIAN
nGinx
中没有警告和错误。

http security nginx debian geoip
2个回答
0
投票

按照指南进行 GeoIP 设置,但无法使其正常工作。

通过在 Nginx 旁边设置额外的 Java 服务找到了解决方法。该服务解析 IP 数据库并将国家/地区代码直接提供给 Nginx。

在此处查看解决方案:https://github.com/evilbebra/nginx-geoip-blocker


-1
投票

您可以按照那里提到的方式打开调试模式http://nginx.org/en/docs/debugging_log.html

© www.soinside.com 2019 - 2024. All rights reserved.