堡垒机介绍,搭建简易的堡垒机,安装jailkit实现chroot,日志审计

堡垒机介绍

什么是堡垒机

堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的***和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责。

其从功能上讲,它综合了核心系统运维和安全审计管控两大主干功能,从技术实现上讲,通过切断终端计算机对网络和服务器资源的直接访问,而采用协议代理的方式,接管了终端计算机对网络和服务器的访问。形象地说,终端计算机对目标的访问,均需要经过运维安全审计的翻译。打一个比方,运维安全审计扮演着看门者的工作,所有对网络设备和服务器的请求都要从这扇大门经过。因此运维安全审计能够拦截非法访问,和恶意***,对不合法命令进行命令阻断,过滤掉所有对目标设备的非法访问行为,并对内部人员误操作和非法操作进行审计监控,以便事后责任追踪。

我们也把堡垒机称为跳板机,简易的跳板机功能简单,核心功能是远程登录服务器和日志审计,但堡垒机还有资产管理(CMDB)、监控及用户权限等功能。目前比较优秀的开源软件有Jumpserver、Teleport、GateOne、CrazyEye等;商业的堡垒机功能更为强大,有齐治、Citrix XenApp等。

搭建简易的堡垒机

接下来我们尝试搭建一个简易的堡垒机,主要功能是登录内网的服务器和日志审计。

搭建堡垒机的条件是,该机器有公网ip和内网ip,其中内网和其他机器互通。

设计堡垒机的思路:

对该机器做安全限制:端口限制、登录限制(SSH)、用户和命令限制;

客户机日志审计。

下载安装jailkit实现chroot:

Jailkit下载地址:https://olivier.sessink.nl/jailkit/

扫描二维码关注公众号,回复: 12556332 查看本文章

[root@jinkai02 ~]# cd /usr/local/src/

[root@jinkai02 src]# wget https://olivier.sessink.nl/jailkit/jailkit-2.21.tar.bz2

[root@jinkai02 src]# yum install -y bzip2

[root@jinkai02 src]# tar jvxf jailkit-2.21.tar.bz2

[root@jinkai02 src]# cd jailkit-2.21

[root@jinkai02 jailkit-2.21]# ./configure

[root@jinkai02 jailkit-2.21]# make && make install

创建虚拟系统根目录

[root@jinkai02 jailkit-2.21]# mkdir /home/jail

shell相关命令、库文件

[root@jinkai02 jail]#jk_init -v -j /home/jail/ basicshel

vi及vim等编辑器

[root@jinkai02 jail]#jk_init -v -j /home/jail/ editors

网络相关

[root@jinkai02 jail]#jk_init -v -j /home/jail/ netutils

SSH登录相关,这几步是将常用命令复制到 /home/jail 中

[root@jinkai02 jail]#jk_init -v -j /home/jail/ ssh

添加测试用户:

[root@jinkai02 jail]# mkdir /home/jail/usr/sbin

[root@jinkai02 jail]# cp /usr/sbin/jk_lsh /home/jail/usr/sbin/jk_lsh //拷贝虚拟系统shell

[root@jinkai02 jail]# useradd zhangsan

[root@jinkai02 jail]# passwd zhangsan

更改用户 zhangsan 的密码 。

新的 密码:

无效的密码: 密码未通过字典检查 - 它基于字典单词

重新输入新的 密码:

passwd:所有的身份验证令牌已经成功更新。

[root@jinkai02 jail]# jk_jailuser -m -j /home/jail zhangsan

//创建虚拟系统中用户

[root@jinkai02 jail]# cat etc/passwd

root:x:0:0:root:/root:/bin/bash

zhangsan:x:1000:1000::/home/zhangsan:/usr/sbin/jk_lsh

把zhangsan那一行的/usr/sbin/jk_lsh改为/bin/bash才能登录该虚拟系统用户

[root@jinkai02 jail]# vim etc/passwd

使用xshell登录该虚拟用户:

img

img

WARNING! The remote SSH server rejected X11 forwarding request.

Last login: Sat Dec 26 16:56:49 2020 from 192.168.111.1

bash: /usr/bin/id: No such file or directory

bash: /usr/bin/id: No such file or directory

[zhangsan@jinkai02 ~]$

成功登录后,我们查看一下

[zhangsan@jinkai02 ~]$ ll /

bash: ll: command not found

[zhangsan@jinkai02 ~]$ ls -l /

total 0

lrwxrwxrwx. 1 root root 7 Dec 26 08:43 bin -> usr/bin

drwxr-xr-x. 2 root root 44 Dec 26 08:43 dev

drwxr-xr-x. 2 root root 240 Dec 26 08:50 etc

drwxr-xr-x. 3 root root 22 Dec 26 08:46 home

lrwxrwxrwx. 1 root root 9 Dec 26 08:43 lib64 -> usr/lib64

drwxr-xr-x. 7 root root 70 Dec 26 08:45 usr

[zhangsan@jinkai02 ~]$ 按两下tab键

Display all 116 possibilities? (y or n)

! cd do fgrep let readarray ssh unalias

./ chmod done fi ln readonly suspend unset

: command echo for local return sync until

[ compgen egrep function logout rm tar vi

[[ complete elif getopts ls rmdir test vim

]] compopt else grep mapfile rsync then wait

alias continue enable gunzip mkdir scp time wget

bash coproc esac gzip mktemp sed times while

bg cp eval hash more select touch zcat

bind cpio exec help mv set trap {

break date exit history popd sh true }

builtin dd export if printf shift type

caller declare false in pushd shopt typeset

case dirs fc jobs pwd sleep ulimit

cat disown fg kill read source umask

这些就是该虚拟用户所能执行的命令

限定SSH登录:

vim /etc/ssh/sshd_config

PasswordAuthentication no yes改成no,不允许密码登录

添加防火墙规则:

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

限定登录ip:

vim /etc/hosts.allow

sshd: 192.168.111.0/24 1.1.1.1 2.2.2.2

vim /etc/hosts.deny

sshd: ALL

上面允许的可以登录,其他所有均不允许登录

接下来还要做日志审计功能,这一步需要我们在所有被登陆的机器上操作。

这里我让jinkai02作为跳板机,jinkai01作为客户机,在jinkai01上操作。

[root@jinkai01 ~]#vim /etc/hosts.allow

sshd:192.168.100.137

[root@jinkai01 ~]#vim /etc/hosts.deny

sshd:ALL

这个时候用xshell重新打开一个jinkai01的窗口,发现已经无法登陆

[root@jinkai01 ~]# mkdir /usr/local/records

[root@jinkai01 ~]# chmod 777 !$

chmod 777 /usr/local/records

[root@jinkai01 ~]# chmod +t !$

chmod +t /usr/local/records

[root@jinkai01 ~]# vim /etc/profile

添加下面内容

if [ ! -d /usr/local/records/${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' #具体记录命令历史的格式

再用xshell连接一下这台机器,上面已经限制无法登陆,可以用跳板机SSH远程登录

[root@jinkai02 jail]# ssh 192.168.111.136

[email protected]'s password:

Last login: Sat Dec 26 17:27:45 2020 from 192.168.111.137

[root@jinkai01 ~]# ls /usr/local/records/

root //已经产生root登录用户的文件夹

[root@jinkai01 ~]# ls /usr/local/records/root/

bash_history

[root@jinkai01 ~]# cat /usr/local/records/root/bash_history

2020-12-26 22:18:34 ##### root pts/1 (192.168.111.137) #### ls /usr/local/records/

2020-12-26 22:18:47 ##### root pts/1 (192.168.111.137) #### ls /usr/local/records/root/

远程的一切操作都会被记录到文件里面

2020-12-26 22:20:32 ##### root pts/1 (192.168.111.137) #### w

2020-12-26 22:22:57 ##### root pts/1 (192.168.111.137) #### ls

2020-12-26 22:23:04 ##### root pts/1 (192.168.111.137) #### cat /etc/passwd

在jinkai01上创建一个普通用户

[root@jinkai01 ~]# useradd admin

[root@jinkai01 ~]# passwd admin

更改用户 admin 的密码 。

新的 密码:

无效的密码: 密码包含用户名在某些地方

重新输入新的 密码:

passwd:所有的身份验证令牌已经成功更新。

[root@jinkai01 ~]#

在跳板机jinkai02上用admin身份登录

[root@jinkai02 jail]# ssh [email protected]

[email protected]'s password:

[admin@jinkai01 ~]$ ls

[admin@jinkai01 ~]$ w

22:26:19 up 5:20, 2 users, load average: 0.00, 0.01, 0.05

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root pts/0 192.168.111.1 17:07 1:39 0.06s 0.04s bash

admin pts/1 192.168.111.137 22:26 3.00s 0.00s 0.00s w

[admin@jinkai01 ~]$ ls -l /usr/local/records/admin/

ls: 无法打开目录/usr/local/records/admin/: 权限不够

上面设置了文件的300权限,文件无法读取

重新回到jinkai01上查看历史记录

[root@jinkai01 ~]# cat /usr/local/records/admin/bash_history

2020-12-26 22:26:06 ##### admin pts/1 (192.168.111.137) ####

2020-12-26 22:26:17 ##### admin pts/1 (192.168.111.137) #### ls

2020-12-26 22:26:19 ##### admin pts/1 (192.168.111.137) #### w

2020-12-26 22:27:17 ##### admin pts/1 (192.168.111.137) #### ls -l /usr/local/records/admin/

2020-12-26 22:29:30 ##### admin pts/1 (192.168.111.137) #### cat /usr/local/records/admin/

这里就简单是实现了堡垒机的功能,但是这种方法是不完美的,也是可以破解的。我们想要实现比较完善的堡垒机功能,还是需要借助一些专门的工具或软件。

猜你喜欢

转载自blog.51cto.com/11451960/2640823