前言
目前公司有一台 Linux应用服务器 和 MySQL数据库,数据库处于内网中,没有外网IP;应用服务器有对外网开放80端口和22端口,用于给用户提供web服务和给运维/开发人员提供SSH登录服务。架构如下:
存在的问题
为了数据库的安全,不将数据库暴露在外网是正确的,而应用服务器上也没有安装MySQL client工具,即使开发人员SSH登录到应用服务器,也不能通过shell登录到数据库对数据进行增删改,在应用服务器上,只能通过代码的形式去连接。但这样就安全了吗?
并不是,开发人员还可以在他们的本地电脑上,通过SSH通道功能连接数据库,常用的数据库管理工具navicat就有提供这个功能。
SSH选项卡填写应用服务器的IP、SSH登录账号密码,常规选项卡填写数据库的账号密码,这样就可以直接在本地连接内网里的数据库,进而对数据进行增删改操作。
解决方法
如果想要禁止SSH通道功能,需要修改应用服务器上的 /etc/ssh/sshd_config
文件,将AllowTcpForwarding
配置项的值由yes
改为no
,此配置项默认是yes
。
改完后,重启ssh服务:sudo service sshd restart
这样navicat就不能通过SSH通道功能直接连接内网里的数据库了。