本次实验均是在RHEL6.5虚拟机上进行的。
服务器:202.100.10.2(用户lisi、mike)
客户端1:202.100.10.10(用户zhangsan、wangwu)
客户端2:202.100.10.50(用户zhangliu)
SSH 为 Secure Shell (安全外壳协议)的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
传统的网络服务程序,如:ftp、pop 和 telnet 在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓 " 中间人 " 的攻击方式, 就是 " 中间人 " 冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被 " 中间人 " 一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样 " 中间人 " 这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP甚至为PPP提供一个安全的 " 通道 " 。
从客户端来看,SSH提供两种级别的安全验证。
- 第一种级别(基于口令的安全验证):只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到 " 中间人 " 这种方式的攻击。这种验证安全性较低。
- 第二种级别(基于密钥的安全验证):首先需要客户端创建密钥对,并把公用密钥放在需要访问的服务器上。登录的时候,服务器会向用户发送一段随机字符串,用户用自己的私钥加密后,再发给服务器,服务器用客户端事先上传的公钥进行解密,如果正确,就证明用户是可信的,直接允许登录shell,不再要求密码,错误的话直接拒绝登录。用这种方式,你必须知道自己密钥的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
1、配置SSH Server端
2、配置客户端1
1、默认情况下,服务器端的用户root允许被远程登录(不安全)
在客户端1上远程登录服务器端的用户root,登录成功
2、在客户端1用密码验证远程登录服务器端的用户lisi
3、在客户端1上创建密钥对
4、在服务器端创建.ssh文件夹,并在客户端1上将公钥文件上传至服务器端。
5、在服务器端的/home/lisi/.ssh文件夹下可以看到客户端1上传的公钥文件。
6、在服务器端对ssh服务进行配置,禁用密码验证,启用公钥验证
7、客户端1启用密钥对验证登录
在客户端以zhangsan的身份远程登录服务器端的用户lisi。可以看到拒绝登录,这是因为.ssh文件所属组的权限过大,减去其 '写入' 权限,可成功远程登录服务器端的用户lisi。
1、在客户端1添加用户wangwu,使其可以密钥对验证远程登录服务器端。
2、将用户zhangsan创建的密钥对文件拷贝到用户wangwu的数组目录下。
3、将/home/wangwu/.ssh文件夹及其内部所有文件的所有者和所属组改为wangwu
4、客户端1的用户wangwu使用密钥对验证成功远程登录服务器端的用户lisi。
这个实验说明,一旦我们的密钥对被别有用心的人拿到,他便可以冒充我们与服务器端建立连接。因此,一定要好好保护密钥对文件。
1、在服务器端添加用户mike
2、验证客户端1的wangwu是否可以使用密钥对远程登录服务器端的用户mike
3、在服务器端对SSH服务进行配置,仅允许用户lisi被远程登录
4、在客户端验证
1、新开一台虚拟机,为客户端2,配置其IP(202.100.10.50)
2、测试其与服务器的连通性
3、添加用户zhangliu,并使用密码验证远程登录服务器端的用户lisi。
4、在服务器端限制被登录的用户和登录的IP
5、登录验证
1)IP地址为202.100.10.10的客户机,拒绝远程登录
2)IP地址为202.100.10.50,成功远程登录
1、在服务器端修改SSH服务的配置文件
2、在客户端验证,达到认证次数,直接退出连接界面
TCP_Wrappers 是一个工作在第四层(传输层)的的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制,凡是包含有 libwrap.so 库文件的的程序就可以受
TCP_Wrappers
的安全控制。它的主要功能就是控制谁可以访问,常见的程序有 vsftpd、sshd、telnet。
TCP_Wrappers 有一个 TCP 的守护进程叫作 tcpd 。以 ssh 为例,每当有 ssh 的连接请求时,tcpd 即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的 ssh 进程,由 ssh 完成后续工作;如果这次连接发起的 IP 不符合访问控制文件中的设置,则会中断连接请求,拒绝提供 ssh 服务。
TCP_Wrappers 的使用主要是依靠两个配置文件
/etc/hosts.allow
,/etc/hosts.deny
。在刚开始的时候,/etc/hosts.allow
,/etc/hosts.deny
什么都没有添加,此时没有限制,任何主机都可以连接。当我们想要访问其他主机的资源,在连接过程中,策略的应用顺序如下:
- 先检查/etc/hosts.allow,找到匹配则允许访问。
- 否则在检查/etc/hosts.deny,找到则拒绝访问。
- 若两个文件中均无匹配策略,则默认允许访问。
在开始本实验之前需先在服务器端的SSH配置文件中注释掉下面红框中的语句,避免产生干扰。
1、在/etc/hosts.allow中指定允许远程登录的IP
2、在/etc/hosts.deny中拒绝所有主机远程登录
3、在客户端验证
1)主机IP地址为202.100.10.10,允许远程登录
2)主机IP地址为202.100.10.150,拒绝远程登录