如何拒绝外网用户访问特定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
如何使用Nginx发布维护公告?

1 前言 一个问题,一篇文章,一出故事。 最近由于需要发布维护公告,想着这种东西以后用得着,于是总结 …

Nginx
如何实现Nginx第一次访问跳转?

1 前言 一个问题,一篇文章,一出故事。 笔者在NextCloud生产环境中需要实现首次登录显示公告 …

Nginx
如何实现Nginx首次访问跳转?

1 前言 一个问题,一篇文章,一出故事。 笔者在NextCloud生产环境中需要实现首次登录显示公告 …