前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx 访问权限管理

Nginx 访问权限管理

作者头像
奋飛
发布2019-08-14 17:57:36
2.6K0
发布2019-08-14 17:57:36
举报
文章被收录于专栏:Super 前端Super 前端

前段时间,团队开放了组件库演示环境,由于存在一些小伙伴在外地办公(只能外网或者 V** 到内网)。所以,为了安全考虑,设想是否可以通过 Nginx 做一些访问限制呢?当然,答案是肯定的。

诉求整理:

  • 内网:为了便利性,随意访问,不设限制;
  • 外网:通过指定的用户名和密码访问(当然,要求秘钥的保密性)。

增加认证

这个很简单,使用 Nginx 的 ngx_http_auth_basic_module 模块,即可完成。

ngx_http_auth_basic_module 模块允许通过使用“HTTP基本身份验证”协议验证用户名和密码来限制对资源的访问。

代码语言:javascript
复制
location / {
    auth_basic "请输入密码或联系IDSS-FE相关成员";			 # 提示
    auth_basic_user_file /usr/local/nginx/.passwd; # 密钥文件
}

上述 auth_basicauth_basic_user_file 作用域均为 http, server, location, limit_excep

对于密码形式,其支持(具体可以查看参考链接 Nginx 相关模块信息):

  • crypt() 函数加密; 可以使用 Apache HTTP Server发行版中的 “htpasswd” 实用程序或 “openssl passwd” 命令生成;
  • 使用基于 MD5 的密码算法(apr1)的 Apache 变体进行散列;
  • RFC 2307 中描述的 “{scheme} data” 语法(1.0.3+)指定;

生成密码

这里使用 Apache 的 htpasswd 工具生成。

htpasswd - Manage user files for basic authentication

代码语言:javascript
复制
# [可选]安装 httpd-tools
$ yum install -y httpd-tools
# 生成密钥文件
$ htpasswd -c /usr/local/nginx/.passwd idss-fe
# 按提示输入密码、确认密码,即完成配置

  • - c 创建 passwd 文件。如果 passwdfile 已存在,则会重写并截断。此选项不能与 -n 选项组合使用。(具体可查看参考链接 Apach 相关文档)
  • idss-fe 为用户名,会添加到 .passwd 文件中

生成的内容,格式如下:

代码语言:javascript
复制
idss-fe:$apr111$d/Rw..nPddMiS...FSg0tho0

上述,整体处理完成,不要忘记 $ nginx -s reload

访问限制

只针对外网做限制。其中,这里实现的思路,是逆向的。外网的 IP,没办法穷举;但是我们部署的服务器,和我们自身的内网环境是属于同一个网段,我们放行该网段,同时禁止其他所有访问,也就达到了上述目的。

这里使用 Nginx 的核心模块 Module ngx_http_core_module 中的 satisfyngx_http_access_module 模块结合实现。

ngx_http_access_module模块允许限制对某些客户端地址的访问

代码语言:javascript
复制
location / {
    satisfy any;	# 下述 access 和 auth_basic 任意通过即可

    allow 192.168.1.0/32; # 只需求该网段,其他全部禁止
    deny  all;

    auth_basic "请输入密码或联系IDSS-FE相关成员";
    auth_basic_user_file /usr/local/nginx/.passwd;
}

  • satisfy all 全部或 satisfy any 下述任意一个 ngx_http_access_modulengx_http_auth_basic_modulengx_http_auth_request_modulengx_http_auth_jwt_module 模块允许访问,则允许访问。 作用域 http, server, location
  • allow 同时支持 IPv4/IPv6。allow 192.168.1.0/32; allow 2001:0db8::/32; 作用域 http, server, location, limit_except。(具体可查看参考链接 access module 相关文档)

附:完整配置

代码语言:javascript
复制
ocation / {
  satisfy any;
  
  allow 192.168.101.0/32;
  deny all;
  
  auth_basic "请输入密码或联系IDSS-FE相关成员";	
  auth_basic_user_file /usr/local/nginx/.passwd;
    
  root   /idss/demo-collection/dist;
  index  index.html index.htm;
  try_files $uri $uri/ /index.html;
}

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年08月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 增加认证
  • 生成密码
  • 访问限制
  • 附:完整配置
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档