Linux的安全和加密

1 篇文章 0 订阅

【加密】

  在互联网时代,最重要的是数据信息的安全。为了防止你的网站、服务器或者系统,我们会使用一些手段来防止一些恶意的攻击或者访问。这篇博就来说说linux的安全和加密。
  什么是加密?加密总的来说就是将一串数据或者一个文件从明文转为密文的过程;对于已经加密的数据或者文件,使用某种方法将其从密文转为明文的过程就是解密了。
加密的过程分为两种:对称加密和非对称加密。
  所谓对称加密,就是加密和解密的过程中使用同一个密钥。它的实现过程是:使用钥匙对数据或者文件进行加密,然后用户可以使用这把钥匙对数据或者文件解密。这样做的好处是,在处理数据或者文件时效率很高,但是同时安全性就较低。想想看,如果想让两个用户查看你的文件,你需要把你的钥匙复制两把分别给这两个用户,但由于你的文件锁只有这一个,所以如果这两个用户把你的钥匙复制送给了别人,别人是不是也可以轻而易举的打开你的锁?这样就会造成密钥过多,安全性降低。那么这个问题就由非对称加密来解决了。
  非对称加密就比较厉害了。非对称加密的钥匙是成对出现的。即我们常听说的公钥和私钥。顾名思义,公钥就是公共的钥匙,即这把钥匙大家都可以有,你好我好大家好。那私钥就是自己私人的钥匙呗,自己小金库的钥匙你总不能给人家吧?一个道理。那么非对称加密是怎么实现加密过程的呢?如果只想将一个文件给固定的一个用户看,使用用户的公钥对文件加密,用户如果想要查看,就要使用自己的私钥进行解密,这样是不是就保证了只要用户才能查看文件的内容,而其他人看到的只能是加密过的文件。但是这样做也同时带来一个缺点,就是效率问题。密钥过长,加密解密耗时长。这就是非对称加密的实现原理。
Linux上有一个加密的小工具,即gpg,使用它可以实现对称和非对称加密。

【实验】gpg对称加密

现在我们有两台机器,分别是centos6和centos7,利用gpg来实现对称加密。
现有一个test文件,使用gpg -c 对文件进行加密:

这里写图片描述

输入密钥口令:

这里写图片描述

回车后系统会生成后缀为.gpg的已经加密过的文件:

这里写图片描述

使用scp命令将文件发给centos6:

这里写图片描述

在centos6上查看文件:

这里写图片描述

输入口令:

这里写图片描述
这里写图片描述

对称加密的整个实现过程很简单,因此也验证了我们上面所说的安全性低的问题。

【实验】非对称加密的实现

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

【SSH】

  SSH 为 Secure Shell 的缩写,是建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
可以实现ssh安全登陆有两个软件可以实现:
  openssh:是ssh协议的开源实现,
  dropbear:小型的远程登陆工具。

这里写图片描述

从客户端来看。SSH有两种基于用户的登陆验证方式:
   1、基于口令的安全验证
   2、基于密钥的安全验证
  第一种,基于口令的安全验证,实现原理是:只要你知道账号和口令,就可以登陆到远程主机,所有传输的数据都被加密,每次登陆输入账号口令即可;但是不能保证你连接的服务器是你所想连接的服务器,可能会出现服务器冒充的情况;
  第二种,基于密钥的安全验证,实现原理是:
1、首先客户端会生成一对公钥和私钥,并将自己的公钥发送给服务器并重命名为authorized_keys,存放在服务器的~/.ssh/目录下;
2、然后再向服务器端发送一个连接请求,信息包括IP地址、用户名等;
3、服务器收到公钥和请求后,会到authorized_keys中查找,如果有响应的IP地址、用户名,就会随机生成一个字符串,并使用客户端的公钥加密后发送回去;
4、客户端收到服务器的消息,使用私钥进行解密,并将解密后的字符串发送给服务器;
5、服务器收到客户端的回应,将客户端发来的字符串与之前的字符串进行比对,如果一致,就允许免密码登陆。这就是基于key的验证,在生产中多用到这种方式。
  需要注意的是:需要我们操作的只有第一步和第二步,至于后面的验证步骤,是客户端和服务器自己完成的,并不需要我们来操作。
下面来模拟实验客户端和服务器之间的基于key验证:

【实验】

实验条件:客户端Rhel5(IP地址172.17.253.58)、服务器centos6(IP地址172.17.253.57)
实验目的:实现客户端和服务器之间的基于key验证。
需要使用一条命令:ssh-keygen用于生成密钥,先来看一下它的选项:
选项注释
-b指定密钥长度;
-e读取openssh的私钥或者公钥文件;
-C添加注释;
-f指定用来保存密钥的文件名;
-i读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l显示公钥文件的指纹数据;
-N提供一个新密语;
-P提供(旧)密语;
-q静默模式;
-t指定要创建的密钥类型
-i指定公钥文件
先来看一下基于口令的验证:

这里写图片描述
这里写图片描述

  通过以上实验,基于口令的验证方式只适用于小型环境,如果一个公司有很多台服务器,并且口令都不相同,那么连接起来是不是就很麻烦?这就需要用到基于key验证的登陆方式;那我们接下来来看看基于key验证的登陆方式:

这里写图片描述
这里写图片描述
这里写图片描述

下面的验证是由客户端和服务器自己完成的,我们不需要操作,只需要登陆验证一下就可以了:

这里写图片描述

  思考一下:如果我们只是完成了上述操作,那么这样来说,服务器是不是照样是不安全的?虽然客户端连接方便了,但是如果客户端遭受了黑客攻击,从而就可以通过控制客户端来控制服务器了,是不是很吓人?为了解决这个问题,那我们需要给私钥设置一个口令来加把锁:

这里写图片描述

   这样的做法也衍生出一个问题:为了安全给私钥设置了口令,那么每登陆一次就需要输入私钥的口令,这样跟口令验证的方法并没有什么不同,那么如何体现出基于key验证的特殊之处呢?我们需要找一个中间人,把钥匙托管给他,我们只需要告诉他一次口令,剩下的验证就可以交给他实现了:

这里写图片描述

   使用验证代理的好处是,退出登陆即失效,如果客户端这边临时有事只需退出系统,需要登陆时验证代理激活就可以了,这样就可以防止别有用心的人操作客户端而进行攻击服务器,相对来说比较安全。
ssh工具也有一些选项:
选项注释
-p port指定远程服务器监听的端口
-b指定连接的源IP
-v调试模式
-C请求压缩所有数据
-X启支持X11转发功能
-x关闭x11转发功能
-Y支持信任x11转发
-t伪终端登陆,找一个跳板机实现间接连接
简单说一下-t 选项:
  例如这样的环境:Rhel5可以连接centos6,不能连接centos7;而centos6可以连接Rhel5和centos7,那么如果我们想要使Rhel5连接centos7,就可以讲centos6作为一个跳板,通过连接centos6跳到centos7上,实现间接连接centos7上。

这里写图片描述

这里写图片描述

现在我们使用-t `选项来实现:

这里写图片描述这里写图片描述

看~~已经成功连接~
而在centos7上显示是谁在连接呢?

这里写图片描述

centos7上可以看出是centos6在连接,并不知道实际是Rhel5在连接。所以这是-t 选项实现了伪终端登陆。
【SSH端口转发】
   SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发。
  它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。
这一过程有时也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。
  例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果您工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,那么也是能够通过将 TCP 端口转发来使用 SSH 进行通讯。
总的来说 SSH 端口转发能够提供两大功能:
   加密 SSH Client 端至 SSH Server 端之间的通讯数据。
  突破防火墙的限制完成一些之前无法建立的 TCP 连接。
SSH端口转发分为本地转发、远程转发和动态转发。

【实验】

实验条件:客户端A(REHL5)、SSH服务器B(centos6)、TLENET服务器C(centos7)
[本地转发]
     客户端A ————–SSH服务器B—————-TLENET服务器C
实验条件:
A客户端可以连接B服务器,但是C服务器限制只能B服务器连接;
实现A客户端通过B服务器实现间接连接C服务器
实验目的:通过服务器B实现客户端A对服务器C的连接。
命令:ssh -L 9527:192.168.216.128:23 -fN 192.168.216.129<该条命令要在客户端上执行>

这里写图片描述
这里写图片描述

使用-L选项实现本地转发,另外还有其他几个选项的功能:
     -f 后台启用
     -N 不打开远程shell,处于等待状态
     -g 启用网关功能
同时查看是否已经在本机开启了一个9527端口:

这里写图片描述

访问本机的9527端口,数据被加密后会转发到ssh服务器的ssh服务,再解密被转发到服务器的23端口:

这里写图片描述

可以查看在centos7上是哪台机器在连接?

这里写图片描述

注意:
1、SSH 端口转发是通过SSH 连接建立起来的,我们必须保持这个SSH连接以使端口转发保持生效。
如果关闭此连接,相应的端口转发也会随之关闭。
2、我们只能在建立 SSH 连接的同时创建端口转发,而不能给一个已经存在的 SSH 连接增加端口转发。
【远程转发】
     客户端A ————–SSH服务器B—————-TELNET服务器C
实验条件:
外部网络(A)不能访问内部网络(BC)的任何一个服务器,但是B可以穿过防火墙访问A,这时利用远程转发,将AB的身份互调,
B暂时充当客户端,A充当服务器来实现端口转发。
命令: ssh -R 9527:192.168.216.128:23 -fN 192.168.216.129 <这条命令在B上执行>
远程端口转发和本地端口转发的原理相似,只是每台机器充当的角色发生变化;
【动态转发】
本地和远程转发都限定了目标服务器和目标服务器的端口;
动态端口转发没有太多限制,A把B作为自己的全权代理,不限定目标服务器及端口。
这里要求在A上,做下代理设置,比如浏览器的代理设定为自己的IP:PORT;
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值