前段时间很多数据库因为没有做好权限控制暴露在外网被删然后遭勒索的事件,而类似的有些内网的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. Adapter基本用法

    使用流程 graph LR A(新建适配器) -->B(绑定数据源) B-->C(设置适配器) 1. ArrayAdapter new ArrayAdapter<?>(cont ...

  2. 每天一个Linux命令 8

    yum 光盘yum源搭建好处:不需要上网,省去许多网络yum源下载所需的时间,安装速度会大大增加.缺点:yum源不一定是最新的 1.打开虚拟机,加载光盘镜像,进入Linux系统,挂载光盘.2. 让网络 ...

  3. 小白该怎么学《马哥Linux从入门到精通》

    首先,必须说明我已经不是小白啦~现在的我在国内某独角兽担任运维工程师,带着一个四人小团队,在运维方面也算是有些心得,勉强过来回答一下这个问题,就算抛砖引玉了. 所有人都是从小白阶段过来的,我=也经历过 ...

  4. 1638: [Usaco2007 Mar]Cow Traffic 奶牛交通

    1638: [Usaco2007 Mar]Cow Traffic 奶牛交通 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 618  Solved: 217 ...

  5. java笔记---equals和==的区别

    摔在这里几次,还是记下来吧.原文:http://www.cnblogs.com/shenliang123/archive/2012/04/16/2452156.html --------------- ...

  6. Android: DrawerLayout 侧滑菜单栏

    DrawerLayout是SupportLibrary包中实现的侧滑菜单效果的控件. 分为主内容区域和侧边菜单区域 drawerLayout本身就支持:侧边菜单根据手势展开与隐藏, 开发者只需要实现: ...

  7. 队列工厂之RabbitMQ

    本次和大家分享的是RabbitMQ队列的用法,前一篇文章队列工厂之(MSMQ)中在描述的时候已经搭建了简单工厂,因此本章内容是在其之上扩充的子项不再过多讲解工厂的代码了:RabbitMQ应该是现在互联 ...

  8. Servlet中的过滤器Filter详解

    加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...

  9. jump堡垒机配置使用

    一.用户管理 1)添加用户 点击用户管理 —> 查看用户 —> 添加用户 输入要添加的用户名,姓名,权限,Mail,并且发送邮件 —> 保存 查看添加的用户 查看用户邮件 邮件中包含 ...

  10. 剑指offer:重建二叉树

    重建二叉树的前置知识: 0.遍历二叉树: (1)前序遍历:根左右 --> 先访问根节点,再前序遍历左子树,最后前序遍历右子树: (2)中序遍历:左根右 --> 先中序遍历左子树,再访问根节 ...