前段时间很多数据库因为没有做好权限控制暴露在外网被删然后遭勒索的事件,而类似的有些内网的web服务也会被开放到公网并且没有做任何权限控制的,这样也会有一定的风险。所以就决定写篇文章简单介绍一个小工具。

aProxy是做什么用的

例如我们有很多服务,例如Hadoop、Aerospke、Riak等,都会有一些监控的web界面,我们需要查看这些线上服务的情况,但是又不能完全将这些服务开放到外网,让别人看到,这时候我们可能的做法是通过拨VPN,或者是通过Nginx的BaseAuth验证,又或者是简单的本地绑定ip和host来访问,这些方法管理和维护起来都不方便;有些人为了方便甚至是完全开放到外网,谁人都可以自由访问。所以我们写了一个简单的小工具aProxy来解决这个问题。

下面有两个服务用于演示的,试着访问下面两个服务(转到登录界面时请点底部的Github登录):

aProxy通过设定upstream来做反向代理:

UpStream的地址通常我们使用内网地址,这样就不需要将服务开放到外网了。

对于资源的开放程度有三种类型:

  • Public: 完全开放,谁人都可以访问
  • Need Login:需要登录才可以访问
  • Need Authority:需要授权才可以访问

然后通过授权管理来开放特定的服务给特定的用户,aProxy的授权规则是基于email和URL的。

这里设定了两个服务,一个是只需登录就能访问的分布式的定时任务系统cronsun,一个是必须授权才能访问的Hadoop dfshealth服务,你们可以直接分别访问这两个地址就能感受到aProxy是个什么样的作用了。(登录界面请用底部的Github登录)

aProxy安装

安装aProxy可以选择从 https://github.com/shunfei/aproxy/releases 直接下载编译好的二进制文件:

tar xzvf aproxy-v0.-xxxx-xxx-xx.tar.gz
cd aproxy-v0.-xxxx-xxx-xx
cp conf/aproxy.toml.example conf/aproxy.toml

如果你熟悉go语言,也可以从源码编译:

cd $GOPATH/src
git clone https://github.com/shunfei/aproxy.git
cd aproxy
sh ./install.sh

运行aProxy

在运行aProxy之前,需要先准备好 MongoDB 和 Redis(其中MongoDB是用于配置存储,Redis用于session存储),然后修改conf/aproxy.toml里面相应的配置,就可以运行aProxy了:

./bin/aproxy -c conf/aproxy.toml

数据库里面现在是没有用户的,所以我们加一个用户到数据库里面:

./bin/adduser -c conf/aproxy.toml -action adduser -email yourname@gmail.com -pwd passwordxxx

接着将这个用户设置为Admin:

./bin/adduser -c conf/aproxy.toml -action setadmin -email yourname@gmail.com -adminlevel 

现在你可以访问 http://127.0.0.1:8098/-_-aproxy-_-/  并开始设置aProxy,开心的开始使用了。

aProxy的域名相关配置

aProxy的反向代理是基于域名配置的,而aProxy需要验证用户的登录情况则需要获取到登录后的cookie,所以aProxy的服务需要基于子域名来配置:

  • aproxy.domain.com
  • mongodb-mms.aproxy.domain.com
  • hadoop.aproxy.domain.com
  • aerospike.aproxy.domain.com

如上的域名列表,aproxy.domain.com 则用于aproxy的登录域名,其他的子域名则为相应服务的域名,这样当登录后,子域名(例如 hadoop.aproxy.domain.com)就可以读取到上一级域名的cookie数据,获取到登录状态。所以我们aProxy的Nginx配置大概如下:

server {
listen ;
server_name aproxy.domain.com *.aproxy.domain.com;
location / {
include proxy.conf;
# pass to aproxy
proxy_pass http://127.0.0.1:8098;
}
}

这样我们就可以设置一个泛域名解析 *.aproxy.domain.com 到这台Nginx服务器了。
然后还需要修改 conf/aproxy.toml 里面的和域名相关的配置:

loginHost = "http://aproxy.domain.com"
[session]
domain = "aproxy.domain.com"

和公司内部用户帐号系统集成

aProxy是基于golang写的,所以这需要你们对go语言有基本的了解。
aProxy提供了一个基于MongoDB存储的用户系统,不过很多时候我们希望和公司内部的帐号系统进行集成,方便员工使用。这时候我们就可以实现aProxy位于aproxy/module/auth/UserStorager的UserStorager的接口:

type UserStorager interface {
Login(email, pwd string) (*User, error)
GetByEmail(email string) (*User, error)
GetAll() ([]User, error)
// add new user.
// user.Pwd field has encrypted.
Insert(user User) error
Update(id string, user User) error
}

通常情况下对于集成公司内部的用户帐号系统的,我们并不需要使用aProxy来管理用户信息,所以我们只需实现接口的Login(email, pwd string) (*User, error)这一个方法就可以。
在实现了aproxy/module/auth/UserStorager接口后, 我们需要修改 aproxy/bin/main.go 里面的一些代码,使用你自己实现的用户存储接口:

//file: aproxy/bin/main.go
//delete this line:
// auth.SetUserStorageToMongo() //add this code, to register your own UserStorager to aproxy
auth.SetUserStorage(&yourUserStorage{})

如果想增加oAuth的登录验证,则实现 module/oauth/Oauther 接口就可以,具体可以参考loginservices/github 的实现。

aProxy: 带认证授权和权限控制的反向代理的更多相关文章

  1. Token认证登录以及权限控制

    IdentityServer4实现Token认证登录以及权限控制   相关知识点 不再对IdentityServer4做相关介绍,博客园上已经有人出了相关的系列文章,不了解的可以看一下: 蟋蟀大神的: ...

  2. IdentityServer4实现Token认证登录以及权限控制

    相关知识点 不再对IdentityServer4做相关介绍,博客园上已经有人出了相关的系列文章,不了解的可以看一下: 蟋蟀大神的:小菜学习编程-IdentityServer4 晓晨Master:Ide ...

  3. 使用nginx配置带有权限验证的反向代理

    环境:centos6u3 1.安装nginx (1)上传nginx nginx-1.14.0.tar.gz.可以从nginx官网下载http://nginx.org/en/download.html ...

  4. JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作

    1 学习计划 1.演示权限demo 2.权限概述 n 认证 n 授权 3.常见的权限控制方式 n url拦截权限控制 n 方法注解权限控制 4.创建权限数据模型 n 权限表 n 角色表 n 用户表 n ...

  5. Shiro的认证和权限控制

    权限控制的方式 从类别上分,有两大类: - 认证:你是谁?–识别用户身份. - 授权:你能做什么?–限制用户使用的功能. 权限的控制级别 从控制级别(模型)上分: - URL级别-粗粒度 - 方法级别 ...

  6. 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示

    1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...

  7. JAVAEE——BOS物流项目11:在realm中授权、shiro的方法注解权限控制、shiro的标签权限控制、总结shiro的权限控制方式、权限管理

    1 学习计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 n 在spring文件中配置开启shiro注解支持 n 在Action方法上使用注解 3.★使用shiro的标签进行 ...

  8. 源码分析shiro认证授权流程

    1. shiro介绍 Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户“登录”: 授权 - 访问控制: 密码加密 ...

  9. shiro权限控制入门

    一:权限控制两种主要方式 粗粒度 URL 级别权限控制和细粒度方法级别权限控制 1.粗粒度 URL 级别权限控制 可以基于 Filter 实现在数据库中存放 用户.权限.访问 URL 对应关系, 当前 ...

随机推荐

  1. laravel初次学习总结及一些细节

    最近学习了laravel,先简单谈谈学习的感受吧 刚开始一周多一点的时间先把laravel的开发文档看了一遍,,感觉刚开始接触时的感觉laravel的目录与thinkphp又不一样,它们的渲染模板的方 ...

  2. Servlet中表单的重复提交

    1.用户登录页面: ->设置一个UUID到session中 ->将UUID添加到隐藏域中,提交到服务器 <% //进入页面,设置一个UUID,将UUID添加到session中 Str ...

  3. 微信开源PHP商城系统一处blind xxe(无需登录,附POC)

    测试版本wemall 3.3 下载地址 http://git.oschina.net/einsqing/wemall/repository/archive?ref=master 需要开源中国的账号 c ...

  4. a中的类型转换

    自动类型转换 当然自动类型转换是需要满足特定的条件的: 1.  目标类型能与源类型兼容,如 double 型兼容 int 型,但是 char 型不能兼容 int 型. 2.  目标类型大于源类型,如 ...

  5. iOS切圆角的几个方法

    这几天在研究到切圆角的方法,也找了下网上的资料 ---------- 切圆角尽量避免离屏渲染. 1.直接用视图中layer中的两个属性来设置圆角,这种方法比较简单,但是及其影响性能不推荐:  @pro ...

  6. Git环境搭建以及上传到GitHub全文记录

    1.百度搜索下载git,官网可能很慢,我在百度软件里面下载的.当然可能不是最新版本.一路回车安装就好. 2.设置本机git的用户名和邮箱地址 查看当前电脑是否设置了用户名称 $ git config ...

  7. Octave Tutorial(《Machine Learning》)之第四课《绘图数据》

    第四课 Plotting Data 绘图数据 t = [0,0.01,0.98]; y1 = sin(2*pi*4*t); y2 = cos(2*pi*4*t); plot(t,y1);(绘制图1) ...

  8. linux下mysql的大小写是否区分设置

    转:http://blog.csdn.net/qq_29246225/article/details/52293549 一.Linux中MySQL大小写详情:1.数据库名严格区分大小写2.表名严格区分 ...

  9. 如何在RecyclerView上面实现"拖放"和"滑动删除"-1

    Android上面有许多的教程, 库和示例, 在RecyclerView上面实现"拖放"和"滑动删除"功能. 尽管有更新, 更好的方法可用, 但是大多数人依然使 ...

  10. Linux之cut命令

    cut 参数: -d  指定分隔符,与-f 一起使用,默认是空格.例如:-d“|” -f  指定取第几段的数据与-d一起使用 -c  以字符为单位取出固定字符区间 示例: 取不连续区间的内容的时候使用 ...