传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,由于它们在网络上用明文传送口令和数据,别有用心的人很是容易就能够截获这些口令和数据。并且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的***。所谓“中间人”的***方式,就是“中间人”冒充真正的服务器接收你的传给服务器的数据,而后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手作了手脚以后,就会出现很严重的问题。 web
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为创建在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登陆会话和其余网络服务提供安全性的协议。利用 SSH 协议能够有效防止远程管理过程当中的信息泄露问题。
SSH是标准的网络协议,可用于大多数UNIX操做系统,可以实现字符界面的远程登陆管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于经过明文传输的Telnet,具备更高的安全性。
SSH提供了口令和密钥两种用户验证方式,这二者都是经过密文传输数据的。
不一样的是,口令用户验证方式传输的是用户的帐户名和密码,这要求输入的密码具备足够的复杂度才能具备更高的安全性。
而基于密钥的安全验证必须为用户本身建立一对密钥,并把共有的密钥放在须要访问的服务器上。当须要链接到SSH服务器上时,客户端软件就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求以后,先在该用户的根目录下寻找共有密钥,而后把它和发送过来的公有密钥进行比较。若是两个密钥一致,服务器就用公有的密钥加密“质询”,并把它发送给客户端软件。客户端收到质询以后,就能够用本地的私人密钥解密再把它发送给服务器。这种方式是至关安全的。shell
1.基于口令认证数据库
基于口令的安全验证的方式就是你们如今一直在用的,只要知道服务器的SSH链接账号和口令(固然也要知道对应服务器的 IP及开放的 SSH端口,默认为22 ),就能够经过 ssh客户端登陆到这台远程主机。此时,联机过程当中全部传输的数据都是加密的。
以下所示
2.基于密钥认证centos
首先在客户端生成一对密钥
将客户端的公钥传到服务器端
测试安全
为了能让咱们的服务器更加安全,咱们能够更改配置文件来阻挡一些***的***。
首先咱们配置文件备份一遍,以避免出错无法还原[root@ca .ssh]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
修改配置文件
咱们经过看配置文件发现ssh服务的默认端口是22,不少时候咱们的服务器被***不是被人针对***了,而是对方在扫一个网段中开启22端口的机器,你的机器密码又是很简单的111111之类的,你不被黑谁被黑,因此咱们要把默认端口改了,这样就不容易被人扫出来恶意***了。
修改默认端口
咱们把默认端口改成9527,(注意改的这个端口必定不能占用别的服务的默认端口,以避免别的服务启动不起来)效果以下
xshell默认用22端口登陆,因此登陆不上,咱们换9527端口登陆。
成功登陆
禁止root登陆
root在咱们系统中是一个特殊的存在,他是系统管理员,也就意味着他在系统中能够随心所欲,因此它也是咱们要特别关注的对象,咱们能够再碰是的操做中用普通用户操做,在有须要修改一些系统设置的时候再从普通用户切换到root用户,这样能够最大限度的避免由于误操做而对系统形成破坏,同时也能够避免***使用root用户名来暴力破解密码登陆系统
咱们能够看到系统默认的配置是容许root登陆的因此咱们把它改成no就能够禁止root登陆了,咱们能够看下效果
若是你用root登陆不论你密码是否输入正确他都会提示拒绝了密码,因此你可让***尽情尝试暴力破解他也登陆不上去。
限制ssh监听的IP
这个适用于服务器有多个IP,这样咱们就能够只监听内网IP,这样就只能用在同一个局域网的机器去链接,而咱们只须要让在同一个服务器的另外一台机器监听在外网,这样就能够实如今外网也访问服务器了,方法以下
在sshd_config中修改监听端口
咱们来看下效果
咱们的这台机器是有两个ip的咱们分别测试用这两个ip链接
能够看到咱们只能经过192.168.92.133链接
禁止使用密码登陆
在前面咱们说过使用key认证登陆的,这是一种比较安全的登陆方式,因此为了提升安全性咱们能够经过这种方式来登陆服务器,再禁止使用密码登陆使用key认证登陆我已经说过了,在这里就说下如何禁止使用密码登陆,也只须要修改一下配置文件就能够了,以下
这个时候咱们是没法用密码登陆系统的
而咱们须要传公钥就得要密码这是很矛盾的,因此须要咱们提早把公钥传给服务器,或者临时开启密码登陆,而后就能实现登陆了。服务器
SSH 不光会自动加密和解密全部 SSH 客户端与服务端之间的网络数据。并且SSH 还有一个很是有用的功能,这就是端口转发。它可以将其余 TCP 端口的网络数据经过 SSH 连接来转发,而且自动提供了相应的加密及解密服务。这一过程有时也被叫作“隧道”(tunneling),这是由于 SSH 为其余 TCP 连接提供了一个安全的通道来进行传输而得名。
ssh端口转发两大功能
1.加密SSH Client 端至SSH Server端之间的通讯数据
2.为了突破防火墙的限制完成一些以前没法创建的TCP链接
ssh端口转发又分为本地转发和远程转发
1.本地转发
本地转发主要运用于目标服务器由于防火墙规则没法访问,只能由处于同一个局域网内的机器访问,这时候就须要咱们用本地端口转发了
本地端口转发格式以下:
ssh -L <local port>:<remote host>:<remote port> <SSH hostname>
外部主机A要访问数据库服务器C,可是由于防火墙规则没法直接访问,这时候咱们要先链接内部服务器B,经过B来链接C,也就是拿B作跳板
首先咱们要在外部主机上选择一个端口做为监听端口,咱们使用telnet访问,因此不能用管理员访问,而非管理员用户对1-1023端口是没有权限的,因此咱们要选1024-65535之间未被占用的端口。
在数据库服务器上也要安装telnet.server
咱们只须要在外部主机上操做就能够了
首先咱们看可否直接链接数据库服务器
咱们作一个本地端口转发
[root@web ~]# ssh -L 1080:centos6:23 -Nf centos7dns
centos6就是咱们要访问的数据库服务器
centos7dns就是咱们的转发服务器
1080就是咱们选择的本地端口
-f:后台启用
-N:不打开远程shell,处于等待状态
-g:启用网关功能
这个时候咱们只需经过本地监听的1080端口就能访问数据库服务器了
2.远程转发
远程转发不一样之处在于远程转发的监听端口是在远程主机上打开的,就像咱们要访问数据库服务器C,使用远程端口转发就是在内部服务器B上进行,使用远程端口转发要保证端口转发服务器和目标服务器之间没有被防火墙拦截。
SSH 的远程端口转发的格式以下所示
ssh -R sshserver_port:remote_host:remotehost_port sshserver
远程端口的转发应用于数据库服务器和内部管理都不容许外网链接,这时候咱们就须要在内部管理服务器上作一个远程端口转发隧道,让远程主机能够与数据库服务器创建链接
[root@db ~]# ssh -R 1080:centos6 -Nf centos7
这样远程主机监听本地端口,使用telnet协议就能够远程访问数据库服务器了。网络