传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。
而通过使用SSH,你可以把所有传输的数据进行加密,这样”中间人”这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。
使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。
SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的”通道”。
什么是ssh
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet,具有更高的安全性。
SSH提供了口令和密钥两种用户验证方式,这两者都是通过密文传输数据的。
不同的是,口令用户验证方式传输的是用户的账户名和密码,这要求输入的密码具有足够的复杂度才能具有更高的安全性。
而基于密钥的安全验证必须为用户自己创建一对密钥,并把共有的密钥放在需要访问的服务器上。当需要连接到SSH服务器上时,客户端软件就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找共有密钥,然后把它和发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有的密钥加密“质询”,并把它发送给客户端软件。客户端收到质询之后,就可以用本地的私人密钥解密再把它发送给服务器。这种方式是相当安全的。
ssh服务认证类型
基于口令认证
基于口令的安全验证的方式就是大家现在一直在用的,只要知道服务器的SSH连接帐号和口令(当然也要知道对应服务器的 IP及开放的 SSH端口,默认为22 ),就可以通过 ssh客户端登录到这台远程主机。此时,联机过程中所有传输的数据都是加密的。
如下所示:
基于密钥认证
首先在客户端生成一对密钥
将客户端的公钥传到服务器端
测试
配置ssh服务
为了能让我们的服务器更加安全,我们可以更改配置文件来阻挡一些非法入侵。
首先我们配置文件备份一遍,以免出错没法还原
[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连接。
更多内容请查看转载链接。
转载自:
http://blog.51cto.com/13438667/2117175