Jumpserver版本: 1.5.0-2

最近发现jumpserver跳板机登陆日志中出现了很多127.0.0.1的登陆,而且UA还是python-requests/2,首先看到这个日志总感觉服务器中毒了,但是经过查看和检查发现服务器并没有被黑的痕迹,在网上搜索也是一无所获。

可以看到登陆是通过web请求过来的,但是通过检查nginx日志并没有发现有异常请求登陆接口的,通过调试django debug日志发现请求都是通过api/users/v1/auth接口过来的。

调用这个接口的正是coco组件,coco组件会开放一个2222端口,通过2222端口可以使用ssh的方式登陆跳板机,如果用户名和密码是错误的那么就会出现如下报错:

Password and public key auth <%s> failed, reject it
coco认证是通过调用jumpserver api的方式实现的,可以在coco interface.py源码中看到具体的实现方式。
可以通过添加客户端Ip打印的方式记录访问者ip,然后可以对异常ip进行封禁
    def check_auth_password(self, username, password):

        user = self.validate_auth(username, password=password)

        if not user:

            logger.warning('连接IP:%s' % self.connection.addr[0])

            logger.warning("Password and public key auth <%s> failed, reject it" % username)

            return paramiko.AUTH_FAILED

        else:

            logger.info("Password auth <%s> success" % username)

            if self.otp_auth:

                return paramiko.AUTH_PARTIALLY_SUCCESSFUL

            return paramiko.AUTH_SUCCESSFUL

在函数check_auth_password中加入日志打印

logger.warning('连接IP:%s' % self.connection.addr[0])

这样就可以记录异常连接的IP

可以通过配置coco黑名单阻止日常的黑产扫描

更改文件 coco/config.yml配置BLOCK_SSH_USER变量

# SSH黑名单, 如果用户同时在白名单和黑名单,黑名单优先生效
BLOCK_SSH_USER: ['root','nagios','admin','postgres','ubuntu','test','test','support','Administrator','zabbix']

通过观察日志可以看到异常请求登陆的IP地址

通过jumpserver管理界面可以看到记录到的IP是127.0.0.1

可以把日志记录增加到前面,这样就可以记录每一个ssh登陆者的ip地址,上面的更改只能记录失败情况下的ip地址,记录所有ssh登陆的ip地址更利于后期的安全排查。

coco/interface.py

    def check_auth_password(self, username, password):
        logger.info('SSH连接IP:%s' % self.connection.addr[0])
        user = self.validate_auth(username, password=password)

        if not user:
            logger.warning("Password and public key auth <%s> failed, reject it" % username)
            return paramiko.AUTH_FAILED
        else:
            logger.info("Password auth <%s> success" % username)
            if self.otp_auth:
                return paramiko.AUTH_PARTIALLY_SUCCESSFUL
            return paramiko.AUTH_SUCCESSFUL

异常IP

也可以更改请求的user-agent来进行标识,区分哪些请求是通过coco组件过来的

更改代码:coco/interface.py 125行左右

更改如下:

 

    def validate_auth(self, username, password="", public_key=""):
        if self.check_block_ssh_user(username) or \
                not self.check_allow_ssh_user(username):
            logger.warn("User in black list or not allowed: {}".format(username))
            return None
        app_service.http.default_headers = {"user-agent": 'coco-ssh'}
        info = app_service.authenticate(
            username, password=password, public_key=public_key,
            remote_addr=self.connection.addr[0]
        )
        user = info.get('user', None)
        if user:
            self.connection.user = user
            self.info = info

        seed = info.get('seed', None)
        token = info.get('token', None)
        if seed and not token:
            self.connection.otp_auth = True
            self.otp_auth = True
        return user

查看jumpserver登陆日志,可以看到ssh登陆的UA都变为coco-ssh

欢迎留言