linux 学习笔记-090-堡垒机-堡垒机介绍,搭建简易堡垒机,jailkit 实现 chroot,日志审计

发布于 2018-05-21  271 次阅读


什么是堡垒机

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

我们又把堡垒机叫做跳板机,简易的跳板机功能简单,主要核心功能是远程登录服务器和日志审计。

比较优秀的开源软件 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

Jailkit 实际上是在指定的目录(下文称“监狱”)中,组建了一个小型的、完备的 linux 环境,涵盖了 linux 运行所最基础的文件(不包括引导和启动),用户登陆时,使用 chroot 将根目录设置成“监狱”目录,从而隔离与主机的联系,所做的操作都是在“监狱”中进行。当然,登陆的用户不可以拥有 root 权限

[root@am-01:~#] cd /usr/local/src/

[root@am-01:/usr/local/src#] wget https://olivier.sessink.nl/jailkit/jailkit-2.19.tar.bz2

--2018-05-21 18:54:01--  https://olivier.sessink.nl/jailkit/jailkit-2.19.tar.bz2

正在解析主机 olivier.sessink.nl (olivier.sessink.nl)... 95.97.76.243

正在连接 olivier.sessink.nl (olivier.sessink.nl)|95.97.76.243|:443... 已连接。

已发出 HTTP 请求,正在等待回应... 200 OK

长度:116665 (114K) [application/x-bzip2]

正在保存至: “jailkit-2.19.tar.bz2”



100%[===================================================================================>] 116,665      186KB/s 用时 0.6s  



2018-05-21 18:54:16 (186 KB/s) - 已保存 “jailkit-2.19.tar.bz2” [116665/116665])



[root@am-01:/usr/local/src#] tar xvf jailkit-2.19.tar.bz2

[root@am-01:/usr/local/src#] cd jailkit-2.19/

[root@am-01:/usr/local/src/jailkit-2.19#] ./configure

[root@am-01:/usr/local/src/jailkit-2.19#] make

[root@am-01:/usr/local/src/jailkit-2.19#] make install

#下载并安装 jailkit
[root@am-01:/usr/local/src/jailkit-2.19#] mkdir /home/jail

#创建虚拟系统根目录

[root@am-01:/usr/local/src/jailkit-2.19#] jk_init -v -j /home/jail/ basicshell

#把跟 shell 相关的命令信息复制到虚拟系统中

[root@am-01:/usr/local/src/jailkit-2.19#] jk_init -v -j /home/jail/ editors

#把跟编辑器相关的命令信息复制到虚拟系统中

[root@am-01:/usr/local/src/jailkit-2.19#] jk_init -v -j /home/jail/ netutils

#把跟网络相关的命令信息复制到虚拟系统中

[root@am-01:/usr/local/src/jailkit-2.19#] jk_init -v -j /home/jail/ ssh

#把跟 ssh 相关的命令信息复制到虚拟系统中
[root@am-01:/usr/local/src/jailkit-2.19#] useradd am

[root@am-01:/usr/local/src/jailkit-2.19#] passwd am

更改用户 am 的密码 。

新的 密码:

重新输入新的 密码:

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

#创建一个本地系统的账户
[root@am-01:/usr/local/src/jailkit-2.19#] mkdir /home/jail/usr/sbin

[root@am-01:/usr/local/src/jailkit-2.19#] cp /usr/sbin/jk_lsh /home/jail/usr/sbin/jk_lsh

[root@am-01:/usr/local/src/jailkit-2.19#] jk_jailuser -m -j /home/jail am

#把虚拟系统的 shell 弄到虚拟系统的/home/jail/usr/sbin 目录下

#最后创建一个虚拟系统的账户
[root@am-01:/usr/local/src/jailkit-2.19#] cd /home/jail/

[root@am-01:/home/jail#] ls

bin  dev  etc  home  lib64  usr

#可以见到,这个虚拟系统的目录架构跟本地系统是差不多的
[root@am-01:/home/jail#] cat etc/passwd

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

am:x:1031:1031::/home/am:/usr/sbin/jk_lsh

[root@am-01:/home/jail#] vim etc/passwd

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

am:x:1031:1031::/home/am:/bin/bash

#因为虚拟系统的 shell(/usr/sbin/jk_lsh)是不能正常使用的,所以得改为/bin/bash

在 Xshell 中测试虚拟用户

linux 学习笔记-090-堡垒机-堡垒机介绍,搭建简易堡垒机,jailkit 实现 chroot,日志审计

linux 学习笔记-090-堡垒机-堡垒机介绍,搭建简易堡垒机,jailkit 实现 chroot,日志审计

linux 学习笔记-090-堡垒机-堡垒机介绍,搭建简易堡垒机,jailkit 实现 chroot,日志审计

linux 学习笔记-090-堡垒机-堡垒机介绍,搭建简易堡垒机,jailkit 实现 chroot,日志审计

[am@am-01 ~]$ ls -l /

total 4

lrwxrwxrwx 1 root root    7 May 21 10:58 bin -> usr/bin

drwxr-xr-x 2 root root   41 May 21 10:59 dev

drwxr-xr-x 2 root root 4096 May 21 11:12 etc

drwxr-xr-x 3 root root   15 May 21 11:06 home

lrwxrwxrwx 1 root root    9 May 21 10:58 lib64 -> usr/lib64

drwxr-xr-x 7 root root   65 May 21 11:04 usr

[am@am-01 ~]$

Display all 117 possibilities? (y or n)

!          builtin    coproc     egrep      fg         history    mapfile    readonly   shopt      touch      vim

./         caller     cp         elif       fgrep      host       mkdir      return     sleep      trap       wait

:          case       cpio       else       fi         if         mktemp     rm         source     true       wget

[          cat        date       enable     for        in         more       rmdir      ssh        type       while

[[         cd         dd         esac       function   jobs       mv         rsync      suspend    typeset    zcat

]]         chmod      declare    eval       getopts    kill       popd       scp        sync       ulimit     {

alias      command    dirs       exec       grep       let        printf     sed        tar        umask      }

bash       compgen    disown     exit       gunzip     ln         pushd      select     test       unalias   

bg         complete   do         export     gzip       local      pwd        set        then       unset     

bind       compopt    done       false      hash       logout     read       sh         time       until     

break      continue   echo       fc         help       ls         readarray  shift      times      vi    

#可以见到虚拟系统用户 am 只有 117 个可用的命令

如果需要多个虚拟用户,依次运行以下命令则可

useradd am

passwd am

jk_jailuser -m -j /home/jail am

vim etc/passwd

am:x:1031:1031::/home/am:/bin/bash

为提高安全性,还建议修改以下设置

原系统:

设置关闭 ssh 密码登录

vim /etc/ssh/sshd_config

PasswordAuthentication no

设置 iptables,把不需要的端口都限制

设置允许登录的源 IP 和不能登录的源 IP

vim /etc/hosts.allow

sshd:X.X.X.X/24 X.X.X.X

vim /etc/hosts.deny

sshd:ALL

虚拟系统:

设置以密钥登陆虚拟系统

vim .ssh/authorized_keys

XXXXXXX

日志审计

在客户机上做操作,即是需要跳板机去登陆的机器

[root@am-02:~#] vim /etc/hosts.allow

sshd:172.17.1.240

[root@am-02:~#] vim /etc/hosts.deny

sshd:ALL

#客户机设置只允许跳板机 172.17.1.240 登陆

测试一下客户机,看还能不能登陆,可以见到,已经不能直接登陆了

linux 学习笔记-090-堡垒机-堡垒机介绍,搭建简易堡垒机,jailkit 实现 chroot,日志审计

[am@am-01 ~]$ ssh root@172.17.1.242

The authenticity of host '172.17.1.242 (172.17.1.242)' can't be established.

ECDSA key fingerprint is 7b:ec:d2:f6:f1:9f:f6:78:e1:4c:42:2f:cb:1b:37:dc.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '172.17.1.242' (ECDSA) to the list of known hosts.

root@172.17.1.242's password:

Last login: Mon May 21 23:54:40 2018 from 172.17.1.1

[root@am-02:~#]

#使用跳板机远程登录客户机,发现是可以登录的
[root@am-02:~#] mkdir /usr/local/records

[root@am-02:~#] chmod 777 /usr/local/records/

[root@am-02:~#] chmod +t /usr/local/records

[root@am-02:~#] vim /etc/profile

if [ ! -d  /usr/local/records/${LOGNAME} ]

then

    mkdir -p /usr/local/records/${LOGNAME}

    chmod 300 /usr/local/records/${LOGNAME}

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'

#做命令审计

测试命令审计

先退出登陆客户机,再重新登陆客户机才能看到命令审计的记录,需要知道的是,必须要是正常退出才会记录命令历史

[root@am-02:~#] ls /usr/local/records/

root

[root@am-02:~#] cd /usr/local/records/root/

[root@am-02:/usr/local/records/root#] ls

bash_history

[root@am-02:/usr/local/records/root#] cat bash_history

2018-05-22 00:04:58 ##### root pts/0 (172.17.1.240) #### 2018/05/22 00:04:53 exit

2018-05-22 00:05:36 ##### root pts/0 (172.17.1.240) #### 2018/05/22 00:05:36 ls /usr/local/records/

2018-05-22 00:05:54 ##### root pts/0 (172.17.1.240) #### 2018/05/22 00:05:54 cd /usr/local/records/root/

2018-05-22 00:05:55 ##### root pts/0 (172.17.1.240) #### 2018/05/22 00:05:55 ls

#可以见到,命令审计已经做好了

再次测试命令审计,这次用跳板机测试

[root@am-02:~#] useradd am

[root@am-02:~#] passwd am

更改用户 am 的密码 。

新的 密码:

重新输入新的 密码:

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

#客户机新建一个普通用户 am
[am@am-01 ~]$ ssh am@172.17.1.242

am@172.17.1.242's password:

[am@am-02:~$] ls

[am@am-02:~$] ll

总用量 0

[am@am-02:~$] cd /etc/

[am@am-02:/etc$] cd

[am@am-02:~$] df -h

文件系统        容量  已用  可用 已用% 挂载点

/dev/sda3        28G  6.8G   22G   25% /

devtmpfs        481M     0  481M    0% /dev

tmpfs           490M     0  490M    0% /dev/shm

tmpfs           490M   32M  459M    7% /run

tmpfs           490M     0  490M    0% /sys/fs/cgroup

/dev/sda1       197M  100M   98M   51% /boot

tmpfs            98M     0   98M    0% /run/user/0

tmpfs            98M     0   98M    0% /run/user/1011

#使用跳板机登陆客户机,并做一些操作
[root@am-02:~#] cd /usr/local/records/am

[root@am-02:/usr/local/records/am#] ls

bash_history

[root@am-02:/usr/local/records/am#] cat bash_history

2018-05-22 00:10:49 ##### am pts/0 (172.17.1.240) ####

2018-05-22 00:11:23 ##### am pts/0 (172.17.1.240) #### 2018/05/22 00:11:23 ls

2018-05-22 00:11:24 ##### am pts/0 (172.17.1.240) #### 2018/05/22 00:11:24 ll

2018-05-22 00:11:28 ##### am pts/0 (172.17.1.240) #### 2018/05/22 00:11:28 cd /etc/

2018-05-22 00:11:29 ##### am pts/0 (172.17.1.240) #### 2018/05/22 00:11:29 cd

2018-05-22 00:11:32 ##### am pts/0 (172.17.1.240) #### 2018/05/22 00:11:32 df -h

2018-05-22 00:11:34 ##### am pts/0 (172.17.1.240) #### 2018/05/22 00:11:34 cd

#登陆客户机,查询命令审计记录,可以见到 am 用户的历史命令已经做了记录