一、堡垒机介绍
在一个特定网络环境下,为了保障网络和数据不受外界入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责。 我们又把堡垒机叫做跳板机,简易的跳板机功能简单,主要核心功能是远程登录服务器和日志审计。 比较优秀的开源软件jumpserver,认证、授权、审计、自动化、资产管理。 商业堡垒机:齐治, Citrix XenApp
二、搭建简易堡垒机
具备堡垒机的条件是,该机器有公司和私网,其中私网和机房其他机器互通 设计堡垒机思路: 跳板机安全设置(iptables端口限制、登录限制sshd_config) 用户、命令权限限制(第三方软件:jailkit) http://blog.chinaunix.net/uid-28310119-id-3503318.html 客户机器日志审计 http://www.68idc.cn/help/server/linux/2014042190951.html
三、搭建简易堡垒机 – 安装jailkit实现chroot
cd /usr/local/src/ wget https://olivier.sessink.nl/jailkit/jailkit-2.19.tar.bz2 tar jxvf jailkit-2.19.tar.bz2 cd jailkit-2.19 ./configure make && make install mkdir /home/jail chmod 755 /home/jail 如果执行下面的报错在给权限即可把常用命令放到虚拟系统的目录下/home/jail jk_init -v -j /home/jail/ basicshell shell相关的 jk_init -v -j /home/jail/ editors 编辑器vim jk_init -v -j /home/jail/ netutils 网络相关的 jk_init -v -j /home/jail/ ssh 远程登陆的ssh mkdir /home/jail/usr/sbin cp /usr/sbin/jk_lsh /home/jail/usr/sbin/jk_lsh 相当于虚拟系统的shell,放到/usr/sbin下 创建多个用户,重复执行以下操作即可,没创建一个用户执行一次 useradd baoleiji passwd baoleiji jk_jailuser -m -j /home/jail baoleiji 创建虚拟系统的用户
vim /home/jail/etc/passwd //把baoleiji那一行的/usr/sbin/jk_lsh改为/bin/bash
登录baoleiji用户测试
vim /etc/ssh/sshd_config 改成no只能用秘钥登陆
登陆的源ip:vim /etc/hosts.allow 可以限制ip登陆,除了allow中限制的ip之外,其他的都不能登陆
限制来源ip,客户机只能用跳板机登陆,其他机器不能登录
vim /etc/hosts.allow
vim /etc/hosts.deny
此时在连接002机器已无法正常连接,需要通过登录的跳板机连接,如果需要使用baoleiji账号登陆,需要在对方机器创建baoleiji这个用户
四、搭建简易堡垒机 – 日志审计
以下操作是需要在所有被登录机器上做的:
mkdir /usr/local/records chmod 777 /usr/local/records/ chmod +t /usr/local/records/ t权限,防删除
vim /etc/profile //添加
if [ ! -d /usr/local/records/${LOGNAME} ] #LOGNAME指的是登陆的用户名是哪个 then mkdir -p /usr/local/records/${LOGNAME} #创建这个用户的目录 chmod 300 /usr/local/records/${LOGNAME} #给这个用户300权限,只能执行和写 fi export HISTORY_FILE="/usr/local/records/${LOGNAME}/bash_history" #指定记录历史记录的文件 export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE' #执行的最后一条命令记录进去
重新登陆客户端
创建用户,通过跳板机登陆,做一些操作
回到002机器上,可以看到生成了zhangsan目录,和操作的记录
五、开源堡垒机jumpserver介绍
官网www.jumpserver.org Jumpserver是一款使用Python, Django开发的开源跳板机系统, 助力互联网企业高效 用户、资产、权限、审计 管理 Auth 统一认证 CMDB 资产管理 统一授权 日志审计 自动化运维(ansible)
六、安装jumpserver
具体安装步骤参考:https://blog.51cto.com/roben/2159929 和官方文档https://docs.jumpserver.org/zh/docs/step_by_step.html,两个文档可以互相参考,官方文档有的步骤没有,需要参考第一个链接
以下是文档中操作需要注意的地方: 注意链接中的配置文件名称和官方文档的配置文件名称不同,不能直接使用
防火墙:selinux 关闭:setenforce 0systemctl stop firewalld.service
运行Jumpserver
cd /opt/jumpserver ./jms start all -d # 后台运行使用 -d
运行coco:
cd /opt/coco ./cocod start -d # 后台运行使用 -d
vim config.yml 修改配置文件,SECRET_KEY可以使用文件中的命令生成,并修改数据库配置信息7js5bFUI3l3Ad7EDji0VEcdoMRpm13tCrygy4PBQDvDej5j1U
cd /opt/jumpserver/ ./jms start all -d 在后台运行,浏览器访问IP地址:8080 默认账号:admin 密码:admin下面代表运行成功,浏览器正常访问,线上环境需要把8080端口加入到白名单
vim /etc/rc.local 加入如下内容
source /opt/py3/bin/activate ; cd /opt/jumpserver; ./jms start all -d &>/dev/null 重启时 jumpserver自动启动
部署coco时,使用官方文档中的:正常部署 coco 组件
修改coco配置文件
cd /opt/coco cp config_example.yml config.yml vim config.yml
BOOTSTRAP_TOKEN 需要从 jumpserver/config.yml 里面获取, 保证一致
配置完成后,启动coco:./cocod start -d -d在后台运行
启动成功后,在页面上选择:会话管理->终端管理 可以看到
启动成功可以看到5000端口和2222端口
如果报如下错误,说明第一次启动时已经注册了,下次就不能再用这个名字,重启可以解决,或者在官方配置文件中使用官方文档中的:正常部署 coco 组件
测试:
本机访问: ssh -p2222 admin@localhost 密码是admin
配置Nginx整合各组件
使用Nginx做反向代理:
vim nginx.conf 把include下的内容全删除,留一个 } 然后到conf.d目录下,创建一个jumpserver.conf vim /etc/nginx/conf.d/jumpserver.conf 内容如下,也可以复制官方文档上的server {listen 80;client_max_body_size 100m; # 录像及文件上传大小限制location /luna/ {try_files $uri / /index.html;alias /opt/luna/; # luna 路径, 如果修改安装目录, 此处需要修改}location /media/ {add_header Content-Encoding gzip;root /opt/jumpserver/data/; # 录像位置, 如果修改安装目录, 此处需要修改}location /static/ {root /opt/jumpserver/data/; # 静态资源, 如果修改安装目录, 此处需要修改}location /socket.io/ {proxy_pass http://localhost:5000/socket.io/;proxy_buffering off;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;access_log off;}location /coco/ {proxy_pass http://localhost:5000/coco/;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;access_log off;}location /guacamole/ {proxy_pass http://localhost:8081/;proxy_buffering off;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $http_connection;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;access_log off;}location / {proxy_pass http://localhost:8080;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;} }
检查语法并加载
nginx -t nginx -s reload
启动nginx,并开机启动
systemctl start nginx systemctl enable nginx
此时可以在浏览器使用80端口访问
服务全部启动后, 访问 jumpserver 服务器 nginx 代理的 80 端口, 不要通过8080端口访问
七、Jumpserver使用
使用xshell连接
端口2222
使用密钥登陆:
在个人信息中选择更改SSH密钥:
使用putty或者xshell生成密钥,并存放到authorized_keys,把公钥复制到页面上
在页面个人信息中选择更改SSh密钥,把公钥复制进来
提交后,使用admin用户登录,使用2222端口
八、Jumpserver里面的用户管理
jumpserver用户用来登录jumpserver(web界面、ssh登录)管理用户用来自动创建客户机上的系统用户、批量执行命令等操作客户机上的系统用户,用来通过jumpserver去登录每一台客户机的用户,最好和用户管理->用户列表中的一致
管理用户使用ssh私钥:
在192.168.183.133上手动生成: ssh-keygen -f jumpserver -f指定秘钥的名字然后把jumpserver(私钥)可以使用xshell中的sz下载到本机,然后把文件放到页面中去
九、资产管理
创建新的资产,选择管理用户,管理用户需要到192.168.183.3这台机器上去创建,这个管理用户的意义个人理解就是访问服务器的账号
因为创建管理用户时设置了私钥,所以需要在此处增加公钥,通过秘钥去连接jumpserver用户
步骤:
su - jumpserver mkdir .ssh chmod 700 .ssh cd .ssh 创建公钥 vim authorized_keys ,把生成的公钥放到此文件中 chmod 600 .ssh/authorized_keys 退出jumpserver用户,回到root下:visudo进行设置 测试连接: ssh -i jump user1@127.0.0.1 不提示输入密码即成功
在192.168.183.3上切换到jumpserver用户 : su - jumpserver把刚刚在192.168.183.133机器上手动生成的公钥复制过来: (sudo) vi .ssh/authorized_keys
ssh -i jumpserver jumpserver@192.168.183.3 -i指定私钥,与183.3机器的公钥匹配即可,无需输入密码,上方提示输入密码说明配置有问题
如果需要输入密码,要查看对应用户的目录下/home/user1/.ssh/authorized_keys 该文件是否有足够的权限,还有生成的密钥对的权限 chmod 600 jump jump是私钥
管理用户要有root的权限
使用root用户,在192.168.183.3机器上修改: visudo 给予用户sudo权限
jumpserver ALL=(ALL) NOPASSWD: ALL
登陆jumpserver用户
使用sudo命令
使用秘钥配对成功连接后,回到页面,更新硬件信息,会把连接的主机配置信息更新出来,任务进程可以在作业中心中查看
系统用户需要下发到资产列表中的主机里:
在权限管理->资产授权中添加规则
资产管理 -> 系统用户详情:
自动推送需要打开,此时会在授权规则的机器中自动推送此用户登录模式选自动登录
创建资产授权前没有此用户,创建完成后,用户已下发
此时登陆这个用户,输入对应主机的id进行连接,此处是通过密码登陆的,如果修改了密码,会导致无法自动登录