前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0663-6.2.0-通过Nginx获取CDSW的登录信息

0663-6.2.0-通过Nginx获取CDSW的登录信息

作者头像
Fayson
发布2019-07-09 00:57:19
4990
发布2019-07-09 00:57:19
举报
文章被收录于专栏:Hadoop实操Hadoop实操

作者:余枫

1

文档编写目的

任务背景:需要记录CDSW登录的审计信息,如用户啥时候登录,登录失败与否,用户名是什么。

难点:目前CDSW本身不包含这些信息记录,只有简单的用户登录成功的信息,集成AD后理论可以在AD侧来实现,但企业AD team不配合,所以只能在CDSW这边来做。

任务描述:因为源生CDSW不支持,现在考虑用Nginx首先转发CDSW的登录页面,然后用Nginx来捕获http页面的登录请求,最后分析该登录请求来完成目标。

任务分3个阶段:

1.实现Nginx配置CDSW,即访问Nginx的地址和端口可以进入CDSW页面并执行任务。

2.通过配置Nginx的配置,尝试捕获CDSW的登录信息。

3.编写Python或者Shell脚本解析登录信息,保存到MySQL或者Impala中进行查询分析。

  • 测试环境:

1.操作系统为RedHat7.2

2.CDSW版本为1.5

3.Nginx的版本为1.16.0

4.使用root用户进行操作

2

安装并配置Nginx

1.下载Nginx安装包并解压,然后进行编译和安装

下载地址如下:

代码语言:javascript
复制
http://nginx.org/download/nginx-1.16.0.tar.gz

解压后:

编译:

代码语言:javascript
复制
./configure --with-stream

安装:

代码语言:javascript
复制
make && make install

默认Nginx的安装目录为/usr/local/nginx

安装完成后启动Nginx

2.配置Nginx捕获CDSW界面的HTTP请求信息

修改Nginx配置文件/usr/local/nginx/conf/nginx.conf,为CDSW页面配置转发

代码语言:javascript
复制
server {
    listen       80;
    server_name  cdsw.macro.com;

    location / {
        proxy_pass http://cdsw.macro.com;
    }
}

重新加载Nginx配置文件

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx -s reload

修改访问CDSW服务的本地Windows机器的hosts文件

在hosts文件中 添加一行,如下:

代码语言:javascript
复制
192.168.0.177 cdsw.macro.com

Nginx服务安装在192.168.0.177这台服务器

添加完成后访问CDSW页面:

登录后运行session,执行示例代码成功

3

收集CDSW的登录信息

1.修改Nginx服务的配置文件/usr/local/nginx/conf/nginx.conf

Nginx服务的日志支持自定义的方式,修改格式获取所需的登录信息,第一个值是时间,第二个值是请求的信息,第三个值是状态码,第四个值是请求体,第五个是客户端IP地址,第六个是记录从哪个页面链接访问过来的,第七个是客户端浏览器的信息。修改完成后重新加载Nginx服务的配置文件。

2.在CDSW页面上登录,然后在Nginx的日志中查看是否有登录信息

在页面上登录一个不存在的用户

查看Nginx服务的日志

可以看到日志中能够获取到登录的时间,请求方式,登录失败的状态码401,登录的账号和密码,接下来编写脚本对日志进行处理,然后将登录信息持久化到MySQL中。

3.脚本如下:

代码语言:javascript
复制
#!/bin/bash
HOSTNAME="192.168.0.178"
PORT="3306"
USERNAME="root"
PASSWORD="123456"
DBNAME="cdsw_login_info"
TABLENAME="login_info"
log_dir=/usr/local/nginx/logs/
log_name=$(date -d "yesterday" +"%Y%m%d")

#将nginx日志中的十六进制引号转为正常显示的引号并定向到前一天日期命令的新日志文件
sed 's#\\x22#"#g' ${log_dir}access.log > ${log_dir}${log_name}.log
#将nginx日志文件清空,确保每次处理的是前一天的日志
cat /dev/null > ${log_dir}access.log
#按行读取新的日志文件进行处理
cat ${log_dir}${log_name}.log | while read line
do
if [[ $line =~ "authenticate" ]]; then
    OIFS=$IFS; IFS="|"; set -- $line; aa=$1;bb=$3;cc=$4;source_ip=$5;referer=$6;user_agent=$7 IFS=$OIFS
    OIFS=$IFS; IFS='""'; set -- $cc; username=$7 IFS=$OIFS
    login_time=${aa:0:10}" "${aa:11:8}
    if [[ $bb = "200"  ]]; then
        login_state=1
    elif [[ $bb = "401"  ]]; then
        login_state=0
    else
        login_state=-1
    fi
    insert_sql="insert into ${DBNAME}.${TABLENAME}(source_ip,name,referer,user_agent,login_state,login_time) values('$source_ip','$username','$referer','$user_agent',$login_state,'$login_time')"
    mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} -e "${insert_sql}"
fi
done

4.执行脚本进行测试,查看MySQL中的结果

执行脚本之前,先在MySQL中创建库和表

代码语言:javascript
复制
CREATE DATABASE cdsw_login_info;

CREATE TABLE `login_info` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `source_ip` varchar(32),
  `name` varchar(16),
  `referer` varchar(32),
  `user_agent` varchar(256),
  `login_state` int(1),
  `login_time` timestamp,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

执行脚本后,查看表的信息如下:

如上图,用户登陆的账户、登陆是否失败、登陆时间存储到了MySQL中,可以使用SQL进一步统计用户登录的次数等等其他信息。

5.配置定时任务,每天0点执行一次脚本,将错误信息输出到错误日志

代码语言:javascript
复制
0 0 * * * /root/collect_login_info/nginx111.sh 2>> /root/collect_login_info/error.log
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档