本文共 5345 字,大约阅读时间需要 17 分钟。
堡垒机,是在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责。
我们又把堡垒机叫做跳板机,简易的跳板机功能简单,主要核心功能是远程登录服务器和日志审计。运维堡垒机的理念起源于跳板机。2000年左右,高端行业用户为了对运维人员的远程登录进行集中管理,会在机房里部署跳板机。跳板机就是一台服务器,维护人员在维护过程中,首先要统一登录到这台服务器上,然后从这台服务器再登录到目标设备进行维护。
堡垒机从功能上讲,它综合了核心系统运维和安全审计管控两大主干功能,从技术实现上讲,通过切断终端计算机对网络和服务器资源的直接访问,而采用协议代理的方式,接管了终端计算机对网络和服务器的访问。形象地说,终端计算机对目标的访问,均需要经过运维安全审计的翻译。打一个比方,运维安全审计扮演着看门者的工作,所有对网络设备和服务器的请求都要从这扇大门经过。因此运维安全审计能够拦截非法访问,和恶意攻击,对不合法命令进行命令阻断,过滤掉所有对目标设备的非法访问行为,并对内部人员误操作和非法操作进行审计监控,以便事后责任追踪。
安全审计作为企业信息安全建设不可缺少的组成部分,逐渐受到用户的关注,是企业安全体系中的重要环节。同时,安全审计是事前预防、事中预警的有效风险控制手段,也是事后追溯的可靠证据来源。
近年来数据安全事故频发,包括斯诺登事件、希拉里邮件丑闻以及携程宕机事件等,数据安全与防止泄露成为政府和企业都非常关心的议题,因此云堡垒机也应运而生。
案例一:
让我们共同回顾最具代表性的数据泄露引发的安全事故,美国著名的斯诺登事件。2013年6月,美国《华盛顿邮报》报道,美国国家安全局和联邦调查局于2007年启动了一个代号为“棱镜”的秘密监控项目,直接进入美国网际网路公司的中心服务器里挖掘数据、收集情报。洩露这些绝密文件的并非国家安全局的内部员工,而是国家安全局的外聘人员爱德华·斯诺登。
斯诺登事件若放在今天,将不可能发生,因为我们有了云堡垒机!其中的管理员角色可以设置敏感操作的事前拦截、事中断开、事后审计,并且可以做到全程无代理实时监控。类似斯诺登这样的外聘人员将无法接触到这些敏感信息,更不用说泄露出来了。并且某些云堡垒机支持录屏功能也可以帮助用户进行审计和追责。
案例二:
2015年5月28日上午11点至晚上8点,在某旅游出行平台官网及APP上登录、下单或交易时,跳转均出现问题,导致操作无法顺利完成。造成直接经济损失巨大,按照其上一季度的财报公布的数据,宕机的损失为平均每小时106.48万美元。
最终,平台回应此事称系由于员工误操作删除了服务器上的执行代码导致。不论是因为黑客攻击还是员工误操作,真金白银800万美元的经验教训告诫我们对于数据的安全和备份必须要引起重视!云堡垒机能解决这2个问题,一是攻击面小,二是可定制双机备份。
以上事实说明,云堡垒机对安全的重要程度不言而喻。
比较优秀的用于搭建堡垒机的开源软件:jumpserver。主要功能有:认证、授权、审计、自动化、资产管理等。
商业堡垒机的功能比开源的要强大,比较出名的有:齐治,Citrix XenApp等。
堡垒机需要具有公网IP以及内网IP,其中内网IP用于和机房其他机器通信。公网IP是用于在外部登录,通过公网IP登录到堡垒机后,才能访问内网的机器,这一点和跳板机一样。
搭建堡垒机,首先需要限制端口,留出可以远程登录的端口,其他的端口都封闭掉。然后还需要配置白名单IP,规定只有哪些IP可以登录,以及禁止密码登录,只允许密钥登录等,做这些事情的目的是为了增加堡垒机的安全性。
除此之外,还需要限制登录的用户,限制为普通用户登录,和限制用户可以执行的命令等。
还需要在客户机器上做日志审计。
安装jailkit实现chroot的目的是为了限制登录的用户能够执行的命令,因为要防止登录的用户对堡垒机进行其他的操作。jailkit可以把用户限制在一个虚拟的系统中,这个虚拟系统的环境是chroot的,让用户无法直接操作真实系统。
编译安装jailkit:
[root@localhost ~]# cd /usr/local/src/[root@localhost /usr/local/src]# wget https://olivier.sessink.nl/jailkit/jailkit-2.19.tar.bz2[root@localhost /usr/local/src]# tar jxvf jailkit-2.19.tar.bz2[root@localhost /usr/local/src]# cd jailkit-2.19[root@localhost /usr/local/src/jailkit-2.19]# ./configure && make && make install[root@localhost /usr/local/src/jailkit-2.19]# echo $?0[root@localhost /usr/local/src/jailkit-2.19]#
创建一个目录作为虚拟系统的根目录:
[root@localhost ~]# mkdir /home/jail
给虚拟系统初始化一些命令,让这个系统具有基本的文件结构、网络相关的以及常用命令等:
[root@localhost ~]# jk_init -v -j /home/jail/ basicshell[root@localhost ~]# jk_init -v -j /home/jail/ editors[root@localhost ~]# jk_init -v -j /home/jail/ netutils[root@localhost ~]# jk_init -v -j /home/jail/ ssh
初始化完成后/home/jail/下会生成以下几个目录:
[root@localhost ~]# ls /home/jail/bin dev etc home lib64 usr[root@localhost ~]#
创建真实系统的用户:
[root@localhost ~]# useradd jailUser[root@localhost ~]# passwd jailUser更改用户 jailUser 的密码 。新的 密码:重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。[root@localhost ~]#
创建虚拟系统的sbin目录,并拷贝虚拟系统的shell文件:
[root@localhost ~]# mkdir /home/jail/usr/sbin[root@localhost ~]# cp /usr/sbin/jk_lsh /home/jail/usr/sbin/jk_lsh
创建虚拟系统的用户:
[root@localhost ~]# jk_jailuser -m -j /home/jail jailUser
编辑虚拟系统用户的密码文件内容如下:
[root@localhost ~]# vim /home/jail/etc/passwdroot:x:0:0:root:/root:/bin/bashjailUser:x:1011:1011::/home/jailUser:/bin/bash # 改成/bin/bash后才能被远程登录
完成以上操作后,远程登录一下jailUser这个账户:
登录成功:
如图可以看到,这个系统可以执行的命令只有118条。
能够成功登录后就可以生成密钥,添加密钥认证了,配置完密钥后,还需要在真实系统上编辑sshd_config文件把PasswordAuthentication的值改为no,这样就能禁止远程密码登录了。
真实系统上,还需要开启防火墙规则,除了远程登录端口外其他端口都需要封闭掉,这个很简单这里就不演示了。除此之外还需要配置白名单IP,这个在hosts.allow文件里配置,hosts.deny里也需要进行相应的配置,如下示例:
[root@localhost ~]# vim /etc/hosts.allowsshd: 192.168.77.0/24 1.1.1.1 2.2.2.2 # 白名单ip配置在这里[root@localhost ~]# vim /etc/hosts.denysshd: ALL # 设置除了白名单ip外的ip都拒绝连接
我们还需要在客户机上做一个简单的日志审计,记录在该机器执行过的命令,以下操作是需要在所有被登录机器上做的:
1.首先配置hosts.allow以及hosts.deny文件,设置仅允许堡垒机的IP登录,其他的一律拒绝登录:[root@localhost ~]# vim /etc/hosts.allowsshd: 192.168.77.130 # 堡垒机的IP[root@localhost ~]# vim /etc/hosts.denysshd: ALL # 拒绝堡垒机以外的IP登录
然后在堡垒机上看看能否进行登录:
如图,能够成功登录,代表没问题。
2.配置日志审计:
[root@localhost ~]# mkdir /usr/local/records # 创建日志文件存放的目录[root@localhost ~]# chmod 777 !$chmod 777 /usr/local/records[root@localhost ~]# chmod +t !$chmod +t /usr/local/records[root@localhost ~]# vim /etc/profile # 文件末尾增加以下内容if [ ! -d /usr/local/records/${LOGNAME} ]then mkdir -p /usr/local/records/${LOGNAME} chmod 300 /usr/local/records/${LOGNAME}fiexport 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'[root@localhost ~]# source /etc/profile # 让profile的配置生效
配置完成后,查看是否有生成相应的记录文件:
[root@localhost ~]# ls /usr/local/records/root[root@localhost ~]# ls /usr/local/records/root/bash_history[root@localhost ~]# cat /usr/local/records/root/bash_history 2018-01-18 21:09:56 ##### root pts/0 (192.168.77.1) #### source /etc/profile2018-01-18 21:10:41 ##### root pts/0 (192.168.77.1) #### ls /usr/local/records/2018-01-18 21:10:44 ##### root pts/0 (192.168.77.1) #### ls /usr/local/records/root/2018-01-18 21:10:46 ##### root pts/0 (192.168.77.1) #### ls /usr/local/records/root/[root@localhost ~]#
如上,可以看到,生成的bash_history 文件中已经记录了我刚刚敲过的命令,这样就能够记录哪个用户在哪个时间点上在这台机器上敲过的命令。
到此,一个简易的堡垒机就搭建完成了,也算不上真正意义的堡垒机吧,只能算是个跳板机。因为我们还没有使用专业的工具去搭建,所以还不太符合堡垒机的概念,但是如果机器不是那么多,只有几台,而且要求也没那么高的话,这种跳板机也就够用了。
本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/2062618,如需转载请自行联系原作者