如何拒绝外网用户访问特定URL?

Nginx

1 前言

一个问题,一篇文章,一出故事。
笔者有一个认证接口需要拒绝intetnet的用户访问同时允许internal用户访问,于是整理此文。

2 最佳实践

2.1 增加判断代码

vim /etc/nginx/conf.d/websso.cmdschool.org_443_keycloak.conf

增加如下配置,

geo $lan_subnet {
    default 0;
    10.0.0.0/8 1;
    172.16.0.0/12 1;
    192.168.0.0/16 1;
}

server {
    #...
    set $test '';
    if ($lan_subnet = 0){
        set $test 'internet';
    }
    if ( $request_uri ~* auth/realms/master ) {
        set $test "${test}-access";
    }
    if ( $request_uri ~* auth/admin/master ) {
        set $test "${test}-access";
    }
    if ( $test = internet-access ) {
         return 403;
    }
    #...
}

需要注意的是,
– 命令“geo”根据浏览器客户端的源地址赋值,默认为“0”,如果用户是私有地址赋值为“1”
– 第一个“if”判断变量“lan_subnet”是否等于“0”,如果等于零即使给变量“test”赋值“internet”
– 第二个“if”判断变量“request_uri”是否模式匹配“auth/realms/master”,如果是则修改字符串为“internet-access”
– 第三个“if”判断变量“request_uri”是否模式匹配“auth/admin/master”,如果是则修改字符串为“internet-access”
– 第四个“if”判断变量“$test”是否等于“internet-access”,如果是则修拒绝改来源IP的访问

2.2 重载使服务生效

systemctl reload nginx

参阅文档
======================
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite
http://nginx.org/en/docs/http/ngx_http_geo_module.html

没有评论

发表回复

Nginx
如何安装部署RHEL 9 Nignx?

1 前言 一个问题,一篇文章,一出故事。 笔者需要基于RHEL 9部署Nginx环境,于是整理此文。 …

Nginx
如何编译安装Oracle Linux 9.x Nginx?

1 基础知识 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 Ngi …

Nginx
如何编译Tengine Cookie标签模块?

1 前言 一个问题,一篇文章,一出故事。 笔者编译版本的Tengine需要加载Cookie标签模块, …